tantek / cassis

CASSIS is universal javascript/PHP that works on the client and the server for scalable application logic.
http://cassisjs.org/
128 stars 10 forks source link

Why is js() a function instead of a variable? #5

Open marcoos opened 13 years ago

marcoos commented 13 years ago

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.

tantek commented 13 years ago

Two reasons offhand:

  1. to avoid dependency on global variables (especially in core functionality!)
  2. 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.

marcoos commented 13 years ago

1) Technically, in JS a "global function" is a global variable.

2) 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? :)

tantek commented 13 years ago

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.

aaronpk commented 9 years ago

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.

tantek commented 8 years ago

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).