Maison > interface Web > js tutoriel > le corps du texte

Implémenter un stockage de données hautes performances en JavaScript

黄舟
Libérer: 2017-02-20 14:29:02
original
1226 Les gens l'ont consulté

1. Il existe quatre emplacements d'accès aux données de base en JavaScript : les littéraux, les variables locales, les éléments de tableau et les membres d'objet.

D'une manière générale : [littérale, variable locale] vitesse d'exécution>[tableau, membre de l'objet]

Les propriétés internes contiennent la valeur d'une fonction créée Une collection de. objets dans la portée. Cet ensemble est appelé chaîne de portée.

3. Exécutez la fonction -> Créer un environnement d'exécution -> Créer un objet actif (c'est-à-dire un objet variable d'exécution de fonction).

Ainsi, appeler la même fonction plusieurs fois entraînera la création de plusieurs environnements d'exécution.

4. Processus d'exécution de la fonction

Chaque fois qu'une variable est rencontrée, elle passera par un processus de résolution d'identifiant, où obtenir ou stocker des données. Ce processus recherche la chaîne de portée de l'environnement d'exécution. C'est ce processus de recherche qui affecte les performances.

5. Performance de l'analyse des identifiants

Les variables globales existent toujours à la fin de la portée de l'environnement d'exécution. Les variables locales sont résolues en premier.

Règle générale : si une valeur multi-portée est référencée plus d'une fois dans une fonction, stockez-la dans une variable locale.

Par exemple :

function initUI(){
 var bd=document.body;
 //后面有多次doucument这个全局对象的调用
}
//->优化后
function initUI(){
 var doc=document;
  bd=doc.body;
 //把doucument这个全局对象的引用存储到局部变量doc中
 
}
Copier après la connexion



6. Changer la chaîne de portée

De manière générale. , la chaîne de portée d'un environnement d'exécution ne changera pas.

<1>avec peut modifier temporairement la chaîne de portée

la largeur est utilisée pour créer une variable pour toutes les propriétés de l'objet

function initUI(){
 with(document){
 var bd=body; 
 }
}
Copier après la connexion



Lorsque le code est exécuté avec, la chaîne de portée de l'environnement d'exécution est temporairement modifiée. Un nouvel objet variable est créé, qui contient toutes les propriétés de l'objet spécifié par le paramètre. Cet objet est poussé dans la première position de la chaîne de portée, donc à ce moment, toutes les variables locales sont dans le deuxième objet de la chaîne de portée, donc le coût d'accès est plus élevé.

<2>try-catch

Lorsqu'une erreur se produit dans l'instruction try, le processus d'exécution passe automatiquement à catch. Ensuite, poussez l'objet d'exception dans un objet variable et placez-le en haut de la portée.

Remarque : Une fois la sous-instruction catch exécutée, la chaîne de portée reviendra à l'état précédent.

7. Problèmes de performances causés par les fermetures

Les fermetures sont l'une des fonctionnalités les plus puissantes de JavaScript.

Étant donné que la fermeture contient une référence au même objet qui exécute la chaîne de portée de l'environnement, l'objet actif de la fonction ne sera pas détruit, ce qui entraînera une surcharge de mémoire supplémentaire.

Points de préoccupation en matière de performances : Lorsque les identifiants multi-portées sont fréquemment consultés, chaque accès entraînera une perte de performances.

Début : 19:41:45 2015-11-21 Cité par Aaron : /content/3493261.html

8. >Une fuite de mémoire signifie qu'une partie de la mémoire allouée ne peut pas être utilisée ou recyclée jusqu'à la fin du processus du navigateur. En C, la mémoire étant gérée manuellement, les fuites de mémoire sont courantes. De nos jours, les langages populaires tels que C# et Java utilisent des méthodes automatiques de récupération de place pour gérer la mémoire, et presque aucune fuite de mémoire ne se produit dans des conditions normales d'utilisation. Les navigateurs utilisent également le garbage collection automatique pour gérer la mémoire. Cependant, en raison de bogues dans la méthode de garbage collection du navigateur, des fuites de mémoire peuvent survenir.

Plusieurs cas de fuites de mémoire

Références circulaires
Fermetures Javascript

Ordre d'insertion DOM

Si un L'objet DOM est référencé par un objet Javascript et fait en même temps référence au même objet ou à un autre objet Javascript, l'objet DOM peut provoquer une fuite de mémoire. La référence à cet objet DOM ne sera pas récupérée par le garbage collector à l'arrêt du script. Pour rompre un cycle de référence, l'objet référençant l'élément DOM ou une référence à l'objet DOM doit se voir attribuer la valeur null.


Les détails sont discutés en profondeur, voici le résumé

Fuites de mémoire JS, pas étonnant que les éléments soient supprimés du DOM, mais il y a toujours des variables ou des objets références L'objet DOM. Il ne peut alors pas être supprimé de la mémoire. Cela maintient l'utilisation de la mémoire du navigateur à un niveau élevé. Cette utilisation de la mémoire sera automatiquement libérée lors de l'actualisation du navigateur.
Une autre situation est la référence circulaire. Un objet DOM et un objet JS se réfèrent l'un à l'autre. Cela provoque une situation plus grave. Même s'ils sont rafraîchis, la mémoire ne sera pas réduite. Il s’agit d’une fuite mémoire au sens strict.



Ce qui précède est le contenu de la réalisation d'un stockage de données haute performance en JavaScript. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


-->
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal