Hi,
So here’s some data for you:
In string_old.js:
var s;
for (var i = 0; i < 1e8; i++) {
if (s == "") {
}
}
In string.js:
var s = "";
for (var i = 0; i < 1e8; i++) {
if (s === "") {
}
}
time node string.js
real 0m0.246s
user 0m0.114s
sys 0m0.046s
time node string_old.js
real 0m2.496s
user 0m2.452s
sys 0m0.019s
The === and setting to “" is an order of magnitude faster (in node anyway),
similar results with initialising to null rather than “”.
Running similar code (converted to AS ) through the chrome profiler gives
results where setting to null and using === is faster.
It even twice as fast if you initialise the variable and compare on every time
through the loop. So 1e8 lots = null and a === is faster than no initialisation
and a ==.
I think what is happening currently is that because we are not initialising the
variable it’s doing a implicit cast on every every comparison that is very
expensive when using != and ==, using === and !== significantly speeds this up
but then you have the issues of uninitialise strings and objects being null in
AS and undefined in JS but it still twice as fast.
BTW I do note that we are setting ints to 0. I assume because of similar
reasons? But it seems you were not concerned with the overhead of this?
Thanks,
Justin