Компрессоры JavaScript и точка с запятой
Точка с запятой — один байт, перевод строки — один байт. Мне тут подумал, что лучше бы компрессоры JS выкидывали при сжатии не переводы строки, а точки с запятой (там где это возможно, конечно, например, пустой return в некоторых случаях нельзя завершить только переводом строки).
Тогда читаемость кода почти не снижалась бы (об обфускатарах я сейчас не говорю) и можно было бы легко понять где произошла ошибка, пропущенная в production (такое случается).
cat script.js | compressor | sed -e ’s/;/\n/g’ > script_mini.js
:)
Перевод строки — два байта. =)
Комментарий для wiktar.moikrug.ru:
Не пойдёт. :) Не все переводы строки равны точке с запятой.
Комментарий для coprophagous.ru:
Палишься, виндузятник!!!
новый гугловский Closure Compiler — это то, что нужно?
http://pic.ipicture.ru/uploads/091107/gkCz26M41y.png
Оставляю точки с запятой и переводы строк. Первое для простоты отладки, второе для спокойствия. Сколько раз сталкивался с багами упаковщиков, в одном браузере работает, в другом не работает. Экономия 1.5% на 30 килобайтном файле не вдохновляет.
Ещё бы эти компрессоры корректно обрабатывали vbscript...
Комментарий для alisey.myopenid.com:
Речь идёт как раз об упаковщиках. Чтобы они оставляли переводы строк и убирали ;
Комментарий для gleb-arestov.moikrug.ru:
Это ровно противоположное поведение.
Комментарий для zverik.livejournal.com:
А зачем сейчас нужен именно VBScript?
Комментарий для alisey.myopenid.com:
Хм, странный у вас опыт использования JS-компрессоров. Ни разу ни сталкивался с багами (в yuicompressor, по-крайней мере), а экономия обычно составляет примерно 50%.
Комментарий для new-direct-ui.ya.ru:
Использовал yuicompressor. Пример, к сожалению, не сохранился. Возможно это был JSJaC или какой-то плагин jQuery. До упаковки тестировал скрипт в FF и IE, после упаковки в IE работать перестал.
Сейчас пользуюсь JSMIN, который по большей части сохраняет переводы строк. После gzip разница между компрессорами не так велика, и вряд ли для кого-то будет принципиальной.
тут не обойтись без точки с запятой
<script>
(function() { alert(1) })()
(function() { alert(2) })()
</script>
Комментарий для ti-webdev.blogspot.com:
Я знаю несколько случаев, где не обойтись, но что с того? Это не противоречит моему предложению.