2011-11-10 57 views
19

使用Javascript在localStorage中查找值的速度有多快?本地存儲的速度/成本

有沒有人有任何性能測試的鏈接,指出是否值得在JavaScript數組中緩存數據?或者,瀏覽器是否已經緩存了從localStorage訪問的值?

我特別感興趣的是localStorage的Firefox和Chrome實現。

+0

我希望它不會是大問題,雖然緩存可能是一個好主意,不管。取決於情況。 –

+2

[性能測試用例](http://jsperf.com/)顯示什麼? (寫一個,我會在幾個瀏覽器上爲你運行它;-) – 2011-11-10 02:13:04

+0

定期在......?如果您一次只檢索一次該值,則不必擔心性能。 –

回答

22

這是值得的,這是一個jsperf test

localStorage基準使用是比兩者FF7和IE9一個定期對象屬性的訪問顯著較慢。當然,這只是一個微基準,並且不一定反映真實世界的用法或性能 ...

從我的FF 7運行中拉出的樣本顯示「明顯較慢」意味着,在運算/第二個:

 
      native  local-storage notes 
small set 374,397 13,657   10 distinct items 
large set 2,256  68    100 distinct items 
read-bias 10,266  342    1 write, 10 reads, 10 distinct items 

另外,還有restrictions on what can be put in localStorage。因人而異。

快樂編碼。

+1

嘿,我希望它會更快!儘管如此,從服務器獲取數據的速度要快幾個數量級(所以它仍然可以很好地實現其目的)。此外,有趣的是看到10倍以上的不同項目(10到100)使localStorage ***變慢了200倍(!!)*** –

+0

@CamiloMartin是的,我有點驚訝自己,實際上:)希望未來的瀏覽器將提高速度和增長速度,但有這麼多競爭選擇這些天... – 2012-02-24 23:18:51

5

只是做了一個小基準。我打算做的是經常從localStorage獲取一些數據,我想知道它會阻止。雖然localStorage.getItem是同步操作,但它聽起來可能會令人感到恐懼,但它是什麼?

  • 第一次測試調用100萬次loc​​alStorage來獲取確實存在的項目。
  • 第二次測試調用100萬次loc​​alStorage來獲取不存在的項目。

結果:

「項目發現:0.0007991071428571318ms每次通話」

「項目未找到:每次通話0.0006365004639793477ms」

總之 - 只是用它。它沒有時間。 0.0007毫秒。

https://jsbin.com/resuziqefa/edit?js,console

let results = []; 
let sum = 0; 
localStorage.setItem('foo', 'foo bar baz foo bar baz foo bar baz foo'); 

for (let i = 0; i < 1000000; i++) { 
    let a = performance.now(); 
    localStorage.getItem('foo'); 
    let result = performance.now() - a; 
    sum += result; 
    results.push(result); 
} 

console.log(`Item found: ${sum/results.length}ms per call`); 

results = []; 
sum = 0; 
for (let i = 0; i < 1000000; i++) { 
    let a = performance.now(); 
    localStorage.getItem('bar'); 
    let result = performance.now() - a; 
    sum += result; 
    results.push(result); 
} 

console.log(`Item not found: ${sum/results.length}ms per call`);