2017-08-14 2 views
1

Une fonction de mon application nécessite l'accès à un élément de tableau. Je peux soit générer un index aléatoire chaque fois que cette fonction est appelée ou stocker l'index visité précédent dans localStorage et puis obtenir cette valeur et initialiser index à 1 + previous_indexEst-ce que localStorage accède à une opération lourde

Je dois persister les données d'index pour le cas lorsque l'utilisateur visite à nouveau ma demande.

Donc, maintenant je dois choisir entre un. Soit utiliser Math.random() ou utiliser localStorage.

Quelle option sera la plus rapide.

PS: même si cela aura un impact moindre sur les performances. Mais la question principale ici est sont l'accès localStorage opérations lourdes

+0

qu'en est-il des cookies? –

+1

@ shyammakwana.me - Une idée terrible. Ils ont une taille limitée et sont envoyés dans chaque requête HTTP. Les cookies doivent être évités sauf si vous devez envoyer les données au serveur à chaque requête. – Quentin

+0

Je ne suis pas très familier avec JS. Mais je pense que l'utilisation de cookies n'est pas une bonne option. Je veux dire localStorage est venu remplacer les cookies –

Répondre

2

Est-ce une opération lourde, je suis enclin à dire non ..

Est-ce que ça va être plus lent alors Math.random()? Je dirais que cela dépend de votre code .. (comme dans ce faites-vous d'autre)

J'ai fait jsperf here

var a = [] 

var key = Math.random() 
a[key] = 'test' 

vs

var a = [] 

var key = parseInt(localStorage.getItem('key')) || 0 
localStorage.setItem('key', key+1) 
a[key] = 'test' 

la Math.random() est beaucoup plus rapide mais je ne Ne gardez aucune touche .. les touches sont flottantes et dans mon exemple, vous ne pouvez pas utiliser a.length en raison des flotteurs, il retourne 0 tout le temps!

+0

la fonction ne donnera que l'index du tableau utilisé en dernier si j'utilise localStorage. Mais je n'ai pas besoin de penser à la dernière valeur utilisée si j'utilise la fonction aléatoire. –

+0

vrai, mais là encore, quel est le hasard est aléatoire et quelle est la probabilité de collisions et combien serait-il mauvais .. Si je voulais une solution similaire pour cela, j'utiliserais uuid (ou guid ou tout ce que vous voulez nommer) une clé. Il est couramment utilisé et en fonction de l'implémentation c'est plus fiable ... mais c'est peut-être un peu hors sujet :-) – VDP

1

La réponse à votre question « Existe-t-accès de stockage locaux opérations lourdes » est NO Mais par rapport à une fonction locale, il est plus lent. Vous pouvez exécuter le test indiqué ici pour le stockage local et la fonction locale, car il doit effectuer un E/S.

https://jsperf.com/localstorage2

Cependant, une autre question principale, vous trouverez peut-être « navigateur ne peut pas autoriser l'enregistrement local dans la navigation en mode privé ». Les navigateurs ne permettent pas en mode normal aussi en raison de problèmes de sécurité. Vous pouvez en savoir plus sur les problèmes de sécurité liés au stockage local.

// Enregistrer localStorage.setItem ("lastname", "Keny"); // Récupère document.getElementById ("result"). InnerHTML = localStorage.getItem ("lastname")

// Récupérer

espérons que cela aide.

+0

Je pense que les deux localStorage et les cookies sont interdits en mode privé –

+0

en mode privé voulez-vous dire incognito en chrome? –

+0

Dans votre réponse, vous n'avez également fourni aucune source ou preuve ou raison de dire NON –