Как работает замыкающий компилятор?

Мне интересно, как работает Google Closure Compiler. Могу ли я, например, заставить его преобразовывать вызовы функций, например:

if (MyApp.isArray(...)) {
    // foobar
}

к фактической реализации:

if ((typeof sthing === 'Object' && sthing.constructor.toString().indexOf("Array") !== -1))

Я спрашиваю об этом, потому что у меня есть много оберток, которые связывают некоторые функции, и я хотел бы, чтобы компилятор Closure преобразовал их обратно в один вызов функции меньше.

На самом деле, один лишний вызов функции заметно замедляет работу приложения?


person Tower    schedule 03.01.2011    source источник


Ответы (3)


На самом деле, один лишний вызов функции заметно замедляет работу приложения?

Скорее всего, нет, но если вы действительно хотите знать, вам просто нужно попробовать два разных примера кода и посмотреть, есть ли разница. Здесь задействовано множество факторов (ваша система, ваш браузер, функция, которую вы вызываете и т. д.), поэтому лучше всего провести тест. Я бы предложил Firebug для профилирования.

person Jakob    schedule 03.01.2011

Компилятор Closure (в расширенном режиме) будет встраивать однострочные функции или функции, которые вызываются ровно один раз.

По мнению авторов компилятора, в первом случае более экономично сохранять вызов функции, а однострочные функции обычно достаточно короткие, чтобы по длине они были аналогичны вызову функции. Во втором случае он избегает вызова функции и короче, так что это явный выигрыш.

Насколько я знаю, это не встроенные функции, которые состоят из более чем одной строки или вызываются более одного раза. По-видимому, это сделано для того, чтобы избежать раздувания кода.

Я слышал, что люди говорят, что длинные однострочные функции не являются встроенными, но я всегда видел их встроенными.

person Stephen Chung    schedule 10.03.2011

Я не думаю, что компилятор Closure сделает это за вас. Основное внимание уделяется минимизации источника, и, насколько я могу судить, он будет встраивать такие вызовы функций только в том случае, если это на самом деле короче.

person Alex Vidal    schedule 03.01.2011