104 votes

propriété location.href vs. méthode location.assign()

Y a-t-il un avantage/inconvénient particulier en matière de consommation de mémoire JavaScript entre l'utilisation de l'option location.href = url à l'opposé de location.assign(url) ?

Je me demande s'il faut plus de mémoire pour accéder à la méthode que pour définir la propriété.

51voto

Pere Points 350

Personnellement, je préfère appeler la fonction à la place, car l'appel d'une fonction me donne une meilleure impression que quelque chose est en cours d'exécution et que ce n'est pas seulement la valeur d'une variable qui change.

Mais probablement oui, il peut être vrai que location.href = url; est plus rapide que location.assign(url) Bien que cela puisse dépendre de l'implémentation du moteur JavaScript, d'après mes tests. [Lien mort vers les tests supprimé].

50voto

kieranroneill Points 769

Je sais que c'est vieux, mais je suis tombé dessus quand je cherchais un moyen de vérifier que mes tests unitaires redirigeaient vers la bonne url.

Je choisirais window.location.assign() si vous êtes plus concerné par les tests. L'utilisation d'une fonction vous permet de simuler cette fonction et de vérifier les paramètres d'entrée de l'url.

Donc, en utilisant la plaisanterie :

window.location.assign = jest.fn();

myUrlUpdateFunction();

expect(window.location.assign).toBeCalledWith('http://my.url');

// Clean up :)
window.location.assign.mockRestore();

31voto

Tobias Krogh Points 1805

Je l'ai toujours utilisé et n'ai jamais eu de problèmes avec :

location.href = url;

L'appel d'une fonction devrait être légèrement plus lent que l'accès à la propriété, mais en termes de mémoire, il ne devrait pas y avoir une grande différence à mon humble avis.

5voto

Stijn de Witt Points 3515

Y a-t-il un avantage ou un inconvénient particulier, en termes de consommation de mémoire JavaScript, à utiliser location.href = url plutôt que location.assign(url) ?

NON

Il y a exactement zéro différence.

La raison en est simple. Chaque fois que votre navigateur charge une nouvelle page, il démarre une nouvelle 'VM' Javascript avec les scripts pour cette page s'exécutant dans cette VM. En exécutant l'une ou l'autre des instructions de votre question, vous demandez au navigateur de charger une nouvelle page, ce qui signifie détruire la VM actuelle (et libérer toute mémoire qui lui est associée) et charger une VM complètement nouvelle pour la nouvelle page.

Si l'on excepte les bogues bizarres des navigateurs, l'effet net est toujours le même. Vos scripts sont exécutés dans une toute nouvelle VM avec exactement la même consommation de mémoire.

ulocation

Si vous travaillez avec l'objet de localisation dans le navigateur et que vous voulez pouvoir exécuter ce code sur Node JS (par exemple pour des tests ou pour du code isométrique), vous pouvez utiliser ulocation une implémentation universelle/isométrique de l'objet Location. Divulgation complète : je suis l'auteur de ce paquet.

2voto

Musoderelict Points 63

J'ai testé ma machine et mon navigateur, http://jsperf.com/location-href-vs-location-assign/2 pour Chrome 40.0.2214.93 32-bit sur Windows Server 2008 R2 / 7 64-bit

location.assign était 15% plus lent que location.href.

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