Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Компрессоры JavaScript и точка с запятой

Точка с запятой — один байт, перевод строки — один байт. Мне тут подумал, что лучше бы компрессоры JS выкидывали при сжатии не переводы строки, а точки с запятой (там где это возможно, конечно, например, пустой return в некоторых случаях нельзя завершить только переводом строки).

Тогда читаемость кода почти не снижалась бы (об обфускатарах я сейчас не говорю) и можно было бы легко понять где произошла ошибка, пропущенная в production (такое случается).

14 комментариев
Виктор Гринчик (wiktar.moikrug.ru) 2009

cat script.js | compressor | sed -e ’s/;/\n/g’ > script_mini.js

:)

coprophagous.ru 2009

Перевод строки — два байта. =)

Евгений Степанищев (bolknote.ru) 2009

Комментарий для wiktar.moikrug.ru:

Не пойдёт. :) Не все переводы строки равны точке с запятой.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для coprophagous.ru:

Палишься, виндузятник!!!

Глеб Арестов (gleb-arestov.moikrug.ru) 2009

новый гугловский Closure Compiler — это то, что нужно?
http://pic.ipicture.ru/uploads/091107/gkCz26M41y.png

Alisey (alisey.myopenid.com) 2009

Оставляю точки с запятой и переводы строк. Первое для простоты отладки, второе для спокойствия. Сколько раз сталкивался с багами упаковщиков, в одном браузере работает, в другом не работает. Экономия 1.5% на 30 килобайтном файле не вдохновляет.

zverik.livejournal.com 2009

Ещё бы эти компрессоры корректно обрабатывали vbscript...

Евгений Степанищев (bolknote.ru) 2009

Комментарий для alisey.myopenid.com:

Речь идёт как раз об упаковщиках. Чтобы они оставляли переводы строк и убирали ;

Евгений Степанищев (bolknote.ru) 2009

Комментарий для gleb-arestov.moikrug.ru:

Это ровно противоположное поведение.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для zverik.livejournal.com:

А зачем сейчас нужен именно VBScript?

new-direct-ui (new-direct-ui.ya.ru) 2009

Комментарий для alisey.myopenid.com:

Хм, странный у вас опыт использования JS-компрессоров. Ни разу ни сталкивался с багами (в yuicompressor, по-крайней мере), а экономия обычно составляет примерно 50%.

Alisey (alisey.myopenid.com) 2009

Комментарий для new-direct-ui.ya.ru:

Использовал yuicompressor. Пример, к сожалению, не сохранился. Возможно это был JSJaC или какой-то плагин jQuery. До упаковки тестировал скрипт в FF и IE, после упаковки в IE работать перестал.

Сейчас пользуюсь JSMIN, который по большей части сохраняет переводы строк. После gzip разница между компрессорами не так велика, и вряд ли для кого-то будет принципиальной.

Ti (ti-webdev.blogspot.com) 2009

тут не обойтись без точки с запятой

<script>
(function() { alert(1) })()

(function() { alert(2) })()
</script>

Евгений Степанищев (bolknote.ru) 2009

Комментарий для ti-webdev.blogspot.com:

Я знаю несколько случаев, где не обойтись, но что с того? Это не противоречит моему предложению.