使用location.href = url
而不是location.assign(url)
之间的JavaScript内存消耗是否有任何特定优势/劣势?
我想我想知道是否需要更多内存来访问该方法而不是设置属性。
答案 0 :(得分:29)
我个人更喜欢调用函数,因为调用函数可以让我更好地了解某些内容正在运行,这不仅仅是变量值的变化。
但可能是的,location.href = url;
可能比location.assign(url)
更快,尽管它可能取决于JavaScript引擎实现,请参阅the test I've just created。
答案 1 :(得分:26)
我一直使用并且从未遇到过问题:
location.href = url;
调用函数应该比访问属性稍慢,但就内存而言,我的拙见应该没有太大的区别。
答案 2 :(得分:10)
我知道这已经过时了,但当我正在寻找一种方法来检查我的单元测试是否重定向到正确的网址时,我偶然发现了这一点。
如果您更关心测试,我会选择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();
答案 3 :(得分:5)
使用location.href = url而不是location.assign(url)之间的JavaScript内存消耗是否有任何特定的优势/劣势?
完全没有区别。
原因很简单。每次您的浏览器加载新页面时,它都会启动一个全新的Javascript' VM'在该VM中运行该页面的脚本。在运行问题中的任何一个语句时,您指示浏览器加载新页面,这意味着销毁当前VM(并释放与其关联的任何内存)并为新页面加载一个全新的VM。
除了任何奇怪的浏览器错误外,净效果始终相同。您的脚本在具有完全相同内存消耗的全新VM中运行。
如果您正在浏览器中使用位置对象,并且希望能够在Node JS上运行此代码(例如,用于测试或等距代码),则可以使用ulocation
,通用/等距Location对象的实现。 完全披露:我是该套餐的作者。
答案 4 :(得分:3)
在Windows Server 2008 R2 / 7 64位上为Chrome 40.0.2214.93 32位测试我的计算机/浏览器http://jsperf.com/location-href-vs-location-assign/2
location.assign比location.href慢15%。
答案 5 :(得分:0)
我想补充一下我在 React 中使用两者时遇到的不同之处,但上述答案缺失。
在 React 中分析以下代码片段:
return (<>location.href = "www://example.com"</>)
对比
return (<>location.assign("www://example.com")</>)
在前一种情况下,您实际上会看到字符串 www://example.com 在 DOM 上输入了一瞬间,因为它会在此重定向发生之前呈现文本。
为了避免这种情况,我们需要使用后者location.assign()