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

Javascript 最低限度是多少;“可接受”;间隔循环中本地存储的延迟(用于“自动保存”)?,javascript,local-storage,Javascript,Local Storage,我正在开发一个具有自动保存功能的web应用程序。 我使用类似的方法来管理备份: setInterval(function(){ localStorage.setItem('save', data) }, TIME_INTERVAL) 每次保存都将替换上一次保存 你能告诉我时间间隔的合理值吗 我真的不知道对客户方的影响。我在寻找技术上的答案,从用户的角度来看,一次永久的扑救对他来说是最好的,但是如果需要的话,可以容忍一次延迟。 我甚至用TIME\u INTERVAL=1做了一些测试,

我正在开发一个具有自动保存功能的web应用程序。 我使用类似的方法来管理备份:

setInterval(function(){ 
    localStorage.setItem('save', data) 
}, TIME_INTERVAL)
每次保存都将替换上一次保存

你能告诉我时间间隔的合理值吗

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

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

  • 电池寿命。由于设备从未进入睡眠状态(想想平板电脑、手机或笔记本电脑都是用电池运行的),因此您会不断消耗电池。如果本地存储存储在硬盘上,那么硬盘也不会断电
  • CPU争用。您一直在使用CPU,这可能会偶尔导致CPU争用(在这种情况下可能不明显,因为
    localStorage.setItem()
    非常快)
  • 存储使用情况。由于本地存储是半永久性存储(断电后仍能保存),因此必须将其写入半永久性存储,该存储可以是硬盘驱动器或闪存。如果每隔几毫秒写入一次此存储,肯定会更快地耗尽该存储
  • 因此,由于所有这些在某些方面都是负面的,所以您不应该将间隔时间设置得比实际需要设置的时间短。您会发现许多其他应用程序(如StackOverflow或Google docs)会在几分钟内自动保存,直到基础数据发生实际更改后,才会再次自动保存


    除非你有一个特别有说服力的理由比每隔几分钟储蓄更多,否则我不明白你为什么要比这更短。而且,如果在底层数据实际更改之前不运行计时器,它将非常非常有助于延长电池寿命。

    想想看:刷新屏幕(每帧16毫秒)需要16毫秒(对于60赫兹屏幕)。所以,对于你可能正在做的任何事情来说,1ms听起来都太过分了

    我有一个窍门;也许对你有用。 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>
    
    
    变量t;//计时器对象
    $(文档).ready(函数(){
    var my_textarea=$('my#u textarea');
    my_textarea.on('input',function()){
    备份(my_textarea.val());
    })
    });
    功能备份(数据){
    var区间=500;
    //如果在不到500毫秒之前进行了更改,我们将忽略以前的更改,并执行最新的更改。
    清除超时(t);
    t=setTimeout(函数(){
    localStorage.setItem('save',data)
    },间隔);
    }
    

    顺便问一下,有人对此有什么看法吗?我已经在不同的情况下这样做了一段时间。

    只保存一次,
    onunload()
    ,或者在任何重要的事情发生之后。为了获得更好的性能,您可以使用
    sessionStorage
    来存储快速变化的数据,这些数据需要在崩溃或意外关闭选项卡后生存下来。@谢谢,
    onload()
    可以完成这项工作。我还要检查会话存储。@dandavis-sessionStorage在浏览器崩溃后无法生存。它在同一个窗口中重新加载页面后仍能生存。@jfriend00:ahhh,它在选项卡崩溃(死jim)时仍能生存,而不是浏览器崩溃,这在当今很少见。