首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将一个纯本地应用移植到 Web 端

在研究一个奇怪的缓存错误(https://actualbudget.com/blog/cursed-caching-curious)时我得到了启发,于是去重新看了一下 Actual 是如何在 Web 端本地存储数据的...这里我需要解释一些历史背景:多年前,Actual 原本是一个单纯的桌面应用程序来着。这意味着我们的所有数据都会存储在本地,没有服务器,自然也不会在网络上存储任何内容。...我最担心的是数据存储层。由于 所有数据都在本地存储,因此如果本地环境出现了什么问题,用户就可能会丢失数据。而且因为我们要把所有内容都存储在本地,这给浏览器的持久数据库也带来了巨大压力。...我一直在深入研究各种浏览器是如何在磁盘上存储 IndexedDB 数据的,并发现了我可以做出的一些改进策略。我本想在这篇文章中详细介绍一番,但最后我还是把主题放在了整体概述上。...在下一篇文章中,我将深入研究 IndexedDB 是如何在浏览器中工作的。 注释 [0] 虽然我在这篇文章中没有谈论这个话题,不过它意味着整个应用都在浏览器中运行。

1.9K20

从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

一、前言 一切的谜都解开了!在写这篇随笔之前,我的心情只能用金田一每次破案后的这句台词来表达。...其实我以前一直对Unicode有点误解,在我的印象中Unicode码最大只能到0xFFFF,也就是最多只能表示 2^16 个字符,在仔细看了维基百科之后才明白,早期的UCS-2编码方案确实是这样,UCS...注意:UTF-8是Unicode的标准实现,它的代码页中包含了所有的Unicode取值,所以任意编码转换到UTF-8,再转换回去都不会有任何丢失。...我用如下的代码测试发现,当通过编码数据在代码页中查不到对应的Unicode时,就返回缺省值\ufffd(对应图中第一种问号),反过来,当通过Unicode在代码页中查不到对应的编码数据时,就返回缺省值0x3f...如下图所示,编译后这3个Unicode在.class文件中实际以类UTF-8编码存储,运行的时候,JVM中存储的就是Unicode,然而最终输出时,还是会编码之后传递给终端,这次约定的编码就是系统区域设置的编码

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于 Virtual SANVSAN 的常见问题解答

    我认为可以将其与内存预留进行比较。 • 问:VSAN会使用 iSCSI 或 NFS 将主机连接到数据存储吗? 答:VSAN 不会使用其中任何一种将主机连接到数据存储。它会使用一个专有机制。...• 问:虚拟机在群集中移动时,它的对象是否会跟着一起移动,以使 IO 保持本地状态呢? 答:不会,对象(如虚拟磁盘)不会跟着虚拟机一起移动。...您需要使用相关标识符将 SSD 标记为本地(以下示例是我在实验室中使用的,可能与您的标识符不同)。此处,我将其设为了“本地”和“SSD”。...• 问:虚拟机在群集中移动时,它的对象是否会跟着一起移动,以使 IO 保持本地状态呢? 答:不会,对象(如虚拟磁盘)不会跟着虚拟机一起移动。...您需要使用相关标识符将 SSD 标记为本地(以下示例是我在实验室中使用的,可能与您的标识符不同)。此处,我将其设为了“本地”和“SSD”。

    2.4K20

    API 工程化分享

    依赖信息丢失 proto 未更新 钻石依赖 依赖信息丢失 在你的工程里面依赖了其他服务,依赖信息变成了源码依赖,你根本不知道依赖了哪个服务,以前是 protobuf 的依赖关系,现在变成了源码依赖,服务依赖信息丢失了...文件,因为对它来说这个依赖信息已经丢失,为什么每次都要去做这个动作呢?...,这使我们能够在不同的 API,API 协议(如 gRPC 或 HTTP)以及错误上下文(例如,异步,批处理或工作流错误)中获得一致的体验。...比如你返回的错误码是4,代表商品已下架,我对这个错误很感兴趣,但是错误码4 在我的项目里面已经被用了,我就把它翻译为我还没使用的错误码6,这样每次翻译的时候就可以对上一层你的调用者,你就可以交代清楚你会返回错误码...我们知道以前 dubbo 2.x,3.x 之前都是把这些元信息注册到注册中心的,导致整个数据中心的存储爆炸,那么元信息在哪?

    58930

    理解Session State模式+ASP.NET SESSION丢失FAQ

    StateServer:当存储基本类型(如string,integer等)数据时,在同一个测试环境中它比InProc慢15%。...如果你存储大量对象,序列化和反序列化可能影响到性能 SQLServer:当存储基本类型(如string,integer等)数据时,在同一个测试环境中它比InProc慢25%。...Session_End中的代码使用工作者进程账号运行,如果你访问如数据库这样的资源时,可能会有权限问题。 b. 如果在Session_End中发生错误,程序不会通知发生了什么 5....在这种情况下,那么每次请求都会创建一个新的session state(ID也是新的),但是不会被存储,因为里面什么数据都没有。...Q: 我将cookieless设置为true,在Redirect之后session变量丢失了,为什么? A: 如果你使用的是cookieless,你必须使用相对路径(如..

    1.6K20

    揭秘软件开发中的达摩克利斯之剑

    经历了那么多次的强化和改造,我的功能逐渐变多的同时,也因此被植入了各种框架和插件,体积像滚雪球一般越来越大,不知道什么时候就会爆炸。以至于主人们每次改动我时都要万分谨慎,我的成长也变得十分缓慢。...一般情况下,上传到对象存储的文件是不会缺失或丢失的,而且还可以将已上传的数据进行跨园区同步,起到备份的作用。...起初我以为是文件上传到对象存储时,会自动被压缩,但是将对象存储中的文件下载到本地后,发现的确和源文件不一致!虽然出现这种情况的概率极其小,但从那一刻起,我再也不相信对象存储了。...配置回滚 如果将项目的配置信息,比如数据库链接地址,写死到代码中,一旦配置错了或者地址发生变更,就要重新修改代码,非常麻烦。...通常,在高并发项目中,我们会设计多级缓存,即分布式缓存 + 本地缓存。当请求需要获取数据时,先从分布式缓存(比如 Redis) 中查询,如果分布式缓存集体宕机,那就从本地缓存中获取数据。

    63630

    创建一个DIY的APM监视Node.js中的Web应用程序的性能

    在本文中,我们将构建一个工具来监视在一个简单的Node.js应用程序应答HTTP请求时在MongoDB中花费多少时间。.../ cats时,控制台显示: 但是,这个补丁会有几个问题: 1.我们不知道哪个HTTP请求负责这个调用。...让我们编写一个包装函数来执行返回一个promise的函数: 每次调用方法时,我们都会为每个性能度量创建一个唯一的ID。这将确保两个定时操作之间不发生碰撞。...这个API使我们能够在异步操作上设置钩子。 出于我们的目的,我们只需要这个API来跟踪负责代码执行的HTTP请求。一些包(如持续本地存储或区域的各种实现)提供了类似的功能。...它可以通过调用: 在给你源码之前,我会分享我最后两个秘密: 1.为了覆盖一个模块,我们可以通过改变核心中的私有方法来改变需要的行为。这不是一个好的解决方案,但目前我还不知道有什么更好的方法来实现它。

    1.5K80

    【前端面试题】2021315面试题

    token,存储到服务器中,并返回token到APP,以后APP请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让他重新登录。...其中服务器上token设置一个有效期,每次APP请求的时候都验证token和有效期。 那么我的问题来了: 1.服务器上的token存储到数据库中,每次查询会不会很费时。...话说加密存储一个你要是被人扒开客户端看也不会被喷明文存储…… 方法1它拿到存储的密文解不开、方法2它不知道你的签名算法和盐,两者可以结合食用。...(在请求接口调用时触发) // 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么...因为在MVVM中,View不知道Model的存在,ViewModel和Model也察觉不到View,这种低耦合模式可以使开发过程更加容易,提高应用的可重用性。

    1K10

    为什么JSON.parse会损坏大数字,如何解决这个问题?

    你可以将一个JSON文档粘贴到一个JavaScript文件中,这就是有效的JavaScript。 在JavaScript中使用JSON应该不会出现任何问题,但有一种棘手的情况可能会破坏数据:大数字。...像 9123372036854000123 这样的长数字既是有效的 JSON 也是有效的 JavaScript。当JavaScript 将数值解析为数字时,事情就出错了。...在用浮点数存储分数时也会发生同样的情况:当你在 JavaScript 中计算 1/3时,结果是: 0.3333333333333333 在现实中,该值应该有无限的小数,但 JavaScript 的数字在大约...这取决于你在解析数据后想做什么,但通常情况下,你想用它做一些事情。在屏幕上显示数据,验证它,比较它,排序它,等等。...这个库不知道BigInt或LosslessNumber类型,不会正确串联这些数据类型。

    2.8K20

    使用可重入函数进行更安全的信号处理

    可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 可重入函数: 不为连续的调用持有静态数据。...然后进程继续执行,但现在执行的是信号处理器中的指令。如果信号处理器返回,则进程继续执行信号被捕获时正在执行的正常的指令序列。 现在,在信号处理器中您并不知道信号被捕获时进程正在执行什么内容。...在大部分机器上,在 data 中存储一个新值都需要若干个指令,每次存储一个字。如果在这些指令期间发出信号,则处理器可能发现 data.a 为 0 而 data.b 为 1,或者反之。...不过这必须要小心进行,因为将一个对象添加到一个链并不是原子操作,如果它被另一个做同样动作的信号处理器打断,那么就会“丢失”一个对象。...编译器可以将这个指示符存储在它的符号表中,并在中间代码生成阶段使用这个指示符。为达到此目的,编译器的前端设计需要有一些改变。此可重入指示符遵循这些准则: 不为连续的调用持有静态数据。

    1.6K20

    MQ消息中间件,面试能问些什么?

    (2)既然用了消息队列这个东西,你知不知道用了有什么好处? (3)既然你用了MQ,那么当时为什么选用这一款MQ? 1. 为什么使用消息队列?...非常高,分布式架构 非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 消息可靠性 有较低的概率丢失数据 经过参数优化配置,可以做到0丢失 经过参数优化配置,...这个时候得用rabbitmq提供的ack机制,简单来说,就是你关闭rabbitmq自动ack,可以通过一个api来调用就行,然后每次你自己代码里确保处理完的时候,再程序里ack一把。...leader所在broker发生故障,进行leader切换时,数据不会丢失 3)生产者会不会弄丢数据 如果按照上述的思路设置了ack=all,一定不会丢,要求是,你的leader接收到消息,所有的follower...这个生产系统中常见的问题。 我举个例子,我们以前做过一个mysql binlog同步的系统,压力还是非常大的,日同步数据要达到上亿。

    46230

    MQ

    (2)第二,你既然用了消息队列这个东西,你知道不知道用了有什么好处? 系统中引入消息队列之后会不会有什么坏处?你要是没考虑过这个,那你盲目弄个MQ进系统里,后面出了问题你是不是就自己溜了给公司留坑?...非常高,分布式架构 非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 消息可靠性 有较低的概率丢失数据 经过参数优化配置,可以做到0丢失 经过参数优化配置,...这就有所谓的高可用性了。 写数据的时候,生产者就写leader,然后leader将数据落地写本地磁盘,接着其他follower自己主动从leader来pull数据。...这个时候得用rabbitmq提供的ack机制,简单来说,就是你关闭rabbitmq自动ack,可以通过一个api来调用就行,然后每次你自己代码里确保处理完的时候,再程序里ack一把。...leader所在broker发生故障,进行leader切换时,数据不会丢失 3)生产者会不会弄丢数据 如果按照上述的思路设置了ack=all,一定不会丢,要求是,你的leader接收到消息,所有的follower

    2.9K71

    你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

    Redis是单线程执行的。在完成一个操作之前,不会有其他的操作被执行。这的确是真的。但是,在业务开发中,需要的不是一个简单操作的原子性,而需要实现一个临界区的原子性。...用户下单时,要在Redis中扣减库存,并且在另外一个数据库中INSERT一条交易记录。这段逻辑是没法做到原子的——除非你自行实现了某种分布式事务的机制。...你是否具有专业的存储开发技能,你能投入多少精力在ACID上,你的公司能给你多少资源做开发测试,这些都需要仔细考虑。 用Redis可以当队列,吗? Redis实现了一个List的数据结构。...试想一下,你的界面允许用户下一笔订单,用户已经看到了“成功下单”的界面,结果之后却发现什么订单也没有。用户是不是有一句MMP不知道当讲不当讲。...也许,你会说,"我的场景不需要这么严格的一致性,数据丢了没所谓,也不需要事件重放,数据处理错了就错了"。这个Redis的确可以办到,而且可以做得很好。

    3.8K110

    程序员如何提一个好问题

    所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像时不同于Docker?...问答案是事实的问题 我有很多问题一开始有点模糊,如“SQL中的连接查询JOIN如何工作?”。这个问题不是很棒,因为连接查询如何工作有很多不同的部分!那么对方怎么知道我有兴趣学习的是什么?...我问的人通常真的非常善于说“不,我不知道!” 识别你不明白的术语 当我开始当前这份工作时,我首先去了数据团队。当我看我的新工作需要什么的时候,有这些要求!...做一些研究 在我键入上面的SQL问题时,我在Google搜索框中输入了“如何实现SQL连接”。...我认为将好的问题当作一件你可以做的超棒的事情,并放到对话中是很重要的,而不要只是认为“问好的问题,这样人们才只会稍微恼火,而不会非常非常恼火”。

    85650

    干货 | 我从资深软件工程师学到的避坑大法

    例如:当你在 SQLAlchemy 中调用 session.close() 时,这只会关闭会话但不会关闭底层数据库的连接。...每次代码审查时我都问自己:「他们为什么这样做?「。每当我找不到合适的答案时,我就会去和他们谈谈。 在第一个月后,我开始在同事的代码中找到错误(就像他们对我代码做的一样)。...最后我们使用了一个有角色访问控制的数据库(只有我们的机器可以与数据库对话)。我们的代码在启动时从这个数据库中获取秘密数据。这个能在开发、测试和产品之间很好地复制——在各自的数据库中都有机密。...你知道每台机器上运行的是什么,以及如何在死机的情况下重新创建它们。当一台机器死机时,你不会心烦意乱,你只需要启动一台新机器。你像牛一样放养它们,而不是像宠物一样养着他们。...如果一个衡量标准是当前产品中运行的机器数量,当这个数字降到 50% 时,这是一个很好的警报——你知道有什么出错了。 失败计数高于某个阈值时?是的,又一个警报。 这里暗示了另一个需要养成的习惯。

    57520

    docker解决数据存储问题的方案

    /userguide/dockervolumes/ 在介绍具体方案以前先说说基于container运行的程序有什么样的数据存储问题。...传统的软件开发人员都习惯了使用本地磁盘保存文件等数据,如果程序挂了以后重新启动以后那么数据还在(硬盘没坏的情况下),你可能会说为什么不使用云存储或者分布式文件系统或者数据库之类的,首先传统行业开发者可能还没有接受或者接触云存储系统和概念...先看看我以前是怎么解决这个问题的(其实你会发现和docker的解决方案是那么惊人的相似),我们为开发者提供一个目录,承诺在这个目录下存放的文件保证在大多数情况下不会丢失(极端情况可能会丢失一些数据,例如硬盘坏掉而且这时数据刚好还没有成功备份...为了解决上传过多文件到云存储每次都是覆盖以前老的文件,即一个应用只有一个压缩文件被存放在云存储。通过这种方案我们解决了基本上99%以上的数据存储问题。...现在docker自身系统应该还不能夸机器的container共享数据吧,要做其实也简单,通过网络共享volume。但是为什么docker现在没有做(不知道是不是我不知道而已),我想这种需求有吗?

    1.1K70

    我嘴都气歪了!

    任务丢失 我们在编写业务代码时,经常会将比较耗时的任务异步化,将任务提交到线程池后立即返回成功。线程池会从任务队列中依次读取并执行任务。...消息丢失 在分布式系统中,各个节点间经常通过消息来进行交互和协作,而程序的中断可能会在不同情况下导致消息丢失。 1....很多同学在本地调试时,应该也会遇到因为强退导致的 3000、8080 端口未被释放的问题。...此外,服务下线时如果未向上游(该服务调用方)通知,还可能导致上游的持续调用,严重时会产生雪崩效应,整条服务链路中断! 尤其是在分布式场景下,出现进程强制中断对集群的影响(比如数据一致性)非常大。...--- 其实,相比起这些问题,更可怕的是,如果没有完善的数据监控和检测机制,你甚至完全不知道在强制停机后有没有出现问题?出现了哪些问题?哪些数据丢失?哪些数据不一致?哪些任务需要补偿?

    72240

    程序员如何提一个好问题

    所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像时不同于Docker?...问答案是事实的问题 我有很多问题一开始有点模糊,如“SQL中的连接查询JOIN如何工作?”。这个问题不是很棒,因为连接查询如何工作有很多不同的部分!那么对方怎么知道我有兴趣学习的是什么?...我问的人通常真的非常善于说“不,我不知道!” 识别你不明白的术语 当我开始当前这份工作时,我首先去了数据团队。当我看我的新工作需要什么的时候,有这些要求!...做一些研究 在我键入上面的SQL问题时,我在Google搜索框中输入了“如何实现SQL连接”。...我认为将好的问题当作一件你可以做的超棒的事情,并放到对话中是很重要的,而不要只是认为“问好的问题,这样人们才只会稍微恼火,而不会非常非常恼火”。

    1K40

    程序员如何提一个好问题

    我一直在问人们一些愚蠢并且完全可以通过谷歌搜索或搜索代码库解决的问题。大多数时候我都不愿意自己去搜索解决,但有的时候我又会无论如何都自己去搞定,而且也不会认为这如同世界末日一样可怕。...所以我把这个问题写到 rkt-dev 邮件列表:为什么rkt存储容器图像时不同于Docker?...我问的人通常真的非常善于说“不,我不知道!” 识别你不明白的术语 当我开始当前这份工作时,我首先去了数据团队。当我看我的新工作需要什么的时候,有这些要求!...做一些研究 在我键入上面的SQL问题时,我在Google搜索框中输入了“如何实现SQL连接”。...我认为将好的问题当作一件你可以做的超棒的事情,并放到对话中是很重要的,而不要只是认为“问好的问题,这样人们才只会稍微恼火,而不会非常非常恼火”。

    69230

    前端面试题(HTML和CSS)

    IE6也是类似这样做的,它将DTD当成了这个“参数”,以前的页面大家都不会去写DTD,所以IE6就假定 如果写了DTD,就意味着这个页面将采用对CSS支持更好的布局,而如果没有,则采用兼容之前的布局方式...sessionStorage (session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。...因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。...Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。...但是Cookie也是不可以或缺的:Cookie 的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

    74920
    领券