JavaScript 内存消耗在使用和使用之间有什么特别的优势/劣势location.href = url
吗location.assign(url)
?
我想我想知道访问该方法是否需要更多内存而不是设置属性。
JavaScript 内存消耗在使用和使用之间有什么特别的优势/劣势location.href = url
吗location.assign(url)
?
我想我想知道访问该方法是否需要更多内存而不是设置属性。
我个人更喜欢调用函数,因为调用函数给我一个更好的印象,那就是某些东西正在运行,而不仅仅是变量的值在变化。
但可能是的,它可能确实location.href = url;
比 快location.assign(url)
,尽管它可能取决于 JavaScript 引擎实现,请参阅我刚刚创建的测试。
我知道这很旧,但是当我在寻找一种方法来检查我的单元测试是否重定向到正确的 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();
我一直使用并且从未遇到过以下问题:
location.href = url;
调用函数应该比访问属性稍微慢一些,但就内存而言,我的拙见应该没有太大差异。
使用 location.href = url 与 location.assign(url) 相比,JavaScript 内存消耗有什么特别的优势/劣势吗?
完全是零差异。
这样做的原因是简单的。每次您的浏览器加载一个新页面时,它都会启动一个全新的 Javascript “VM”,该页面的脚本在该 VM 中运行。运行问题中的任何一个语句时,您都在指示浏览器加载新页面,这意味着销毁当前 VM(并释放与其关联的任何内存)并为新页面加载全新的 VM。
除了任何奇怪的浏览器错误之外,最终效果总是相同的。您的脚本在内存消耗完全相同的全新 VM 中运行。
如果您在浏览器中使用位置对象,并且希望能够在 Node JS 上运行此代码(例如,用于测试或等距代码),您可以使用ulocation
Location 对象的通用/等距实现。完全披露:我是那个包的作者。
在 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%。
我想补充一下我在使用 React 时使用这两种方法时所经历的不同之处,而上述答案都缺失了。
分析 React 中的以下代码段:
return (<>location.href = "www://example.com"</>)
VS
return (<>location.assign("www://example.com")</>)
在前一种情况下,您实际上会看到字符串www://example.com在 DOM 上输入了一瞬间,因为它会在重定向发生之前呈现文本。
为了避免这种情况我们需要使用后者location.assign()
实际上我认为有区别