8 votes

Impacts et avantages de la création d'un objet vide en utilisant Object.create(null)

Tout d'abord, j'ai fait un cas de test rapide jsperf pour montrer l'évidence :
Object.create(null) est beaucoup plus lent que la création d'un objet avec la fonction {} la syntaxe.
http://jsperf.com/js-object-creation-null-proto

Mais étant donné ce fait, le premier cas peut-il être une bonne alternative parfois en ce qui concerne l'optimisation et la performance ? En d'autres termes, la manipulation de l'objet js le plus léger peut-elle améliorer suffisamment les performances pour qu'il devienne un choix raisonnable de l'utiliser dans certains cas.

Je fais référence aux cas où vous accédez souvent aux propriétés de l'objet, ou lorsque vous faites un usage intensif de la boucle for in, par exemple.

Est-ce que cette méthode est trop risquée pour être utilisée dans une bibliothèque où les gens pourraient être amenés à manipuler ces objets qui ne possèdent pas les propriétés standard apportées par le standard Object Un prototype ?

Par ailleurs, connaissez-vous un autre moyen (plus rapide) de créer l'objet js le plus léger ?

PS : J'ai réalisé un bref test pour montrer un cas où l'utilisation d'une Object.create(null) et l'accès aux propriétés est un peu plus rapide qu'avec l'option {} .
http://jsperf.com/js-object-creation-and-accessing-properties

8voto

Ethan Lynn Points 614

Je pense que créer des objets avec Object.create(null) généralement inutiles et ne valent pas la compatibilité avec les navigateurs et la clarté que vous sacrifiez. Lorsque vous créez un objet avec l'option {} syntaxe que vous faites essentiellement Object.create(Object.prototype) qui crée un objet ayant accès aux propriétés de la section Object.prototype . Cela signifie que vous avez accès à des méthodes comme toString y hasOwnProperty directement à partir de l'objet, mais vous pouvez également les remplacer si vous le souhaitez - bien que vous devriez éviter cela si possible. En ce qui concerne les performances, la différence est la suivante très petit avec seulement deux propriétés sur l'objet (comme démontré sur jsperf). Si votre objet avait des centaines ou des milliers de propriétés, la différence serait presque inexistante.

En conclusion, si vous voulez que votre code soit plus performant, vous devez toujours rechercher la clarté et essayer d'améliorer la conception algorithmique de haut niveau de votre code (même si ce n'est pas déjà fait) ; et ne vous préoccuper des micro-optimisations qu'en cas de nécessité absolue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X