[英]Performance implication of continuously accessing cookies in timer
我正在開發一個有一些有趣的Javascript的網站,我擔心它可能會導致速度較慢的機器出現性能問題。
該腳本使用setInterval來運行處理程序EVERY SECOND。 處理程序執行以下操作:
cookie有一個到期日期,所以理論上它應該每次寫入磁盤,而不是保存在內存中。
到目前為止它在我的電腦上工作得很好,但我有一台帶有固態硬盤的快速機器。 你認為這種設計會在較慢的盒子或繁忙的硬盤上引起問題嗎? 可能導致每1秒發生一次輕微的口吃效果? 只是尋找一些保證,這種設計並非絕對瘋狂。 謝謝。
在瀏覽器中,JavaScript執行是單線程的。 這意味着,當JS代碼運行時, setInterval
函數將無法運行。 同樣,當setInterval
函數正在運行時,其他JS代碼(例如事件處理程序)將無法運行。
因此,確保以較短間隔運行的代碼運行良好非常重要。
在這種情況下,您擁有每秒運行一次的代碼,因此重要的是它需要<< 1s才能完成,否則您將面臨永遠不會留下足夠時間進行其他操作的風險。
有關於訪問的cookies使用jQuery(和不)某些性能數據可在這里 。
它顯示的是讀取和寫入足夠快,你應該能夠做到這一點而不需要花費1s更新間隔。
另一種方法可能是嘗試以下方法
var timeoutId;
var timeoutSetter = function(timeout) {
timeoutId = setTimeout(function() {
cookieUpdate();
timeoutSetter(timeout);
}, timeout);
};
timeoutSetter(1000);
這意味着cookie不會在上次更新后的1s更新,無論更新本身需要多長時間......可能是矯枉過正,它會導致一些相當粗糙的代碼,但它是一個選項。
按照下面的Bergi評論,我認為一個例子是有益的。
轉到http://jsfiddle.net/meYc5/2/並打開控制台。 每次單擊黃色框時,您都會看到Foo clicked
的日志被Foo clicked
。 如果你反復點擊,你會看到它從黃色翻轉到紅色並返回。 有明顯的延遲。 那是因為它當前被配置為setInteval
一次阻塞setInteval
線程500ms。 這意味着事件處理的占空比為50%。
此外,您會注意到textarea中的光標反應較慢。
這個(500毫秒)對於更新cookie來說是一個非常極端的時間,但它說明了原理。 如果你正在使用setInterval
做某事,你應該確保
execution time of the handler << interval period
這樣你就可以保持足夠高的工作周期來處理事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.