什么是最低限度"可接受的"在区间循环中延迟本地存储(对于"自动保存")?

时间:2015-06-10 07:38:51

标签: javascript local-storage

我正在使用具有自动保存功能的网络应用程序。 我使用类似的东西来管理备份:

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

每次保存都会替换前一次保存。

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

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

2 个答案:

答案 0 :(得分:1)

如果您将间隔设置得太短,客户端中的某些内容会受到影响:

  1. 电池寿命。由于设备永远不会进入睡眠状态,因此您不断烧毁电池(想想平板电脑,手机或笔记本电脑使用电池运行)。如果localStorage存储在硬盘上,则硬盘驱动器也不会关闭。
  2. CPU争用。您经常使用CPU,这可能会导致CPU偶尔争用(在这种情况下可能不会引起注意,因为localStorage.setItem()非常快)。
  3. 存储使用情况。由于localStorage是半永久性存储(在断电后仍然存在),因此必须将其写入半永久存储器,该存储器将是硬盘驱动器或闪存。如果你每隔几毫秒就写一次这个存储,它肯定会很快耗尽这个存储空间。
  4. 因此,由于所有这些在某些方面都是否定的,因此您不应将间隔时间设置得比实际需要设置的时间短。您会发现许多其他应用程序(例如StackOverflow或Google文档)会在几分钟内执行自动保存,并且在基础数据实际更改之后,他们不会再执行另一次自动保存。

    除非你有一个特别令人信服的案例,比每隔几分钟更多地保存,我不明白为什么你应该比这更短。并且,如果您甚至不运行计时器,直到基础数据实际发生变化,它真的会真正帮助电池续航。

答案 1 :(得分:1)

想一想:只需要16ms(对于60Hz屏幕)刷新屏幕(每帧16ms)。因此,对于你可能正在做的任何事情,1毫秒听起来总是过度杀伤。

我有一个技巧;也许它对你有用。 clearTimeout和setTimeout的组合为您提供了最好的世界。

我在客户端输入和存储之间放了500毫秒(随意更改此号码)延迟。因此,一旦客户端停止键入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>

顺便问一下,有人对此有意见吗?在不同的情况下,我已经做了一段时间了。