97

location.href = url使用するのとは対照的に、JavaScriptのメモリ消費に特別な長所/短所はありますlocation.assign(url)か?

プロパティを設定するのではなく、メソッドにアクセスするためにより多くのメモリが必要かどうか疑問に思っていると思います。

4

7 に答える 7

50

個人的には、代わりに関数を呼び出す方が好きです。関数を呼び出すと、何かが実行されているという印象が良くなり、変数の値が変化しているだけではないからです。

しかし、おそらくそうです、それはJavaScriptエンジンの実装に依存するかもしれませんが、location.href = url;より速いのは本当かもしれません。私が作成したばかりのテストを参照してください。location.assign(url)

于 2013-02-03T14:09:08.690 に答える
45

私はこれが古いことを知っていますが、ユニットテストが正しい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();
于 2018-05-30T11:58:26.407 に答える
31

私はいつも使っていて、問題はありませんでした:

location.href = url;

関数の呼び出しは、プロパティへのアクセスよりも少し遅いはずですが、メモリの観点からは、私の謙虚な意見に大きな違いはないはずです。

于 2012-04-24T17:28:04.083 に答える
5

location.assign(url)ではなくlocation.href = urlを使用することの間で、JavaScriptのメモリ消費に特別な長所/短所はありますか?

いいえ

違いはまったくありません。

この理由は単純です。ブラウザが新しいページをロードするたびに、そのVMで実行されているそのページのスクリプトを使用して新しいJavascript「VM」が起動します。質問のステートメントのいずれかを実行すると、新しいページをロードするようにブラウザに指示します。つまり、現在のVMを破棄し(それに関連するメモリを解放し)、新しいページ用に完全に新しいVMをロードします。

奇妙なブラウザのバグを除けば、正味の効果は常に同じです。スクリプトは、まったく同じメモリ消費量の新しいVMで実行されています。

ulocation

ブラウザでロケーションオブジェクトを操作していて、ノードJSでこのコードを実行できるようにしたい場合(テストやアイソメトリックコードなど)、ulocationロケーションオブジェクトのユニバーサル/アイソメトリック実装を使用できます。完全開示:私はそのパッケージの作成者です。

于 2017-05-02T13:46:03.500 に答える
2

私のマシン/ブラウザ、http: //jsperf.com/location-href-vs-location-assign/2を、Windows Server 2008 R2 /764ビット上のChrome40.0.2214.9332ビットでテストしました。

location.assignはlocation.hrefよりも15%遅くなりました。

于 2015-02-03T02:18:55.497 に答える
0

上記の答えが欠けているReactでの作業中に両方を使用して経験した違いを追加したいと思います。

Reactで次のスニペットを分析します。

return (<>location.href = "www://example.com"</>)

return (<>location.assign("www://example.com")</>)

この場合、このリダイレクトが発生する前にテキストがレンダリングされるため、実際には文字列www://example.comがDOMに一瞬入力されるのがわかります。

それを避けるために後者を使用する必要がありますlocation.assign()

于 2021-04-24T09:14:22.613 に答える
0

実際には違いがあると思います

  1. location.hrefは、関数を呼び出すよりも高速であることを意味するプロパティですが、最も重要なのは、hrefプロパティにより、ユーザーがブラウザーの[戻る]ボタンをクリックしたときに戻ることができるようにすることです。
  2. location.replace()ユーザーは現在のページに戻ることができなくなります。
  3. location.assign()ユーザーはhrefのように戻るボタンに戻ることができますが、location.assignはテストとモックの点で優れています
于 2021-12-19T12:07:01.087 に答える