我正在使用具有自动保存功能的网络应用程序。 我使用类似的东西来管理备份:
setInterval(function(){
localStorage.setItem('save', data)
}, TIME_INTERVAL)
每次保存都会替换前一次保存。
你能告诉我 TIME_INTERVAL 的合理价值吗?
我真的不知道对客户端的影响。我正在寻找技术答案,从用户的角度来看,永久保存对他来说是最好的,但如果需要可以容忍延迟。
我甚至用TIME_INTERVAL = 1
进行了一些测试,并没有在我的浏览器上看到任何问题,但是每隔几毫秒在客户端写入数据似乎很疯狂......你怎么看?我应该每秒保存一次数据还是一个非常糟糕的主意?
答案 0 :(得分:1)
如果您将间隔设置得太短,客户端中的某些内容会受到影响:
localStorage.setItem()
非常快)。因此,由于所有这些在某些方面都是否定的,因此您不应将间隔时间设置得比实际需要设置的时间短。您会发现许多其他应用程序(例如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>
顺便问一下,有人对此有意见吗?在不同的情况下,我已经做了一段时间了。