Форум русскоязычного сообщества Ubuntu


Автор Тема: Программа уменьшает размер скрипта  (Прочитано 1357 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gva230

  • Автор темы
  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
"Желтоватенький" заголовок получился, ну да ладно. :)

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

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

Никто такой проги не знает?
Kubuntu - наше фсё! :Ь

andrey_p

  • Гость
Re: Программа уменьшает размер скрипта
« Ответ #1 : 16 Февраля 2012, 09:42:12 »
Ну так для javascript куча таких программ есть, а другим языкам это вроде не к чему (особенно Питону ни к чему :) ).

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

Оффлайн kobzar

  • Активист
  • *
  • Сообщений: 253
  • ooOOOooo
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #2 : 16 Февраля 2012, 10:20:05 »
а в чем сложность сразу писать кратко ?:
Кто понял жизнь, тот не спешит...

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #3 : 16 Февраля 2012, 10:45:51 »
kobzar, в том что ты врядли поймёшь что значит a, b и c, а вот что значат
access_table, buffer и counter уже понять проще.

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

andrey_p,
в данном случае sed слишком глуп для данной задачи. нужно построить AST скрипта и потом сделать обратную процедуру: записать тот же скрипт с минимальными идентификаторами без лишних пробелов и т.п. возможно еще проведя предварительно возможную оптимизацию.

В данном случае топикстартер хотел почитать вот эту статью wiki:Обфускация. Ну и гуглить обфускаторы для JS. Я почти уверен что их вагон и маленькая тележка ибо задача очень распространённая.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #4 : 16 Февраля 2012, 13:38:46 »
Эта процедура нужна для:
- уменьшения трафика при загрузке и увеличение производительности работы скриптов и как следствие улучшение потребительских качеств сайта
- теряется удобочитаемость, что кому-то может потребоваться.
Правильно это проделывать на финише проекта.
Можно сжимать в отдельные файлы, но можно и в один (однозначности здесь нет).
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

  • Гость
Re: Программа уменьшает размер скрипта
« Ответ #5 : 16 Февраля 2012, 17:57:40 »
Нет, ну все зависит от степени. Простейший набросок (не тестировалось):

1. Пробелы
s/([\w\d]) +([\w\d])/\1\x01\2/g
s/ *//g
s/\x01/ /g

2. Комментарии
s!//.*!!

Ну и дальше - читаем весь файл целиком, убираем многострочные комментарии, перевод строки, составляем список алфавитно-цифровых идентификаторов минус ключевые слова, вручную добавляем замены, пропускаем опять через условный sed (лучше perl).

Ну не десять минут, ну час максимум. И зачем парсить и дерево лепить?

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

Это я так, поболтать. :)

Пользователь решил продолжить мысль 16 Февраля 2012, 18:05:11:
И да я в курсе, что переводы строки надо будет менять на точку с запятой, но только если ее нет, и что начало многострочного комментария может вызвать проблемы. Еще что-нибудь может вызвать проблемы.

Ну то есть да, для надежной компрессии надо парсить. Ну то есть опять - надо воспользоваться готовым решением.
« Последнее редактирование: 16 Февраля 2012, 18:05:11 от andrey_p »

Оффлайн gva230

  • Автор темы
  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: Программа уменьшает размер скрипта
« Ответ #6 : 16 Февраля 2012, 18:10:37 »
Не, ну я понимаю, что варианты есть всякие. Но изначально хотелось бы, чтобы эта фича была встроена в текстовый редактор. Активировалась по нажатию кнопки и выдавала результат из обработанного HTML, CSS, JavaScript, PHP. Что-то вроде компиляции у нескриптовых языков программирования. Собственно, такой редактор и разыскивается.

А за советы спасибо. Узнал много интересного.
Kubuntu - наше фсё! :Ь

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #7 : 16 Февраля 2012, 20:40:35 »
andrey_p,
Внутри строковых констант тоже пробелы пожмёт. А это уже критично.
А дерево тем и хорошо что ничего не поломает и оставит необходимый минимум.

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #8 : 16 Февраля 2012, 21:42:30 »
ИМХО если размер кода не измеряется мегабайтами, то достаточно будет только поудалять комментарии и начальные пробелы, если конечно же это не Питон :), что вполне достижимо простенькими регэкспами.

Но, чует мое сердце, что ТС вообще обфускатор требуется.

Оффлайн gva230

  • Автор темы
  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: Программа уменьшает размер скрипта
« Ответ #9 : 16 Февраля 2012, 21:50:28 »
Мне не требуется запутать код от врагов. :) В этом смысле мне обфускатор не требуется. Но мне требуется ровно то что я написал ранее. Ну, как требуется... хотелось бы иметь. :)
Kubuntu - наше фсё! :Ь

andrey_p

  • Гость
Re: Программа уменьшает размер скрипта
« Ответ #10 : 17 Февраля 2012, 07:00:48 »
Цитировать
Внутри строковых констант тоже пробелы пожмёт. А это уже критично.
Слона то я и не заметил! :)

Спасибо.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #11 : 17 Февраля 2012, 08:42:45 »
Мне не требуется запутать код от врагов. :) В этом смысле мне обфускатор не требуется. Но мне требуется ровно то что я написал ранее. Ну, как требуется... хотелось бы иметь. :)
Противоречивое заявление.
Или или - и нашим и вашим не получится.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Программа уменьшает размер скрипта
« Ответ #12 : 17 Февраля 2012, 14:06:51 »
ну чтобы врагов не запутывать установи mod_{gzip,deflate} и всё будет пучком =)

Оффлайн gva230

  • Автор темы
  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: Программа уменьшает размер скрипта
« Ответ #13 : 17 Февраля 2012, 17:11:26 »
ну чтобы врагов не запутывать установи mod_{gzip,deflate} и всё будет пучком =)
mod_deflate - интересная штука, однако! Но мне кажется, если сначала код сделать компактным, а потом сжать, будет ещё лучше. :)

alexander.pronin, я говорил лишь о том, что не стоит цели запутать врагов. Но если они будут запутаны, то это не проблема. :)
Kubuntu - наше фсё! :Ь

Оффлайн НеФормат

  • Участник
  • *
  • Сообщений: 117
  • Ubuntu 11.10
    • Просмотр профиля
    • Линукс по Русски
Re: Программа уменьшает размер скрипта
« Ответ #14 : 17 Февраля 2012, 18:19:55 »
а в чем сложность сразу писать кратко ?:
Когда скрипты большие, РАЗНИЦА ЕСТЬ!

Мой сайт -  http://linuxfanat.ru!
Могу помочь с PHP,CSS,Html

 

Страница сгенерирована за 0.05 секунд. Запросов: 25.