Is there any particular advantage/disadvantage in JavaScript memory consumption between using location.href = url
as opposed to location.assign(url)
I know this is old, but I stumbled on this when I was looking for a way to check my unit tests were redirecting to the correct url.
I would go with window.location.assign()
if you are more concerned with testing. Using a function allows you to mock said function and check the url input parameters.
So, using jest:
window.location.assign = jest.fn();
myUrlUpdateFunction();
expect(window.location.assign).toBeCalledWith('http://my.url');
// Clean up :)
window.location.assign.mockRestore();
I personally prefer calling the function instead, because calling a function gives me a better impression that something is running and that is not only a value of a variable that is changing.
But probably yes, it may be true that location.href = url;
is faster than location.assign(url)
, although it may depend on the JavaScript engine implementation, see the test I've just created.
Is there any particular advantage/disadvantage in JavaScript memory consumption between using location.href = url as opposed to location.assign(url)?
There is exactly zero difference.
The reason for this is simple. Every time your browser loads a new page, it starts a fresh new Javascript 'VM' with the scripts for that page running in that VM. When running either of the statements in your question, you are instructing the browser to load a new page, which means destroying the current VM (and freeing up any memory associated with it) and loading a completely new VM for the new page.
Save for any weird browser bugs the net effect is always the same. Your scripts are running in a brand new VM with the exact same memory consumption.
If you are working with the location object in the browser and you want to be able to run this code on Node JS (e.g. for testing or for isometric code), you can use ulocation
, a universal/isometric implementation of the Location object. Full Disclosure: I am the author of that package.
Tested my machine/browser, http://jsperf.com/location-href-vs-location-assign/2, for Chrome 40.0.2214.93 32-bit on Windows Server 2008 R2 / 7 64-bit
location.assign was 15% slower than location.href.
I always used and never had problems with:
location.href = url;
Calling a function should be slightly slower than accessing the property, but in terms of memory there should not be a big difference in my humble opinion.