Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Bala.js - функция для выборки элементов на странице в 408 символах (https://javascript.ru/forum/project/60330-bala-js-funkciya-dlya-vyborki-ehlementov-na-stranice-v-408-simvolakh.html)

FINoM 23.12.2015 00:42

Цитата:

Сообщение от kobezzza
В тот день, когда такая хрень станет для меня узким местом - я брошу программировать

Я сонный, наверное, не пониимаю твоего сообщения.

kobezzza 23.12.2015 00:44

Цитата:

Сообщение от FINoM (Сообщение 400985)
Я сонный, наверное, не пониимаю твоего сообщения.

Я к тому оптимизация таких спичек никогда не станет узким местом в моих приложениях.

Мне приятнее писать append, а не insertAjasentHTML (даже без ошибок написать не могу:)).

PS: Я уже давно отказался от jQ, ввиду её не нужности, но для простейших операций с DOM мне приятнее её API, а не vanilla, поэтому я рад, что нашёл такую библиотеку. А то что я юзаю там 20-30%, меня не напрягает, ибо это опять таки оптимизация на спичках.

FINoM 23.12.2015 00:50

Цитата:

Сообщение от kobezzza
даже без ошибок написать не могу

А автодополнение?
Цитата:

Сообщение от kobezzza
Я к тому оптимизация таких спичек никогда не станет узким местом в моих приложениях.

Это не оптимизация. Я сам говнокожу порой (на Матрешку посмотри :D). Просто между VanillaJS и какой-нибудь библиотекой не вижу разницы. Если разницы нет, то логично выбрать то, что работает быстрее и зависит только от меня.

kobezzza 23.12.2015 00:53

Цитата:

А автодополнение?
jQ API я печатаю быстрее :)

Цитата:

Просто между VanillaJS и какой-нибудь библиотекой не вижу разницы.
Ну разница в сахаре. Сахар - это конечно условность. Тебе нравиться native, а мне native завёрнутый в привычный jQ API - не вижу ничего криминального в этой схеме.

Rise 23.12.2015 01:24

FINoM, а как минимизировать подобные нативные конструкции как classList.contains? Попробуй... аля jq и получишь... при том получится что-то типа elem.has('class'), видишь как красиво))

А ты предлагаешь так извращаться да?
var classList = 'classList', contains = 'contains';
elem[classList][contains]('class');

kobezzza 23.12.2015 01:40

Глянул DOM level 4 спеку - а симпатично уже выходит :)

FINoM 23.12.2015 12:25

Rise, жми код как хочешь. В маленьких проектах синтаксис DOM API не сильно повлияет на результирующий код. В больших - юзай фреймворки.
Цитата:

Сообщение от kobezzza
Глянул DOM level 4 спеку - а симпатично уже выходит

Вот вот.

FINoM 23.12.2015 14:59

Не ожидал такого срача на Хабре :)

FINoM 29.12.2015 03:24

Багфикс заставил распухнуть функцию до 415 символов. Вчера удалось вернуть прежний размер (408), но не понятно, как жать дальше. У меня создаётся впечатление, что жать уже некуда (без eval, конечно же). Вот, финальный, неминифицированный вариант: https://github.com/finom/bala/blob/master/bala.js

Жму вот этой штукой, вручную: http://closure-compiler.appspot.com/

Есть идеи, как еще можно уменьшить количество символов?

Понятно, что плюс-минус пара байт ничего не решат. У меня чисто спортивный интерес.

FINoM 29.12.2015 04:09

Сразу после предыдущего сообщения пришли две идеи:
1. В парсере заменить document.createElement('q') на document.createElement(s_addEventListener) (где s_addEventListener - это 'addEventListener'). Разница только в том, что вместо валидного элемента создается HTMLUnknownElement.
2. /f/.test(typeof s) (является ли переменная функцией) заменил на это: (typeof s)[7] (мы заранее знаем, что переменная не undefined).

И небольшой чит: я убрал запятую после объявления функции в примерах, сохранив 1 байт. Теперь "убийца" занимает 400 символов.

Опять сижу и думаю, что жать некуда, не пожертвовав функциональностью.


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