Why is js() a function instead of a variable?
Shouldn't this:
function js() {
return ("00"==false);
}
be replaced with this:
$js = ("00" == false);
This way, there would be less function calls and the "00"==false expression would only be evaluated once per script run.
Two reasons offhand:
- to avoid dependency on global variables (especially in core functionality!)
- jitted/incremental interpreters (both JS & PHP) will cache the result of evaluating the function as always a fixed constant and thus from a performance perspective the result should be the same.
If you find actual performance differences/issues with the use of such a constant function, I'd be interested in seeing them.
-
Technically, in JS a "global function" is a global variable.
-
That depends on the JIT, but I've done a JSPerf test just a moment ago: http://jsperf.com/cassis-fun-vs-var
In Firefox the variable is almost three times faster than function call, in Safari and Opera - almost twenty times faster. Or am I doing the test wrong? :)
I just verified similar results with your test on my MacBook Air 11". That's quite the difference. Ok, will consider a change like this for v0.2 (working hard to wrap up last changes for v0.1). In particular I may use a slightly longer name (maybe $in_js) for the global variable to reduce likelihood of collision.
I don't think this will work as a variable, since in PHP, global variables must be declared at the beginning of the function. For example, in order for a function to be able to see the $in_js variable, it would need to look like this:
function example() {
global $in_js;
if($in_js) {
// javascript
} else {
// php
}
}
The advantage of using the js() function is that functions are available in the global scope.
Just switched to returning true or false depending on which comment-code path so that should be even faster (for any modern js jit / or PHP processors).