97

JavaScript 内存消耗在使用和使用之间有什么特别的优势/劣势location.href = urllocation.assign(url)

我想我想知道访问该方法是否需要更多内存而不是设置属性。

4

7 回答 7

50

我个人更喜欢调用函数,因为调用函数给我一个更好的印象,那就是某些东西正在运行,而不仅仅是变量的值在变化。

但可能是的,它可能确实location.href = url;比 快location.assign(url),尽管它可能取决于 JavaScript 引擎实现,请参阅我刚刚创建的测试

于 2013-02-03T14:09:08.690 回答
45

我知道这很旧,但是当我在寻找一种方法来检查我的单元测试是否重定向到正确的 url 时,我偶然发现了这一点。

window.location.assign()如果您更关心测试,我会选择。使用函数可以模拟所述函数并检查 url 输入参数。

因此,使用玩笑:

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.href = url 与 location.assign(url) 相比,JavaScript 内存消耗有什么特别的优势/劣势吗?

完全是零差异。

这样做的原因是简单的。每次您的浏览器加载一个新页面时,它都会启动一个全新的 Javascript “VM”,该页面的脚本在该 VM 中运行。运行问题中的任何一个语句时,您都在指示浏览器加载新页面,这意味着销毁当前 VM(并释放与其关联的任何内存)并为新页面加载全新的 VM。

除了任何奇怪的浏览器错误之外,最终效果总是相同的。您的脚本在内存消耗完全相同的全新 VM 中运行。

外置

如果您在浏览器中使用位置对象,并且希望能够在 Node JS 上运行此代码(例如,用于测试或等距代码),您可以使用ulocationLocation 对象的通用/等距实现。完全披露:我是那个包的作者。

于 2017-05-02T13:46:03.500 回答
2

在 Windows Server 2008 R2 / 7 64 位上测试了我的机器/浏览器http://jsperf.com/location-href-vs-location-assign/2的 Chrome 40.0.2214.93 32 位

location.assign 比 location.href 慢 15%。

于 2015-02-03T02:18:55.497 回答
0

我想补充一下我在使用 React 时使用这两种方法时所经历的不同之处,而上述答案都缺失了。

分析 React 中的以下代码段:

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

VS

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 回答