Javascript.RU

Google Closure Compiler в деталях

Update: Более новый материал по этой теме находится по адресу https://learn.javascript.ru/multi-insert.

Этот раздел посвящен Google Closure Compiler.

Чтобы его написать, мне пришлось буквально разобрать компилятор по косточкам, благо все сырцы в наличии есть. И, как оказалось, оно того стоило.

Инструмент мощный, сложный (поначалу), парой слов тут не отделаешься. Надеюсь, что после прочтения данного раздела он станет для вас простым.


Автор: Гость (не зарегистрирован), дата: 30 ноября, 2009 - 19:55
#permalink

1. можно ли как-то заставить гугл компилятор(или только переписав изрядно JAVA сорцы) при компиляции запретить некоторые функции javascript на свое усмотрение (или даже методы объектов), например запретить использование eval или document.getElementByID

2. можно ли задать ему шаблон, который нужно использовать в момент минификации. Например, попросить префиксировать все функции/объекты словом "development_"
чтобы поддерживались альтернитивные синтаксисы функций function myFunction -> function development_myFunction и myFunction: function() -> development_myFunction: function()

спасибо


Автор: Илья Кантор, дата: 30 ноября, 2009 - 23:02
#permalink

1. Да, можно, причем никаких патчей для этого не нужно. Свой проход компилятора.
Причем, этот проход можно добавить в качестве опции (там есть такая, свои проходы) в MyCompilerRunner, т.к. он независим.

2. Шаблон - нет, операции идут над деревом кода. А вот создать аналогичные функции с development_ - конечно, можно. Похожие действия выполняются в проходе, обрабатывающем exportSymbol.


Автор: Riim, дата: 11 декабря, 2009 - 14:40
#permalink

Никак не могу найти, как отключить перенос строк или указать побольше (в YUICompressor-е для этого есть флаг --line-break). Подскажите, если кто знает.


Автор: Илья Кантор, дата: 12 декабря, 2009 - 12:55
#permalink

Написан же флаг, во введении --formatting PRETTY_PRINT


Автор: Riim, дата: 12 декабря, 2009 - 17:32
#permalink

При этом флаге он вообще все переносит, а нужно наоборот, что бы все в одну линию было.


Автор: Илья Кантор, дата: 12 декабря, 2009 - 20:24
#permalink

В одну линию - по умолчанию ведь ?


Автор: Гость (не зарегистрирован), дата: 7 мая, 2010 - 13:31
#permalink

По умолчанию бьётся на строки где-то по 550 символов длиной


Автор: cooli0, дата: 29 января, 2010 - 06:57
#permalink

Илья, низкий Вам поклон за проделанную работу. Всё очень доступно и интересно написано. Прочел все статьи.


Автор: АлександрМ (не зарегистрирован), дата: 26 января, 2011 - 13:22
#permalink

Однако поблагодарить вас за этот труд я считаю нужным!
Искренне благодарен. Спасибо.


Автор: Leadaxe (не зарегистрирован), дата: 14 февраля, 2011 - 01:50
#permalink

в личный список избранных руководств! низкий поклон за проделаную работу


Автор: FiMko, дата: 26 июля, 2011 - 22:14
#permalink

Проделанная работа вызывает изумление и восторг!
Илья, огромное вам человеческое спасибо!


Автор: Online-casinoz.ru, дата: 4 марта, 2012 - 15:51
#permalink

интересная статья ! +


Автор: Гость (не зарегистрирован), дата: 22 ноября, 2012 - 03:11
#permalink

Здравствуйте. Вопрос такой: можно ли как то декомпилировать этот код? То есть хотя бы короткие пременные вернуть в прежний вид, или хотя бы как то теоритически объясните как возможно привести закомпиленный код в читабельный вид.


Автор: Гость (не зарегистрирован), дата: 22 ноября, 2012 - 03:11
#permalink

Здравствуйте. Вопрос такой: можно ли как то декомпилировать этот код? То есть хотя бы короткие пременные вернуть в прежний вид, или хотя бы как то теоритически объясните как возможно привести закомпиленный код в читабельный вид.


Автор: Гость (не зарегистрирован), дата: 22 ноября, 2012 - 03:11
#permalink

Здравствуйте. Вопрос такой: можно ли как то декомпилировать этот код? То есть хотя бы короткие пременные вернуть в прежний вид, или хотя бы как то теоритически объясните как возможно привести закомпиленный код в читабельный вид.


Автор: Гость (не зарегистрирован), дата: 1 февраля, 2013 - 21:35
#permalink

[html]
[js]
[php]
[/php][/js][/html]


Автор: Denisko-Redisko, дата: 14 февраля, 2013 - 22:17
#permalink

На следующем примере, за счет инлайнинга констант closure compiler увеличивает размер исходника почти в три раза (вообще, на сколько угодно, зависит от длины строк bigString1 и bigString2):

var bigString1 = ".....";
var bigString2 = ".....";
return {
  all: bigString1 + " " + bigString2,
  bs1: bigString1,
  bs2: bigString2,
  bs1LC: bigString1.toLowerCase(),
  bs2LC: bigString2.toLowerCase(),
}

Автор: Гость (не зарегистрирован), дата: 28 мая, 2013 - 11:11
#permalink

Он умеет сжимать CSS? И что вообще есть для сжатия CSS? Что лучше сжимает?


Автор: Гость (не зарегистрирован), дата: 6 июня, 2013 - 21:49
#permalink

Даже с ADVANCED_OPTIMIZATIONS сэкономил всего 7%. Т.е. смысла использовать нету.
Если изначально код нормально написан то там нечего сжимать.

Правда packer сжал почти на 50%. Но там закодирование стоит, без него только на 65%, но все равно на много лучше гугла.

Странно очень.


Автор: Гость (не зарегистрирован), дата: 13 августа, 2013 - 18:50
#permalink

Без всяких флагов сжал из 352905 байт в 123744. А нормально написанный код как раз имеет не малый размер за счет комментариев кода.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
6 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum