2011-11-10 21 views
19

¿Qué tan rápido está buscando un valor en localStorage con Javascript?Velocidad/costo de almacenamiento local

¿Alguien tiene enlaces a las pruebas de rendimiento que indiquen si vale la pena almacenar en caché los datos en una matriz de Javascript? ¿O el navegador ya almacena en caché los valores a los que se accede desde localStorage de todos modos?

Estoy particularmente interesado en las implementaciones de Firefox y Chrome de localStorage.

+0

espero que no sería tan grande de un problema, aunque el almacenamiento en caché es probablemente una buena idea tener en cuenta. Depende de la situación. –

+2

[Un test test-case] (http://jsperf.com/) muestra qué? (Escriba uno y lo ejecutaré en varios navegadores para usted ;-) –

+0

¿Regularmente como en ...? Si recupera el valor solo de a una por vez, no debe preocuparse por el rendimiento. –

Respuesta

22

Por lo que vale, aquí hay un jsperf test.

El uso de referencia de localStorage es significativamente más lento de acceso de una propiedades de objetos regulares tanto FF7 y IE9. Por supuesto, esto es sólo un micro de referencia, y no necesariamente refleja el uso del mundo real o el rendimiento ...

Muestra sacó de mi carrera FF 7 para mostrar lo que significa "significativamente más lentos", en OPS/segundo:

 
      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 

Además, hay restrictions on what can be put in localStorage. YMMV.

Happy coding.

+1

¡Oye, espero que sea más rápido! Aún así, es de una magnitud mucho más rápida que la obtención del servidor (por lo que todavía sirve para su propósito). Además, es interesante ver que 10 veces más elementos distintos (10 a 100) hicieron 'localStorage' *** 200 veces más lento (!!) *** –

+0

@CamiloMartin Sí, estaba un poco sorprendido, de hecho :) Espero que los navegadores futuros mejoren la velocidad y las tasas de crecimiento, pero hay tantas opciones que compiten en estos días ... –

5

Acabo de hacer un pequeño punto de referencia. Lo que planeo hacer es obtener algunos datos de localStorage con bastante frecuencia y me pregunto si se bloqueará. Si bien localStorage.getItem está sincronizado, puede sonar aterrador, ¿verdad?

  • Primera prueba para llamar 1 millón de veces localAlmacenamiento para obtener el elemento que sí existe.
  • 2da prueba para llamar 1 millón de veces localAlmacenamiento para obtener el artículo que NO existe.

Resultados:

"elemento encontrado: 0.0007991071428571318ms por llamada"

"Elemento no encontrado: 0.0006365004639793477ms por llamada"

En pocas palabras - sólo lo utilizan . No lleva tiempo. 0.0007 de 1 milisegundo.

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`); 
Cuestiones relacionadas