“可接受”的最低限度是多少?间隔循环中本地存储的延迟(用于“自动保存”)

What is the minimum "acceptable" delay for a local storage in an interval loop (for "auto-saving")?

本文关键字:可接受 延迟 存储 用于 保存 自动保存 循环 最低限 多少      更新时间:2023-09-26

我正在开发一个具有自动保存功能的web应用程序。我使用这样的东西来管理备份:

setInterval(function(){ 
    localStorage.setItem('save', data) 
}, TIME_INTERVAL)

每个保存替换前一个。

你能告诉我TIME_INTERVAL的合理值吗?

我真的不知道对客户端的影响。我在寻找技术上的答案,从用户的角度来看,永久保存对他们来说是最好的,但如果需要的话,可以容忍延迟。我甚至用TIME_INTERVAL = 1做了一些测试,在我的浏览器上没有看到任何问题,但每毫秒在客户端写数据似乎很疯狂……你觉得呢?我应该每秒保存数据吗?还是说这真的是个糟糕的主意?

如果将间隔设置得太短,客户机中的一些东西会受到影响:

  1. 电池寿命。你不断消耗电池,因为设备永远不会进入睡眠状态(想想平板电脑,手机或笔记本电脑的电池运行)。如果localStorage存储在硬盘上,那么硬盘也不会断电。
  2. CPU争用。你一直在使用CPU,这可能会导致偶尔的CPU争用(在这种情况下可能不明显,因为localStorage.setItem()非常快)。
  3. 存储使用。由于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>
顺便问一下,有人对此有什么看法吗?我这样做已经有一段时间了,在不同的情况下。