Инструмент для автоматического включения вызовов функций JavaScript?

Встраивание вызовов функций JavaScript ускоряет выполнение, а также уменьшает размер кода после gzipping, как описано в этой статье:

http://blog.calyptus.eu/seb/2011/01/javascript-call-performance-just-inline-it/

Однако я не могу найти инструмент, который автоматически обрабатывает исходный файл JS и встраивает в него все (или, что лучше, выбранные) вызовы встроенных функций. Google Closure Compiler делает некоторые вставки, но не всегда, и при этом он не настраивается.

Заранее спасибо!

2 ответа

Решение

Позвольте JIT придумать что-то вроде вставки из вас. Встраивание может легко ухудшить производительность, убив производительность кеша.

Кроме того, если вы не определили фактические узкие места, такая преждевременная оптимизация вряд ли когда-нибудь стоит.

Я вряд ли верю, что эта "техника" ускоряет любое время выполнения. По крайней мере, не в реальном сценарии. Блог может быть прав насчет размера кода и Gzipping tho.

Во всяком случае, я не думаю, что какой-либо Javascript minification / компрессор сделает это много. Причина проста и очень очевидна в приведенном примере. Заменив вызов функции на фактический код функции, вы устанавливаете вещи в другом контексте. Это может оказаться очень злым. Что если родительская функция (-context) уже объявляет и использует переменную с именем foo. Если эта же переменная используется в другой функции, вы можете перезаписать ее и вызвать ошибки.

Еще хуже, если есть какое-то использование try/catch или же eval блоки, которые создают дополнительный контекст с тщательно выраженной "динамической областью действия" (которая на самом деле недоступна в ecma-script). Однако в этом сценарии JIT или любая реализация Javascript практически ничего не может оптимизировать.

Другие вопросы по тегам