Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чистка скрипта 
:(
    Опции темы
Сisa
Дата 26.5.2015, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



В асме есть такая "особенность" - ненужные (неиспользуемые ) строки попросту не попадают в "продакшн",
и как такое получить в javascript ?

Код

a='a';
b='ooooooooooooooooooo';
alert(a);

Например dean.edwards.name/packer  пакует все подряд:
Код

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){
while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];
e=function(){return'\\w+'};c=1};
while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
return p}('0=\'1\';2=\'3\';4(0);',5,5,'a|1000|b|ooooooooooooooooooo|alert'.split('|'),0,{}))

но ведь b не использована в скрипте.
b не мешает выполнению скрипта, но это мусор. И как этот мусор чистить,
если скрипт короткий, как в примере, то это сразу бросается в глаза, а если Mb и скриптов на странице несколько ?

Это сообщение отредактировал(а) Сisa - 27.5.2015, 12:16
PM MAIL   Вверх
sQu1rr
Дата 26.5.2015, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(Сisa @  26.5.2015,  13:18 Найти цитируемый пост)
И как этот мусор чистить,

Lint, как и любой другой язык, для жабоскриптов есть линт. Можете исправить ваш пост, что бы он экран не портил
PM MAIL Skype GTalk   Вверх
Сisa
Дата 26.5.2015, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Ну что ?!!
http://www.javascriptlint.com/online_lint.php написал мне, по поводу выше приведенного скрипта:
Paste your JavaScript, HTML, or URL into the box below
другими словами он не то что сам не почистил мой скрипт, но он даже не предложил это сделать мне.
Зато конечно он хорош!
По другому скрипту предложил заменить серию запятых на точку с запятой, и еще пришлось добавить серию фигурных скобок, хотя и без них, даже в одну строку записанный скрипт нормально выполнялся.
sQu1rr - Ваш рецепт мне не помог. За совет спасибо.
После closure-compiler мой другой скрипт также поимел нарекания от lint, но опять же они были по скобочкам и запятым.
Но и closure-compiler не справился мой задачей по приведенному выше скрипту, он просто выстроил все в одну строку, и лишнее не удалил.
Вот я и спрашивал, как почистить скрипт от не нужных, не используемых строк, переменных, комментариев. Комментарии можно почистить регуляркой, 
но вот как удалить не использованные (ставшие лишними) переменные без изменения структуры скрипта?
А closure-compiler часто пользуюсь, отличная штука! (но не то что в спрашивается в вопросе)



Это сообщение отредактировал(а) Сisa - 27.5.2015, 12:17
PM MAIL   Вверх
sQu1rr
Дата 27.5.2015, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(Сisa @  26.5.2015,  19:31 Найти цитируемый пост)
Комментарии можно почистить регуляркой, 

Вы будете моим героем если сможете smile

Цитата(Сisa @  26.5.2015,  19:31 Найти цитируемый пост)
он просто выстроил все в одну строку, и лишнее не удалил.

Вы понимаете что javascript не компилируется как C или асм? линт поможет найти ошибки, но никто из за вас исправлять не будет, так как никто не может быть уверен в таких языках как жабаскрипт, где инпут может поступить от юзера, пройти через eval() или просто вызвать переменную из словаря, и не понятно используется она или нет на этапе "компиляции"

Цитата(Сisa @  26.5.2015,  19:31 Найти цитируемый пост)
За совет спасибо, можете исправить Ваш пост.

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

Цитата(Сisa @  26.5.2015,  13:18 Найти цитируемый пост)
В асме есть такая "особенность" - ненужные (неиспользуемые ) строки попросту не попадают в "продакшн",

А "асме" нет такой особенности. Это оптимизация компилятора. Она может быть а может не быть. А "асма" бывает разная: intel, gas, a&t. О кстати, еще и разные компиляторы: nasm, masm, tasm, Xasm you name it.

Код

// код не проверял, так что считайте за всевдокод
a = 2; // window.a = 2
b = 3; // window.b = 3
var x = prompt('var name'); // пусть юзер введет a
var z = 'b';
window[x]; // 2
window[z]; // 3

PM MAIL Skype GTalk   Вверх
Сisa
Дата 27.5.2015, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Пост отредактировал smile

Используя "особенность" closure-compiler все же справился с моей задачей:
Код

var da=function(a){
 a=a||'a';
 var b='ooooooooooooooooooo';
 alert(a);
}

но по своему, он изменил структуру и наименования:
Код

var da=function(a){alert(a||"a")};

к тому же для подобного решения приходится обычно что то предварительно менять и в самом скрипте еще до начала обработки compilerом.
По поводу регулярки - da.toString() ... replace(.../*коменты*/..."//.*"...,"")  и дальше напечатать на странице свой новый скрипт и использовать его уже в "продакшн".


Это сообщение отредактировал(а) Сisa - 27.5.2015, 12:54
PM MAIL   Вверх
sQu1rr
Дата 27.5.2015, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Код

var x = "lol /*это сотрется";
var y = "и это";
// */ а это нет.

PM MAIL Skype GTalk   Вверх
Сisa
Дата 27.5.2015, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



sQu1rr - ну такой код!!! 

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

Возвращаясь к вопросу, вот если бы был такой онлайн сервис чистки..., что то подобное compiler, только чуточку по другому правил бы.

PM MAIL   Вверх
sQu1rr
Дата 27.5.2015, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Так это же opensource
https://github.com/google/closure-compiler
Подправьте код на свое усмотрение?
PM MAIL Skype GTalk   Вверх
Сisa
Дата 27.5.2015, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



java ???
Mapping.java, ant.jar ...

Спасибушки, я уж лучше ручками, ручками smile   и регулярками    smile))))))))))))))

PM MAIL   Вверх
Сisa
Дата 28.5.2015, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Код

var a=function(){
 var x = "lol /*это сотрется";
 var y = "и это";
 // */ а это нет.
 alert(x);
};
a();
a=new Function(a.toString().replace("function(){","").replace("}","").replace(/\/\*[^\*]*/,"").replace(/[\/\*]{2}/,"").replace(/[.]*(\.)/," !!! :)\";"));
a();

PM MAIL   Вверх
sQu1rr
Дата 28.5.2015, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Извините, а в чем смысл вышепреведенного кода?   smile 
PM MAIL Skype GTalk   Вверх
Сisa
Дата 28.5.2015, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Ну как же, мне вчерашний Ваш lol так понравился, что и сегодня о нем вспомнил  smile
а что, у Вас разве не сработала чистка экстрима? 

Конечно же, у Вас найдется лучшее решение, но вот представьте, когда пишешь скрипт, и надо в и нем поэкспериментировать, т.е. сделать что то чуточку по другому, и Вы не хотите потерять уже имеющийся вариант функции например, то можно скопировать в этом же скрипте  функцию, а к ее имени добавить "_", или "__", или "__________123654" и делайте все что хотите дальше, а в чистовик этот мусор с _ попасть не должен, вот такие функции можно бы и почистить? Хотя опять же это не решение, когда удаляется кусок какого то кода, а некоторые используемые ранее  данные вдруг остаются беспризорными. Их все же искать надо. Инструмент это главное, (не пальцем же огород копают) в итоге сегодня - compiler рулит. А может в каком нибудь умном редакторе - "компиляторе"- интерпретаторе  для javascript что то такое есть встроенное?
PM MAIL   Вверх
sQu1rr
Дата 28.5.2015, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(Сisa @  28.5.2015,  14:50 Найти цитируемый пост)
 у Вас разве не сработала чистка экстрима? 

Сработала, с минимальными изменениями (function ()) - у меня с пробелом браузер выводит, но не важно. Важнее то что комментарий - часть строки и удаляться НЕ ДОЛЖЕН какраз таки smile

Цитата(Сisa @  28.5.2015,  14:50 Найти цитируемый пост)
сделать что то чуточку по другому, и Вы не хотите потерять уже имеющийся вариант функции

 smile вы уж извините, но если вы не используете git, то я даже не знаю.

Цитата(Сisa @  28.5.2015,  14:50 Найти цитируемый пост)
А может в каком нибудь умном редакторе - "компиляторе"- интерпретаторе  для javascript что то такое есть встроенное?

Гугловский V8 компилирует и оптимизирует код практический в машинный когда это возможно. Если функция вызывает больше N раз, то это практически гарантировано в зависимости от того как функция написана (не вызывает всякие дебагеры и тд и тп). Интересная статья тут: https://github.com/petkaantonov/bluebird/wi...ization-killers

Цитата(Сisa @  28.5.2015,  14:50 Найти цитируемый пост)
итоге сегодня - compiler рулит

Код

var b = 2;
function test(a) {
    setTimout(a, 1);
};
test(prompt());

Как компилятор поймет убирать ли здесь b или нет? Javascript на этапе компиляции очень сложно и часто невозможно оптимизировать так как вы хотите.
PM MAIL Skype GTalk   Вверх
Сisa
Дата 29.5.2015, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Как то сделал я себе "библиотеку решений" с набором всевозможных js функций которые можно менять и пополнять их перечень, 
работает так - для создания нового скрипта открываем в браузере свой html с текстовым окошком в котором пишем новый код js, и зная имена функций в библиотеке просто напросто сразу используем их, без какого либо переписывания в этот новый скрипт, и они сразу могут выполняться. А чтобы получить рабочий скрипт для работы без библиотеки, жмем кнопочку, и весь код пересобирается автоматически в новый, без тех сотен функций что в библиотеке имеются, используя только тот скрипт что записывал сейчас и только те функции из библиотеки что были задействованы и в той последовательности что и те и эти функции вызывались, путаницы никакой, все работало. Такое вариант в принципе отличается от jquery подобных универсалов, где столько умных мыслей заложено, а используется как правило лишь малая часть возможностей. К тому же написание нового кода ускоряется за счет того что не надо ничего перепроверять, искать, переписывать или копировать, функции прежде чем вносятся в библиотеку тестируются же.
Когда делал думал что буду пользоваться, но потом как то любой новый скрипт все же писал с нуля smile И тем не менее ИНСТРУМЕНТ - вот что главное! И он должен быть, и он должен быть разнообразным, в т.ч. "чистящий".

git - а что это такое ? Не, ну конечно, версии и все такое, командный стиль (групповой), особенно раздражает наличие такой записи о номере версии имеющейся непосредственно в тексте в определенных скриптах, вместо того чтобы данный момент находил отражение в наименовании, например так ЗАПОРОЖЕЦ 968,   МЕРСЕДЕС 600-й   smile))

Вот как например в Chrome, есть такая фишка в style - vertical-align: middle; т.е. текст есть но он зачеркнут, это о чем то должно говорить, вот и совсем отлично было бы иметь точно такой встроенный анализатор javascript, где неиспользуемые буковки зачеркивались бы и хотя бы визуально можно было бы как ориентироваться по скрипту.

Добавлено через 11 минут и 45 секунд
Код

var b = 2;
function test(a) {
    setTimout(a, 1);
};
test(prompt());

Анализатор попросту обязан посмотреть использовалась ли данная буковка b (исходя хотя бы из ее глобальности) где нибудь в коде, до этой строки или после нее, и сделать какие то выводы...
Или выполнить код, записав при этом себе в копилку, какие имена были в ходу, и их оставить в итоге. Причем это касается не только одного скрипта, но всех тех что в странице.
PM MAIL   Вверх
sQu1rr
Дата 29.5.2015, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Цитата(Сisa @  29.5.2015,  12:01 Найти цитируемый пост)
git - а что это такое ?

 smile 

Цитата(Сisa @  29.5.2015,  12:01 Найти цитируемый пост)
 особенно раздражает наличие такой записи о номере версии имеющейся непосредственно в тексте в определенных скриптах, вместо того чтобы данный момент находил отражение в наименовании, например так ЗАПОРОЖЕЦ 968,   МЕРСЕДЕС 600-й 

 smile 

Цитата(Сisa @  29.5.2015,  12:01 Найти цитируемый пост)
встроенный анализатор javascript, где неиспользуемые буковки зачеркивались бы и хотя бы визуально можно было бы как ориентироваться по скрипту

посмотрите мой пример на коммент выше. В данном случае b будет зачеркнут или нет? А если это рантайм анализатор, то мы и так знаем что V8 и фури очень хорошо оптимизирует, и зачем нам об этом вообще думать.

Ваша идея в библиотекой понятна и не нова, но большинство людей предпочтают систему модулей. И если честно, скачивать даже на 200кб больше (они же кешируются) в наше время не составляет никакой проблемы. Посморите на исходный размер ember.js - а ведь летает. А дальше мы уже можем положиться на V8 и фурифокс и что ба там не было у ослика.

Добавлено @ 14:18
Цитата(Сisa @  29.5.2015,  12:01 Найти цитируемый пост)
Анализатор попросту обязан посмотреть использовалась ли данная буковка b (исходя хотя бы из ее глобальности) где нибудь в коде, до этой строки или после нее, и сделать какие то выводы...
Или выполнить код, записав при этом себе в копилку, какие имена были в ходу, и их оставить в итоге. Причем это касается не только одного скрипта, но всех тех что в странице. 

Ну вот предположим это весь код скрипта а вы анализатор. сделайте выводы. (единственный скрипт)

Это сообщение отредактировал(а) sQu1rr - 29.5.2015, 14:19
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.