“可接受”的最低限度是多少?间隔循环中本地存储的延迟(用于“自动保存”)
What is the minimum "acceptable" delay for a local storage in an interval loop (for "auto-saving")?
我正在开发一个具有自动保存功能的web应用程序。我使用这样的东西来管理备份:
setInterval(function(){
localStorage.setItem('save', data)
}, TIME_INTERVAL)
每个保存替换前一个。
你能告诉我TIME_INTERVAL的合理值吗?
我真的不知道对客户端的影响。我在寻找技术上的答案,从用户的角度来看,永久保存对他们来说是最好的,但如果需要的话,可以容忍延迟。我甚至用TIME_INTERVAL = 1
做了一些测试,在我的浏览器上没有看到任何问题,但每毫秒在客户端写数据似乎很疯狂……你觉得呢?我应该每秒保存数据吗?还是说这真的是个糟糕的主意?
如果将间隔设置得太短,客户机中的一些东西会受到影响:
- 电池寿命。你不断消耗电池,因为设备永远不会进入睡眠状态(想想平板电脑,手机或笔记本电脑的电池运行)。如果localStorage存储在硬盘上,那么硬盘也不会断电。
-
CPU争用。你一直在使用CPU,这可能会导致偶尔的CPU争用(在这种情况下可能不明显,因为
localStorage.setItem()
非常快)。 - 存储使用。由于localStorage是半永久存储(在断电后仍然存在),因此必须将其写入半永久存储,该存储可能是硬盘驱动器或闪存。如果你每隔几毫秒就向这个存储写入一次,它肯定会更快地耗尽这个存储。
因此,由于所有这些在某些方面都是负数,因此您不应该将间隔时间设置得比实际需要的时间短。你会发现许多其他应用程序(如StackOverflow或Google docs)在几分钟内自动保存,并且直到底层数据实际更改后才进行另一次自动保存。
除非你有一个特别的令人信服的案例,让你更经常地节省而不是每隔几分钟,我不明白为什么你应该比这更短。而且,如果你在底层数据发生变化之前都不运行计时器的话,这将非常非常有助于电池寿命。
想想看:刷新屏幕需要16毫秒(对于60Hz的屏幕)(每帧16毫秒)。因此,对于您可能正在做的任何事情来说,1ms听起来都是多余的。
我有一个技巧;也许对你有用。clearartimeout和setTimeout的组合给了你最好的世界。
我在客户端输入和存储之间设置了500ms的延迟(可以随意更改这个数字)。因此,只要客户机停止输入500毫秒,它就会存储一个新值。每增加一个字母就存储一个文本是没有用的。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var t; // timer object
$(document).ready(function() {
var my_textarea = $('#my_textarea');
my_textarea.on('input', function() {
backup(my_textarea.val());
})
});
function backup(data) {
var interval = 500;
// if a change was made, less than 500ms ago, we ignore the previous change, and execute the latest change.
clearTimeout(t);
t = setTimeout(function(){
localStorage.setItem('save', data)
}, interval);
}
</script>
<textarea id="my_textarea"></textarea>
顺便问一下,有人对此有什么看法吗?我这样做已经有一段时间了,在不同的情况下。
相关文章:
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- javascript外部链接文件的可接受数量是多少
- 如何在Django表单中设置可接受的文件类型'的FileInput小部件
- 动画的可接受帧速率有多高
- 当在JSON中使用包含对象的对象与对象数组时,可接受的约定是什么
- 在AngularJS中,一次进行两次调用是一种可接受的方法
- 是否有可接受的跨平台方法在基于触摸的设备上以标准 Web 表单显示数字键盘
- Javascript:从给定的两个片段中引用“this”的可接受方式
- 为什么“{foo:function myName(){}}”语法是可接受的
- 限制Sailsjs中可接受的模型属性
- Javascript可视化:svg地图的可接受大小
- Array.from(arguments)是创建参数数组的一种可接受的方法
- 在javascript for html文件中触发具有可接受延迟的事件
- 如何设置角度管线参数的可接受值
- 在HTML中使用右键单击上下文菜单是否安全或可接受
- Is e = event || window.event;可接受的IE8兼容性
- 将属性附加到函数对象是否安全/可接受?
- 是否有一种可接受的方法可以从函数/方法中省略参数
- 如何从控制器发送可接受格式的数据到Highstock
- “可接受”的最低限度是多少?间隔循环中本地存储的延迟(用于“自动保存”)