Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   кто что использует для модульности скриптов? (https://javascript.ru/forum/library-toolkit-framework/18684-kto-chto-ispolzuet-dlya-modulnosti-skriptov.html)

tenshi 15.07.2011 00:12

не фантазируй. крутого выигрыша в объёме зипованного текста быть не может.

а потом на странице вставляем такой код <button onclick="hello('Привет!')"> и чешем репу. а потом получаем жалобу в саппорт со скриншотом консоли ошибок и теряемся в догадках. а потом обнаруживаем странные глобальные переменные, созданные этим чудом для своих нужд. вам геморроя мало?

kobezzza 15.07.2011 00:26

Во первых: при стандартном сжатии глобальные переменные не жмуться и ваш пример будет прекрасно работать;
Во вторых: привязка событий из HTML - моветон, сущности должны быть разделены;
В третьих: короткие имена переменных в JS работают быстрее (да, это факт);
В четвёртых: минификатор не создаёт дополнительных переменных;
В пятых: чтобы тестить сжатый код многие минификаторы создают source map, который показывает ошибку в несжатом варианте;
В шестых: real-тест jQuery с минификатором и без (Closure Compiler: Simple сжатие):
Original Size: 	211.02KB (62.58KB gzipped)
Compiled Size: 	88.7KB (31.26KB gzipped)


Не веришь? http://closure-compiler.appspot.com/home - пробуй сам

Конечно, если сравнивать сжатие на варианте без пробелов, табуляций, новых строк и комментов, то разница килобайт 6, но ведь в реальной жизни никто не пишет код в 1-у строку и без комментов ;)

Ну и наконец, то, что так делают крупнейшие компании на своих сайтах и так делают отцы JS наталкивает на мысль, что это действительно того стоит.

tenshi 15.07.2011 08:25

1. это не мой пример, а твой. ты признаёшь, что наврал?
2. они и разделены. поведение вынесено в функцию.
3. ага, на целые сотые доли микросекунд х)
4. минификатор может и нет, а вот gcc - да. тут чел на форуме недавно жаловался.
5. ага, придумали себе грабли, а потом костыли, чтобы грабли не сильно били х) по секрету скажу, что ие даже строку не всегда правильно указывает. что уж говорить про номер символа. а минификаторы пренепременно всё в одну строку пихают.
5. а теперь фокус-покус: просто вырезаем все комментарии и получаем 40кб

хороший код не нуждается в комментариях. разве что по самому минимуму, а не как в джквери:
Цитата:

// Used for trimming whitespace
trimLeft = /^\s+/,
trimRight = /\s+$/,

// Check for digits
rdigit = /\d/,

// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
ага, толпа леммингов не может ошибаться х)

kobezzza 15.07.2011 08:56

Цитата:

1. это не мой пример, а твой. ты признаёшь, что наврал?
Нет, т.к. в случае будь пример в локали, то всё бы так и было.

Цитата:

2. они и разделены. поведение вынесено в функцию.
Это не разделение, а бред и вообще хорошая практика - это делегирование.

Цитата:

3. ага, на целые сотые доли микросекунд х)
с миру по нитке...

Цитата:

4. минификатор может и нет, а вот gcc - да. тут чел на форуме недавно жаловался.
- хз, ни разу проблем не было

Цитата:

5. ага, придумали себе грабли, а потом костыли, чтобы грабли не сильно били х) по секрету скажу, что ие даже строку не всегда правильно указывает. что уж говорить про номер символа. а минификаторы пренепременно всё в одну строку пихают.
- ни разу проблем не было

Цитата:

хороший код не нуждается в комментариях. разве что по самому минимуму, а не как в джквери:
Плачу) Т.е. не нужно описывать входные параметры методов, что они возвращают и т.д.? И я последнее время часто слышу "код jQuery ужасен!!!!", но ни разу никто не сказал почему, секрет?)

Цитата:

ага, толпа леммингов не может ошибаться х)
Ну ок, ты гуру, местный аналог Чака Норриса, куда всем до тебя :D

tenshi 15.07.2011 10:01

1. не было бы. как минимум потому, что в ие функция по любому стала бы глобальной :Р

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

3. нищему гора мусора, ибо из кусочков ниток заебёшься шить рубашку, да и получится нечто страшное. оптимизировать надо то, что тормозит, а не что попало. а то получается наворотят мегатонны говнокода, а потому, чтобы это не тормозило вместо рефакторинга шарятся по полу в поисках ниточек

4, 5. ну я рад за тебя, чо. пока петух не клюнет - все уверены, что в консерватории тишь и благодать.

6. а зачем это описывать?
attr: function( name, value )
- что тут комментировать?
ну вот и спроси у джона, почему он считает свой код ужасным. наверно потому, что его тяжело поддерживать.

7. то есть кроме как примазаться к авторитетам ты ничего не можешь? детский сад. лет 5 назад все бредили xhtml и каждый "гуру" писал статьи как отрезать себе конечности, но ущемиться-таки к xhtml. потом ветер поменялся и теперь все бредят html5 и плюются на необходимость закрывать тэги, но продолжают щемиться теперь уже в html5. так и будешь хвостиком бегать за попсовыми блоггерами или может начнёшь трезво оценивать ситуацию? минификация, афайк, не даёт практически никаких бенефитов, зато даёт кучу лишних телодвижений. заняться больше не чем, как считать байтики и микросекунды?

kobezzza 15.07.2011 10:20

Цитата:

1. не было бы. как минимум потому, что в ие функция по любому стала бы глобальной :Р
Причём тут ИЕ я не понял, минификатор не привязан к браузеру.

Цитата:

2. это не бред, а правда жизни. слои не могут быть полностью изолированы, так как им надо общаться между собой. так что либо функции завязываются на идентификаторы/классы, либо вёрстка на имена функций. один фиг.
Извини, но не "один" фиг. Привязка к вёрстке гораздо более универсальная.

Цитата:

3. нищему гора мусора, ибо из кусочков ниток заебёшься шить рубашку, да и получится нечто страшное. оптимизировать надо то, что тормозит, а не что попало. а то получается наворотят мегатонны говнокода, а потому, чтобы это не тормозило вместо рефакторинга шарятся по полу в поисках ниточек
Почему нельзя оптимизировать то, что занимает по времени меньше секунды (в плане сложности реализации), но даёт бонус? Я бы с тобой согласился, если бы минификация была бы чем-то нереально тяжёлым...

Цитата:

4, 5. ну я рад за тебя, чо. пока петух не клюнет - все уверены, что в консерватории тишь и благодать.
Я тоже за себя рад.

Цитата:

6. а зачем это описывать?
attr: function( name, value )
А теперь прикинь класс для работы с WebGL, там функции с кучей параметров, которые ну не фига не очевидны не набившему шишек прогеру (к томуже нуно хорошо шарить в стереометрии).

Цитата:

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

Какие лишние телодвижения? Я запускаю 1 bat файл, который отрабатывает за микросекунды, но при этом объединяет файлы, сжимает код и проверяет на лексические ошибки.

melky 15.07.2011 14:09

вы отдалились от темы (прочитайте её имя). Мне кажется, хватит.

tenshi 17.07.2011 12:44

1. при том, что такой способ определения функции всегда создаёт глобальную функцию в jscript

2. с чего бы? один скрипт обслуживающий десяток разных страниц - куда более частая ситуация, чем одна страница обслуживающая десяток сприптов (какая-то странная страница о0). поэтому вполне нормально, что вёрстка подстраивается под скрипты, а не наоборот.

3. она увеличивает общую сложность системы (например, нам YUI компрессор портил css-ки - пришлось писать костыли), усложняет отладку (фиг ты на продакшене поймёшь где ошибка), увеличивает время сборки (а когда дедлайн на носу, итерации релизного тестирования могут быть очень короткими)

6. поэтому давайте всунем в jsdoc-и полный курс стереометрии? х) не надо писать функции с кучей параметров и всё будет хорошо. разумеется, если писать говнокод, то без комментов никак.

7. то есть ты признаёшь, что своих мозгов тебе не хватает и поэтому не имея собственного мнения ты пропагандируешь идеи тех у кого учился?

8. а батничек сам появился? а тулза для минификации сама поставилась? а муки выбора тулзы не мучали? ты потратил на это своё время. бесполезно потратил. и теперь всем, кто будет работать с этим кодом после тебя придётся настраивать у себя всё окружение на которое ты завязался в своём коде. пример с jq показателен. автор сидит на линухе и юзает мэйкфайлы. у него всё хорошо. а вот чтобы собрать его под виндой надо шаманить с сигвином. нельзя просто поставить какой-нибудь питон и запустить make.py. нет, надо поставить эмулятор линуха, прикрутить сборщики css и js, и писать собственный батничек, чтобы не лазить каждый раз в консоль. хорошо, что он хотябы не заюзал какой-нибудь node-js, которого нету под винду, но некоторые и этим не гнушаются.

melky, не указывай нам что делать и мы не скажем куда тебе пойти ;-)

trikadin 17.07.2011 14:20

tenshi, воу-воу-воу! JScript?

Kolyaj 17.07.2011 17:56

Цитата:

Сообщение от tenshi
1. при том, что такой способ определения функции всегда создаёт глобальную функцию в jscript

Не создаёт. Я, конечно, понимаю, с чем ты попутал, но и там создаётся не глобальная, а в текущем контексте.


Цитата:

Сообщение от trikadin
tenshi, воу-воу-воу! JScript?

А что не так?


Часовой пояс GMT +3, время: 00:29.