Gibt es einen besonderen Vor- / Nachteil beim JavaScript-Speicherverbrauch zwischen der Verwendung location.href = url
im Gegensatz zu location.assign(url)
?
Ich frage mich wohl, ob der Zugriff auf die Methode mehr Speicher benötigt als das Festlegen der Eigenschaft.
javascript
Doug Weaver
quelle
quelle
location.assign
undlocation.href = ''
location.href
vslocation.assign()
wirkt sich nicht auf die Leistung aus, es sei denn, Ihre App wechselt hunderte Male pro Sekunde den Standort. und 2. wenn Ihre Anwendung ist , das zu tun, das ist das eigentliche Problem , das Sie beheben müssen .Antworten:
Ich habe immer benutzt und hatte nie Probleme mit:
Das Aufrufen einer Funktion sollte etwas langsamer sein als der Zugriff auf die Eigenschaft, aber in Bezug auf den Speicher sollte es meiner bescheidenen Meinung nach keinen großen Unterschied geben.
quelle
assign()
scheint die Verwendung je nach Kontext viel testbarer zu sein als das Zuweisenhref
(zumindest mit jsdom). Und schließlich scheint das Aufrufenassign()
etwas langsamer zu sein . Jsperf.com/location-href-vs-location-assign/14 .locaiton.assign()
weil es testbar ist. Das Zuweisenlocation.href
fühlte sich nie richtig an.Ich persönlich bevorzuge es, stattdessen die Funktion aufzurufen, da ich durch den Aufruf einer Funktion einen besseren Eindruck davon bekomme, dass etwas ausgeführt wird und dies nicht nur ein Wert einer Variablen ist, die sich ändert.
Aber wahrscheinlich ja, es kann wahr sein, dass
location.href = url;
es schneller ist alslocation.assign(url)
, obwohl es von der Implementierung der JavaScript-Engine abhängt, siehe den Test, den ich gerade erstellt habe .quelle
Ich weiß, dass dies alt ist, aber ich bin darauf gestoßen, als ich nach einer Möglichkeit gesucht habe, zu überprüfen, ob meine Unit-Tests zur richtigen URL umgeleitet wurden.
Ich würde mitgehen,
window.location.assign()
wenn Sie mehr mit dem Testen beschäftigt sind. Mit einer Funktion können Sie diese Funktion verspotten und die URL-Eingabeparameter überprüfen.Also, mit Scherz:
window.location.assign = jest.fn(); myUrlUpdateFunction(); expect(window.location.assign).toBeCalledWith('http://my.url'); // Clean up :) window.location.assign.mockRestore();
quelle
mockRestore()
Aufruf hier die ursprüngliche native Funktion nicht wiederherstellt. Um es richtig zu machen, müssten Sie diejest.spyOn()
Funktion - jestjs.io/docs/en/jest-object#jestspyonobject-methodnameNEIN
Es gibt genau null Differenz.
Der Grund dafür ist einfach. Jedes Mal, wenn Ihr Browser eine neue Seite lädt, startet er eine neue Javascript-VM mit den Skripten für diese Seite, die in dieser VM ausgeführt werden. Wenn Sie eine der Anweisungen in Ihrer Frage ausführen, weisen Sie den Browser an, eine neue Seite zu laden. Dies bedeutet, dass die aktuelle VM zerstört wird (und der damit verbundene Speicher freigegeben wird) und eine vollständig neue VM für die neue Seite geladen wird.
Außer bei seltsamen Browserfehlern ist der Nettoeffekt immer der gleiche. Ihre Skripte werden in einer brandneuen VM mit genau demselben Speicherverbrauch ausgeführt.
Ulokation
Wenn Sie mit dem Standortobjekt im Browser arbeiten und diesen Code auf Node JS ausführen möchten (z. B. zum Testen oder für isometrischen Code), können Sie
ulocation
eine universelle / isometrische Implementierung des Standortobjekts verwenden. Vollständige Offenlegung: Ich bin der Autor dieses Pakets.quelle
location.assign("#foo")
?Testete meinen Computer / Browser http://jsperf.com/location-href-vs-location-assign/2 auf Chrome 40.0.2214.93 32-Bit unter Windows Server 2008 R2 / 7 64-Bit
location.assign war 15% langsamer als location.href.
quelle