天天看點

《Web性能實踐日志》一2.4 跟進

本節書摘來自異步社群《web性能實踐日志》一書中的第2章,第2.4節,作者【加拿大】stoyan stefanov,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

這篇文章一經發表就引發了大量圍繞localstorage性能的讨論。讨論最開始出現在mozilla 的chris heilmann的部落格文章中,題為“localstorage沒有簡單的解決方案”。在文章中,chris認為localstorage作為一個整體存在性能問題。在很多博文讨論(其中也包括我的)之後,我最終能夠聯系上firefox負責實作localstorage的工程師jonas sicking。事實上,localstorage所存在的性能問題并不隻是比從對象讀取資料花費時間長一些那麼簡單。問題的關鍵是,localstorage是一個同步api,這本身就使浏覽器實作這個api時捉襟見肘。所有的localstorage資料都存儲在磁盤檔案上。這意味着,為了讓您可以用javascript通路這些資料,浏覽器必須先将該檔案讀取到記憶體中。當讀取操作發生時性能問題便産生了。當第一次通路localstorage就可能産生性能問題,但在随後的讀取操作中浏覽器有可能會當機。在處理少量資料時,這可能不是一個大問題,但如果你已經達到5 mb限制時,就會有明顯的影響。firefox采納的另一種解決方案,是在加載頁面的同時讀取localstorage資料。這将確定之後對localstorage的通路最快,并有可預測性。這種方法的缺點是對頁面加載時間造成不利影響。到我寫這篇文章之時,這一問題仍然沒有被解決。有人呼籲用一個全新的api來代替localstorage,其他的人則試圖修複現有api的問題。不管發生什麼情況,不久的将來仍會有用戶端資料存儲領域的更多研究。不管發生什麼情況,最近一段時間内,我們仍然需要在用戶端資料存儲方面做更多的研究。

繼續閱讀