Вряд ли всегда производится какие то оптимизации.
V8 работает так
Сначала, при считывании js файла строится AST (абстрактное синтаксическое дерево) - на этом этапе никакой оптимизации нет.
Компиляция в байт-код происходит при первом исполнении кода. Для функций это означает - при первом вызове функции. Т.е это происходит уже во время исполнения. И тратить какое то время на оптимизацию никто не будет.
Оптимизируются только "горячие функции". Они компилируются в ассемблерный код. Там возможна серьезная оптимизация. Что бы функция стала достойна оптимизации она должна быть вызвана большое количество раз (несколько тысяч) и у нее должна быть хорошая статистика (одно из правил - вызовы должны быть всегда с одним и тем же типом аргументов).
Про FF точно не знаю, но вроде там есть промежуточный этап - сначала после большого числа вызовов строится оптимизированный байт-код, а потом если функция продолжает часто вызываться уже ассемблерный код.
|