location.href = url
使用するのとは対照的に、JavaScriptのメモリ消費に特別な長所/短所はありますlocation.assign(url)
か?
プロパティを設定するのではなく、メソッドにアクセスするためにより多くのメモリが必要かどうか疑問に思っていると思います。
location.href = url
使用するのとは対照的に、JavaScriptのメモリ消費に特別な長所/短所はありますlocation.assign(url)
か?
プロパティを設定するのではなく、メソッドにアクセスするためにより多くのメモリが必要かどうか疑問に思っていると思います。
個人的には、代わりに関数を呼び出す方が好きです。関数を呼び出すと、何かが実行されているという印象が良くなり、変数の値が変化しているだけではないからです。
しかし、おそらくそうです、それはJavaScriptエンジンの実装に依存するかもしれませんが、location.href = url;
より速いのは本当かもしれません。私が作成したばかりのテストを参照してください。location.assign(url)
私はこれが古いことを知っていますが、ユニットテストが正しいURLにリダイレクトされていることを確認する方法を探していたときにこれに遭遇しました。
window.location.assign()
あなたがテストにもっと関心があるなら、私は一緒に行きます。関数を使用すると、その関数をモックしてURL入力パラメーターを確認できます。
したがって、jestを使用します。
window.location.assign = jest.fn();
myUrlUpdateFunction();
expect(window.location.assign).toBeCalledWith('http://my.url');
// Clean up :)
window.location.assign.mockRestore();
私はいつも使っていて、問題はありませんでした:
location.href = url;
関数の呼び出しは、プロパティへのアクセスよりも少し遅いはずですが、メモリの観点からは、私の謙虚な意見に大きな違いはないはずです。
location.assign(url)ではなくlocation.href = urlを使用することの間で、JavaScriptのメモリ消費に特別な長所/短所はありますか?
違いはまったくありません。
この理由は単純です。ブラウザが新しいページをロードするたびに、そのVMで実行されているそのページのスクリプトを使用して新しいJavascript「VM」が起動します。質問のステートメントのいずれかを実行すると、新しいページをロードするようにブラウザに指示します。つまり、現在のVMを破棄し(それに関連するメモリを解放し)、新しいページ用に完全に新しいVMをロードします。
奇妙なブラウザのバグを除けば、正味の効果は常に同じです。スクリプトは、まったく同じメモリ消費量の新しいVMで実行されています。
ブラウザでロケーションオブジェクトを操作していて、ノードJSでこのコードを実行できるようにしたい場合(テストやアイソメトリックコードなど)、ulocation
ロケーションオブジェクトのユニバーサル/アイソメトリック実装を使用できます。完全開示:私はそのパッケージの作成者です。
私のマシン/ブラウザ、http: //jsperf.com/location-href-vs-location-assign/2を、Windows Server 2008 R2 /764ビット上のChrome40.0.2214.9332ビットでテストしました。
location.assignはlocation.hrefよりも15%遅くなりました。
上記の答えが欠けているReactでの作業中に両方を使用して経験した違いを追加したいと思います。
Reactで次のスニペットを分析します。
return (<>location.href = "www://example.com"</>)
対
return (<>location.assign("www://example.com")</>)
この場合、このリダイレクトが発生する前にテキストがレンダリングされるため、実際には文字列www://example.comがDOMに一瞬入力されるのがわかります。
それを避けるために後者を使用する必要がありますlocation.assign()
実際には違いがあると思います