Задача
Некоторые Javascript-файлы имеют излишне большой размер. Они содержат много комментариев и других символов, которые совсем не нужны для правильной работы скрипта. Нужно удалить все лишнее из js-файлов.
Решение
Минимизация скрипта — это удаление из кода всех несущественных символов с целью уменьшения объема файла скрипта и ускорения его загрузки. В минимизированном коде удаляются все комментарии и незначащие пробелы, переносы строк, символы табуляции. В случае с Javascript, это уменьшает время загрузки страницы, т.к. размер файла уменьшается. Две самых популярных утилиты для минимизации javascript — JSMin и YUI Compressor.
Обфускация является альтернативным способом сокращения исходного кода. Также, как минимизация, она удаляет пробельные символы и вырезает комментарии, но в дополнение она измененяет сам код. К примеру, во время обфускации имена функций и переменных заменяются на более короткие, что делает код более компактным, но менее читабельным. Обычно этот прием используется для усложнения реверс-инжиниринга программы. Но обфускация помогает также уменьшить код настолько, насколько это не получится сделать одной минимизацией. С выбором средства для обфускации javascript не все так ясно, но я думаю, что самая распространенная утилита для этого — Dojo Compressor (ShrinkSafe).
Минимизация javascript — безопасный и довольно простой процесс. С другой стороны, обфускация из-за своей сложности может вносить в код баги. Обфускация также требует правки вашего кода для выделения в нем API-функций и других элементов. которые не должны быть изменены. Это также делает более сложной отладку в продакшне. Я никогда не видел, чтобы минимизация кода создавала в нем баги, но вот при обфускации такое случалось. Среди первой десятки американский сайтов при минимизации в среднем достигалось 21% сжатие, тогда как при обфускации — 25%. И хотя обфускация позволяет добиться большего сжатия, я все же рекомендую применять минимизацию кода, так как она не добавит в ваш код ошибок и полученный скрипт проще будет отлаживать.
Варианты решений
- JSMin (http://javascript.crockford.com/jsmin.html)
- Dojo ShrinkSafe (http://dojotoolkit.org/docs/shrinksafe)
- Online ShrinkSafe (http://shrinksafe.dojotoolkit.org/)
- YUI Compressor (http://developer.yahoo.com/yui/compressor/)
- Packer (http://dean.edwards.name/download/#packer)
- Online Packer (http://dean.edwards.name/packer/)
JSMin
JSMin — это маленькая консольная утилита (33 Кб), которая получает на вход код JavaScript, а на выходе выдаёт код JavaScript с удаленными комментариями и переносами строк.
Код остаётся работоспособен и не принимает вид одной строки — я так думаю, потому, что в JavaScript концом оператора может считаться как точка с запятой, так и конец строки, а в последнем случае слепить две строки означает нарушить работоспособность программы.
В среднем файл сжимается на 40-50%.
Доступные кодировки: ASCII и UTF-8.
Использование JSMin
Внимательный читатель, думаю, заметил, что “получает на вход код JavaScript” — сие означает, что надо передать параметром не имя файла, а его текст.
Такой командой мы передаём этому скрипту текст входного файла, и указываем, куда сложить вывод:
jsmin.exe < in.js > out.js
Можно “жать” все файлы с Си-подобным синтаксисом: не только JavaScript и Си, но и РНР, и даже CSS.
Dojo ShrinkSafe
К сожалению, подавляющее большинство этих скриптов либо не слишком эффективны, либо в определенных случаях разрушают код (а иногда — и то и другое вместе). Без подробного грамматического разбора упаковщику трудно отличить комментарий от похожей конструкции, размещенной в закавыченной строке. Кроме того, с помощью регулярных выражений не так-то просто оценить, какая из переменных имеет ограниченный контекст, так что некоторые техники сокращения имен переменных могут разрушить сам код.
Этих проблем можно избежать, сжимая код с помощью Dojo Compressor (alex.dojotoolkit.org/shrinksafe), использующий Rhino (мозилловский JavaScript-движок, написанный на Java) для построения дерева, которое оптимизируется перед работой с файлами. С работой Dojo Compressor справляется неплохо, ресурсов отнимает немного. Расширив наш процесс сборки билда с помощью этого инструмента, мы можем забыть об экономии, писать пространные комментарии, вставлять сколько угодно пробелов и т. д. На рабочем коде это нисколько не отразится.
- Страница проекта Dojo ShrinkSafe
- Скачать Dojo ShrinkSafe
- Есть поддержка Юникода
- Требуется java для работы
Пример сжатия
Исходный код:
function MyClass(){
this.foo = function(argument1, argument2){
var addedArgs = parseInt(argument1)+parseInt(argument2);
return addedArgs;
}
var anonymousInnerFunction = function(){
// do stuff here!
}
}
function MyFunc(){
// this is a top-level function
}
// we’ve got multiple lines of whitespace here
Команда сжатия:
java -jar custom_rhino.jar -c infile.js > outfile.js 2>&1
Минимизированная версия кода:
function MyClass(){
this.foo=function(_1,_2){
var _3=parseInt(_1)+parseInt(_2);
return _3;
};
var _4=function(){
};
}
function MyFunc(){
}
Исходный код занимал 321 байт, а минимизированный — 140 байт. Уменьшение — 56%.
Online ShrinkSafe
Онлайн обфускация: http://shrinksafe.dojotoolkit.org/
Отличие от Online Packer в том, что JS-файл загружается на сервер, а не вставляется в форму и обрабатывается средствами JavaScript.
Про YUI Compressor, Packer и Online Packer можно узнать в полной версии статьи Минимизация и обфускация Javascript.
Вывод
Быстрое решение
Если вам нужно сжать 1-2 файла, то самым быстрым и простым вариантом будет использовать онлайн-утилиты. Лучшая из которых — Online ShrinkSafe.
Использование Java и командной строки
2 скрипта написаны на Java: YUI Compressor и Dojo ShrinkSafe. Оба решения являются достойными. Dojo ShrinkSafe выделяет то, что используется Rhino (мозилловский JavaScript-движок, написанный на Java) для построения дерева, которое оптимизируется перед работой с файлами.
Использование с собственном скрипте
Если нужно использовать упаковку с своем коде, то можно использовать JSMin и Packer, которые реализованы на нескольких языках программирования.
Реализации JSMin:
- скопилированный MS-DOS.exe файл
- исходный код на C (можете сами компилировать)
- исходный код на C#
- исходный код на Java
- исходный код на JavaScript
- исходный код на Perl
- исходный код на PHP
- исходный код на Python
- исходный код на OCAML
- исходный код на Ruby
Продолжение статьи Минимизация и обфускация Javascript на Drupal CookBook.ru
I have one problem regarding the data insertion in PHP.
In my site there is a message system.
So when my inbox loads it gives one JavaScript alert.
I have searched a lot in my site and finally I found that someone have send me a message with the text below.
<script>
alert(5)
</script>
So how can I restrict the script code being inserted in my database?
I am running on PHP.
asked Jan 4, 2010 at 13:52
There is no problem with JavaScript code being stored in the database. The actual problem is with non-HTML content being taken from the database and displayed to the user as if it were HTML. The correct approach would be to make sure your rendering code treats text as text, not as HTML.
In PHP, this would be done by calling htmlspecialchars
on the inbox contents when displaying the inbox (possibly along with nl2br
and maybe turning links to <a>
tags).
Avoid using striptags
for text content: as an user, I might want to type a message like:
... and to create a link, use <a href="your-url-here">your-text-here</a> ...
striptags
would eliminate the tag, htmlspecialchars
would make the text appear as it was typed.
answered Jan 4, 2010 at 13:56
Victor NicolletVictor Nicollet
24.1k4 gold badges57 silver badges89 bronze badges
1
You should not restrict it to be inserted into the database (if StackOverflow would restrict it, we would not be able to post code examples here!)
You should better control how you display it. For instance, add htmlentities()
or htmlspecialchars()
to your echo
call.
answered Jan 4, 2010 at 13:55
naivistsnaivists
32.2k5 gold badges60 silver badges84 bronze badges
answered Jan 4, 2010 at 13:55
QuentinQuentin
893k122 gold badges1194 silver badges1316 bronze badges
1
You should use strip_tags
. If you still want to allow some HTML, then add a whitelist in the second parameter.
I should add a really big caveat here. If you’re leaving any tags in a strip_tags whitelist, you can still be susceptible to javascript injection. Assume you’re allowing the seemingly innocuous tags <strong>
and <em>
:
Strip tags will still allow all attributes, including event handlers
like <strong onmouseover="window.href=http://mydodgysite.com">this</strong>.
You have a couple of serious options:
strip_tags
with no whitelist. Safe, but doesn’t allow for any formatting, and may cause problems with strings like this:"x<y, but y>4" --> "x4"
htmlentities
. Use this when displaying the data on the screen (not on the data before you put it in the database). It’s safe, but doesn’t allow for formatting.- A different markup system than HTML, for example: Markdown, Wiki markup, BB Code. Requires rendering to convert back to HTML, but it’s mostly safe and can be quite flexible.
answered Jan 4, 2010 at 13:54
nickfnickf
531k198 gold badges647 silver badges721 bronze badges
1
User input should be escaped before outputting it.
Whenever you’re displaying something a user submitted, run it through htmlspecialchars()
first. This’ll turn HTML code into safe output.
answered Jan 4, 2010 at 13:54
ceejayozceejayoz
175k40 gold badges296 silver badges364 bronze badges
Take a look at the htmlspecialchars() function. It converts < > ‘ » and & to their html entity equilivents, meaning <script>
will become <script>
answered Jan 4, 2010 at 13:54
YacobyYacoby
53.9k14 gold badges114 silver badges120 bronze badges
You can use strip_tags()
. The second argument of this function will allow you to list an explicit list of which tags are allowable:
// Allow <p> and <a>, <script> will be stripped
echo strip_tags($text, '<p><a>');
You may also consider htmlspecialchars()
, which converts characters like <
into <
, causing the browser to interpret them as text, rather than code:
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
answered Jan 4, 2010 at 13:54
SampsonSampson
263k74 gold badges535 silver badges560 bronze badges
0
If I understand you right, you’re just looking for two simple commands:
$message = str_replace($message, "<", "<");
$message = str_replace($message, ">", ">");
answered Jan 4, 2010 at 13:56
BobbyBobby
11.3k5 gold badges44 silver badges69 bronze badges
1
I have one problem regarding the data insertion in PHP.
In my site there is a message system.
So when my inbox loads it gives one JavaScript alert.
I have searched a lot in my site and finally I found that someone have send me a message with the text below.
<script>
alert(5)
</script>
So how can I restrict the script code being inserted in my database?
I am running on PHP.
asked Jan 4, 2010 at 13:52
There is no problem with JavaScript code being stored in the database. The actual problem is with non-HTML content being taken from the database and displayed to the user as if it were HTML. The correct approach would be to make sure your rendering code treats text as text, not as HTML.
In PHP, this would be done by calling htmlspecialchars
on the inbox contents when displaying the inbox (possibly along with nl2br
and maybe turning links to <a>
tags).
Avoid using striptags
for text content: as an user, I might want to type a message like:
... and to create a link, use <a href="your-url-here">your-text-here</a> ...
striptags
would eliminate the tag, htmlspecialchars
would make the text appear as it was typed.
answered Jan 4, 2010 at 13:56
Victor NicolletVictor Nicollet
24.1k4 gold badges57 silver badges89 bronze badges
1
You should not restrict it to be inserted into the database (if StackOverflow would restrict it, we would not be able to post code examples here!)
You should better control how you display it. For instance, add htmlentities()
or htmlspecialchars()
to your echo
call.
answered Jan 4, 2010 at 13:55
naivistsnaivists
32.2k5 gold badges60 silver badges84 bronze badges
answered Jan 4, 2010 at 13:55
QuentinQuentin
893k122 gold badges1194 silver badges1316 bronze badges
1
You should use strip_tags
. If you still want to allow some HTML, then add a whitelist in the second parameter.
I should add a really big caveat here. If you’re leaving any tags in a strip_tags whitelist, you can still be susceptible to javascript injection. Assume you’re allowing the seemingly innocuous tags <strong>
and <em>
:
Strip tags will still allow all attributes, including event handlers
like <strong onmouseover="window.href=http://mydodgysite.com">this</strong>.
You have a couple of serious options:
strip_tags
with no whitelist. Safe, but doesn’t allow for any formatting, and may cause problems with strings like this:"x<y, but y>4" --> "x4"
htmlentities
. Use this when displaying the data on the screen (not on the data before you put it in the database). It’s safe, but doesn’t allow for formatting.- A different markup system than HTML, for example: Markdown, Wiki markup, BB Code. Requires rendering to convert back to HTML, but it’s mostly safe and can be quite flexible.
answered Jan 4, 2010 at 13:54
nickfnickf
531k198 gold badges647 silver badges721 bronze badges
1
User input should be escaped before outputting it.
Whenever you’re displaying something a user submitted, run it through htmlspecialchars()
first. This’ll turn HTML code into safe output.
answered Jan 4, 2010 at 13:54
ceejayozceejayoz
175k40 gold badges296 silver badges364 bronze badges
Take a look at the htmlspecialchars() function. It converts < > ‘ » and & to their html entity equilivents, meaning <script>
will become <script>
answered Jan 4, 2010 at 13:54
YacobyYacoby
53.9k14 gold badges114 silver badges120 bronze badges
You can use strip_tags()
. The second argument of this function will allow you to list an explicit list of which tags are allowable:
// Allow <p> and <a>, <script> will be stripped
echo strip_tags($text, '<p><a>');
You may also consider htmlspecialchars()
, which converts characters like <
into <
, causing the browser to interpret them as text, rather than code:
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
answered Jan 4, 2010 at 13:54
SampsonSampson
263k74 gold badges535 silver badges560 bronze badges
0
If I understand you right, you’re just looking for two simple commands:
$message = str_replace($message, "<", "<");
$message = str_replace($message, ">", ">");
answered Jan 4, 2010 at 13:56
BobbyBobby
11.3k5 gold badges44 silver badges69 bronze badges
1
Минификация CSS, JS, HTML файлов (не путать со сжатием CSS) включает в себя удаление любых ненужных символов из файла, чтобы уменьшить его размер и тем самым ускорить загрузку.
Ниже приведены примеры того, что удаляется во время минификации файла:
- Символы пробелов;
- Комментарии;
- Разрывы строк;
- Разделители блоков.
В большинстве случаев процесс минификации не влияет на файл, а оптимизирует его для загрузки. Особенно полезна минификация CSS, JS и HTML-файлов. Кроме этого Google при ранжировании учитывает быстродействие ресурса, а минификация помогает ускорить работу сайта.
Чтобы различать минифицированные файлы, в их имена добавляется расширение .min (например: foobar.min.css).
- Разница между минификацией и сжатием
- Пример минификации
- ДО CSS минификации:
- ПОСЛЕ CSS минификации:
- Минификация CSS
- Онлайн
- Инструменты разработки
- Минификация JS
- Онлайн
- Инструменты разработки
- Минификация HTML
- WordPress плагины для минификации
- Drupal модуль минификации
- Joomla! Расширение для минификации
- Преимущества уменьшения файлов
- Пример минификации
Минификация и сжатие CSS файлов – это не одно и то же. Хотя оба этих метода предназначены для уменьшения времени загрузки. Различие заключается в том, как они работают. Сжатие используется для уменьшения размера файла при помощи алгоритмов сжатия, таких как Gzip или brotli. Файлы сжимаются перед отправкой клиенту.
Следовательно, процесс сжатия осуществляется следующим образом:
- Файл сжимается с помощью алгоритма сжатия;
- Выполняется запрос для сжатой версии файла;
- Сжатый файл отправляется от сервера к клиенту;
- Клиент распаковывает файл и считывает информацию.
Поддерживаемые алгоритмы сжатия могут варьироваться в зависимости от сервера, а также браузеров. Когда браузер отправляет запрос серверу, он сообщает ему, какой метод сжатия поддерживает, так что сервер может оптимизировать отклик для этого браузера.
Если браузер не поддерживает конкретный алгоритм сжатия, сервер будет отправлять данные в первоначальном виде (без обработки).
В следующем примере показано, как CSS файл выглядит до и после минификации.
.entry-content p { font-size: 14px !important; } .entry-content ul li { font-size: 14px !important; } .product_item p a { color: #000; padding: 10px 0px 0px 0; margin-bottom: 5px; border-bottom: none; }
.entry-content p,.entry-content ul li{font-size:14px!important}.product_item p a{color:#000;padding:10px 0 0;margin-bottom:5px;border-bottom:none}
После минификации CSS-файл стало сложнее читать, поскольку отсутствуют переносы строк, разделители и т.д. Но оптимизированный вариант имеет меньший размер, что ускоряет его загрузку, как и сжатие CSS онлайн.
- csscompressor.com — позволяет выбрать уровень минификации и размер файла на выходе:
- cssminifier.com — инструмент довольно легкий в понимании. Введите существующий CSS и уменьшенная версия создается автоматически. После этого можно загрузить сжатый код CSS в виде файла:
- yui.github.io: позволяет осуществлять процесс сборки в среде разработки, которая уменьшает, переименовывает и сохраняет оптимизированный файл в рабочем каталоге;
- phpied.com: инструмент использует возможности минификации CSS и YUI Compressor, но он применяет JavaScript вместо Java.
- closure-compiler.appspot.com: можно использовать как онлайн-инструмент и как API-интерфейс. Этот инструмент позволяет настроить оптимизацию и форматирование:
- jscompress.com: позволяет минимизировать JS путем копирования/вставки кода. Дополнительно можно загрузить JavaScript-файл и выполнить процесс минификации нескольких файлов одновременно:
- javascript-minifier.com: создан теми же разработчиками, что и cssminifier. JS Minifier позволяет скопировать минимизированный код или скачать его в виде файла. А также осуществить сжатие CSS и JS онлайн:
- yui.github.io: предоставляет возможность минимизировать JS файлы для веб-проектов.
- htmlcompressor.com: предоставляет возможность выбора между различными уровнями минификации HTML и встроенного в него кода CSS и JS:
- minifycode.com: представляет собой текстовое поле, куда нужно вставить код HTML и сгенерировать его уменьшенную версию:
Существует множество инструментов для минификации файлов. Многие CMS также предлагают плагины и расширения для минификации CSS, JS и HTML — файлов.
- Better WordPress Minify;
- Autoptimize.
Многие плагины кэширования также предлагают возможность минификации. Например, Cache Enabler поставляется с возможностью включения минификации HTML и JS. Использование этой функции позволяет уменьшить время загрузки веб-страниц, но в некоторых случаях это может привести к конфликту с другим плагином сжатия CSS WordPress.
В сообществе Drupal популярным вариантом для минификации является модуль Minify. Он позволяет минимизировать HTML, JavaScript файлы и использует компилятор Google Closure, чтобы проанализировать минификацию. Конфигурация данного модуля проходит быстро.
CMS Joomla также предлагает расширение для оптимизации сайта под названием JCH Optimize, которое уменьшает размер JavaScript и производит сжатие CSS файлов. Оно также предоставляет возможность включить GZIP сжатие для агрегированных файлов.
Решение уменьшить размер CSS, JS и HTML файлов предоставляет преимущества, как пользователям сайта, так и его владельцу. Использование минификации — это отличный способ оптимизировать ваш сайт, и это легко реализовать с помощью рассмотренных инструментов и плагинов.
Частая ситуация когда размеры файлов, разрешенных к загрузке на сайте стоят очень маленькие. Особенно этим грешат хостинги, где ставят минимальные настройки, не особо задумываясь о потребностях клиента. Это надо изменить и здесь необходимо провести некоторые настройки PHP отвечающие за размеры. Сам набор параметров я напишу чуть ниже и обозначу за что отвечает каждый из них.
Основные параметры
Итак что влияет на размеры файлов которые разрещены к загрузке в PHP.
upload_max_filesize — Максимальный размер загружаемого файла
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: «2M»
max_file_uploads — Максимальное количество одновременных загрузок
Измеряется в цифровом количестве файлов. Дефолтное значение: «20»
post_max_size — Максимальный размер отправляемого через POST-запрос файла (Должен быть больше upload_max_filesize).
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: «8M»
max_execution_time — Время в течении которого скрипт должен полностью завершить своё исполнение. Для отмены ограничений можно присвоить 0.
Измеряется в секундах или минутах. Дефолтное значение: «30»
max_input_time — Время в течении которого скрипт, должен получить и обработать все данные из POST и GET запросов.
Измеряется в секундах.
memory_limit — Ограничение на выделяемую для исполнения одного скрипта память. Для отмены ограничений, поставьте -1. Должен быть больше post_max_size.
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: «128M»
Как изменить опции настройки PHP
Изменить возможно разными способами, я покажу как это сделать.
1. PHP.INI
Файл php.ini является основным файлом где хранятся настройки исполнения php скриптов. Пользовательский файл настроек обычно находится на несколько уровней выше папки www сайта. Иногда помещён в папку php-bin. Применение: опция = значение
Пример настройки добавленной в файл php.ini:
post_max_size = 512M
upload_max_filesize = 512M
max_execution_time = 3600
max_input_time = 1800
2. .HTACCESS
Файл .htaccess (или htaccess.txt) является содержанием настроек поведения сервера и обработки файлов определённого сайта. Размещается в корне сайта.
Применение: php_value опция значение
php_value post_max_size 512M
php_value upload_max_filesize 512M
php_value max_execution_time 3600
php_value max_input_time 1800
3. Любой PHP файл
Помимо вышеописанных способов, можно сделать изменение настроек к любому PHP файлу.
Применение: ini_set(‘опция’, ‘значение’);
ini_set(‘post_max_size’, ‘512M’);
ini_set(‘upload_max_filesize’, ‘512M’);
ini_set(‘max_execution_time’, ‘3600’);
ini_set(‘max_input_time’, ‘1800’);
* Необходимо учесть, что некоторые хостеры, блокируют изменение данных опций и после применения необходимо связаться с своим хостером, чтобы убедиться, что это работает.
- Печать
Страницы: [1] Вниз
Тема: Программа уменьшает размер скрипта (Прочитано 1248 раз)
0 Пользователей и 1 Гость просматривают эту тему.

gva230
«Желтоватенький» заголовок получился, ну да ладно.
Я занимаюсь веб-разработкой. Пишу красивый структурированный код с понятно и логично названными переменными и функциями. Но это нужно только мне, как разработчику. Подобный стиль написания кода, делает его текст очень большим и довольно «увесистым».
Вот, если бы была программа, которая бы делала код компактнее: убирала пробелы и табы, символы переноса каретки и конца строки, сокращала названия переменных до минимально-возможной длины и т.п.. И чтобы это всё укомпачивание было только в результирующих файлах, а в тех, с которыми работаешь — всё по прежнему.
Никто такой проги не знает?
andrey_p
Ну так для javascript куча таких программ есть, а другим языкам это вроде не к чему (особенно Питону ни к чему ).
А вообще-то это хороший повод поизучать оболочку, sed и регулярные выражения — поскольку все это пишется за 10 минут, включая замену имен переменных по списку (ну тут, конечно, посложнее будет, но тоже все решаемо — хотя для наиболее надежного варианта надо программу/библиотеку для рефакторинга поискать — а автоматическое сокращение, это, мягко говоря, чревато).

kobzar
а в чем сложность сразу писать кратко ?:
Кто понял жизнь, тот не спешит…

Yurror
kobzar, в том что ты врядли поймёшь что значит a, b и c, а вот что значат
access_table, buffer и counter уже понять проще.
разбираться и сопровождать код с понятными именами гораздо удобнее, а клиентам и конкурентам отдавать обфусцированный код
andrey_p,
в данном случае sed слишком глуп для данной задачи. нужно построить AST скрипта и потом сделать обратную процедуру: записать тот же скрипт с минимальными идентификаторами без лишних пробелов и т.п. возможно еще проведя предварительно возможную оптимизацию.
В данном случае топикстартер хотел почитать вот эту статью wiki:Обфускация. Ну и гуглить обфускаторы для JS. Я почти уверен что их вагон и маленькая тележка ибо задача очень распространённая.

alexander.pronin
Эта процедура нужна для:
— уменьшения трафика при загрузке и увеличение производительности работы скриптов и как следствие улучшение потребительских качеств сайта
— теряется удобочитаемость, что кому-то может потребоваться.
Правильно это проделывать на финише проекта.
Можно сжимать в отдельные файлы, но можно и в один (однозначности здесь нет).
YUI Compressor использует парсер javascript, написанный на языке java, который называется Rhino.
Патченный Rhino сжимает за счет двух основных операций:
1. убирает лишние пробельные символы и комментарии
2. заменяет имена локальных переменных на более короткие
Используется java утилита yuicompressor-x.y.z.jar, которую можно скачать с сайта http://developer.yahoo.com/yui/compressor/
Пример для js.
Наиболее удобно скрипт использовать для выделенных файлов в наутилусе.
#!/bin/sh
DIR=`pwd`
RES=$DIR/"project.min.js"
cat $DIR/"jquery.treeview.js" $DIR/"menu.js" $DIR/"walker.js" $DIR/"graphic.js" $DIR/"debug.js" > $DIR/"tmp.js"
java -jar yuicompressor-2.4.7.jar --charset utf-8 -o $RES $DIR/"tmp.js"
Сжимать можно js и css.
« Последнее редактирование: 16 Февраля 2012, 13:41:33 от alexander.pronin »
andrey_p
Нет, ну все зависит от степени. Простейший набросок (не тестировалось):
1. Пробелы
s/([wd]) +([wd])/1×012/g
s/ *//g
s/x01/ /g
2. Комментарии
s!//.*!!
Ну и дальше — читаем весь файл целиком, убираем многострочные комментарии, перевод строки, составляем список алфавитно-цифровых идентификаторов минус ключевые слова, вручную добавляем замены, пропускаем опять через условный sed (лучше perl).
Ну не десять минут, ну час максимум. И зачем парсить и дерево лепить?
Впрочем понятно, что все это только для учебных целей, а для Javascript конечно лучше готовым решением воспользоваться.
Это я так, поболтать.
Пользователь решил продолжить мысль 16 Февраля 2012, 18:05:11:
И да я в курсе, что переводы строки надо будет менять на точку с запятой, но только если ее нет, и что начало многострочного комментария может вызвать проблемы. Еще что-нибудь может вызвать проблемы.
Ну то есть да, для надежной компрессии надо парсить. Ну то есть опять — надо воспользоваться готовым решением.
« Последнее редактирование: 16 Февраля 2012, 18:05:11 от andrey_p »

gva230
Не, ну я понимаю, что варианты есть всякие. Но изначально хотелось бы, чтобы эта фича была встроена в текстовый редактор. Активировалась по нажатию кнопки и выдавала результат из обработанного HTML, CSS, JavaScript, PHP. Что-то вроде компиляции у нескриптовых языков программирования. Собственно, такой редактор и разыскивается.
А за советы спасибо. Узнал много интересного.

Yurror
andrey_p,
Внутри строковых констант тоже пробелы пожмёт. А это уже критично.
А дерево тем и хорошо что ничего не поломает и оставит необходимый минимум.

andrew_bye
ИМХО если размер кода не измеряется мегабайтами, то достаточно будет только поудалять комментарии и начальные пробелы, если конечно же это не Питон , что вполне достижимо простенькими регэкспами.
Но, чует мое сердце, что ТС вообще обфускатор требуется.
andrey_p
Внутри строковых констант тоже пробелы пожмёт. А это уже критично.
Слона то я и не заметил!
Спасибо.

Yurror
ну чтобы врагов не запутывать установи mod_{gzip,deflate} и всё будет пучком =)

gva230
ну чтобы врагов не запутывать установи mod_{gzip,deflate} и всё будет пучком =)
mod_deflate — интересная штука, однако! Но мне кажется, если сначала код сделать компактным, а потом сжать, будет ещё лучше.
alexander.pronin, я говорил лишь о том, что не стоит цели запутать врагов. Но если они будут запутаны, то это не проблема.

НеФормат
а в чем сложность сразу писать кратко ?:
Когда скрипты большие, РАЗНИЦА ЕСТЬ!
- Печать
Страницы: [1] Вверх