Инженеры из компаний Cloudflare, Mozilla, Facebook и Bloomberg предложили (https://blog.cloudflare.com/binary-ast/) новый формат BinaryAST (https://github.com/tc39/proposal-binary-ast) для ускорения доставки и обработки JavaScript кода при открытии сайтов в браузере. BinaryAST выносит фазу синтаксического разбора на сторону сервера и поставляет уже сформированное абстрактное синтаксическое дерево (AST (https://ru.wikipedia.org/wiki/%D0%90%D0%.... При получении BinaryAST браузер сразу может перейти на стадию компиляции, минуя парсинг исходного кода JavaScript.Для тестирования подготовлена (https://github.com/binast/binjs-ref) эталонная реализация, поставляемая под лицензий MIT. Для парсинга используется компоненты Node.js, а код для оптимизации и формирования AST написан на языке Rust. На стороне браузеров поддержка
BinaryAST уже доступна в ночных сборках (https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly) Firefox. Кодировщик в BinaryAST может применяться как на уровне инструментария конечного сайта, так и для упаковки скриптов внешних сайтов на стороне прокси или сети доставки контента. В настоящее время уже начался процесс стандартизации BinaryAST рабочей группой ECMA TC39 (https://tc39.github.io/), после завершения которой формат сможет сосуществовать вместе с существующими методами сжатия отдаваемого контента, такими как gzip и brotli.
Значительное время при обработке JavaScript занимает фаза загрузки и синтаксического разбора кода. С учётом того, что объём загружаемого JavaScript на многих популярных сайтах приближается к 10 Мб (например для LinkedIn - 7.2Мб, Facebook - 7.1Мб, Gmail - 3.9Мб) первичная обработка JavaScript вносит существенную задержку. Стадия парсинга на стороне браузера также замедляется из-за невозможности полноценного построения AST на лету, по мере загрузки кода (браузеру приходится ожидать завершения загрузки блоков кода, например конца функций, для получения недостающей для разбора текущих элементов информации).Частично проблему пытаются решить через распространение кода в минимизированном и сжатом виде, а также при помощи кэширования браузером сгенерированного байткода. На современных сайтах код обновляется достаточно часто, поэтому кэширование лишь частично решает проблему. Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для ускорения обработки уже существующего кода на JavaScript.
Другим вариантом является доставка готового скомпилированного байткода вместо JavaScript-скриптов, но разработчики браузерных движков выступают против, так как сторонний байткод трудно верифицировать, его прямая обработка может привести к расслоению Web, возникают дополнительные угрозы безопасности и требуется разработка формата универсального байткода.
BinaryAST позволяет вписаться в текущую модель разработки и доставки кода без создания нового байткода и без изменения языка JavaScript. Размер данных в формате BinaryAST сопоставим со сжатым минифицированным JavaScript-кодом, а скорость обработки за счёт исключения фазы парсинга исходных текстов заметно увеличивается. Кроме того, формат позволяет выполнять компиляцию в байткод по мере загрузки BinaryAST, не ожидая завершения получения всех данных.
Особенностью BinaryAST также является возможность восстановления читаемого JavaScript не один в один совпадающего с исходным вариантом, но семантически эквивалентного и включающего те же имена переменных и функций (BinaryAST сохраняет имена, но не сохраняет информацию о позициях в коде, форматирование и комментарии). Обратной стороной медали является появление новых векторов для атак, но по мнению разработчиков они значительное меньше и более контролируемы, чем при применении альтернатив, таких распространение байткода.Тесты кода facebook.com показали, что на разбор JavaScript тратится 10-15% ресурсов CPU и на парсинг уходит больше времени, чем на генерацию байткода и начальное формирование кода для JIT. В движке SpiderMonkey время полного построения AST занимает 500-800 мс и применение BinaryAST позволило сократить этот показатель на 70-90%.
URL: https://blog.cloudflare.com/binary-ast/
Новость: https://www.opennet.ru/opennews/art.shtml?num=50701
Идея хорошая а ситуация страшная
WEB хомяки всё никак не могут пережыть смерть FLASH.
Теперь решыли из JS сделать недоступную для разбора человеком проприетарщину.
При желании из JS можно сделать недоступную для разбора человеком проприетарщину, которая все еще будет JS, достаточно удалить комментарии, пробелы, отступы и переносы и заменить все идентификаторы их хэшами.
а ты опенсорсный пёс, сидишь и разбираешь каждый скрипт на каждом сайте?
Бинарный интернет на марше
Вот что страшно:>Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для современных вебдизайнеров.
Для Typescript-а, который становится все популярнее, это вполне выход.Уже есть AssemblyScript, кстати.
> Для Typescript-а, который становится все популярнее, это вполне выход.
> Уже есть AssemblyScript, кстати."разработчики" "программисты" и другие разновидности макак-копипастеров, гордо именующие себя вебдизайнерами не осилят.
вот что страшно.
Ну пусть клепают сайтики на вордпрессе и подобную мелочевку. Мне, если честно, все равно, что там, я закрываю глаза и ограничиваюсь секьюрити аудитом. А на серьезных частях проекта макако-копипаст code review не пройдет - тут либо научатся, либо сольются.
> Ну пусть клепают сайтики на вордпрессе и подобную мелочевку. Мне, если честно,
> все равно, что там, я закрываю глазаНа вордпрессе сделано очень много корпоративных сайтов с интернет магазинами.
Это не делает их не мелочевкой с технологической точки зрения. Эка невидаль, магазин в интернете! Обороты могут быть серьезные, да - ну у кого-то и с табличками в Экселе побольше.
> Это не делает их не мелочевкой с технологической точки зрения. Эка невидаль,
> магазин в интернете! Обороты могут быть серьезные, да - ну у
> кого-то и с табличками в Экселе побольше.Правильно. Технологии не важны. Аудитория делает их.
Технологии важны с точки зрения расходов. Качество кода интернет-магазина на ВП не имеет особого значения, все равно его поддерживать недорого. А если это, скажем, глобальная поисковая система, тут разница куда существеннее.
> Технологии важны с точки зрения расходов. Качество кода интернет-магазина на ВП не
> имеет особого значения, все равно его поддерживать недорого. А если это,
> скажем, глобальная поисковая система, тут разница куда существеннее.О, да! Поддержка глобальной поисковой системы, ядро которой крутится _на_ _стороне_ _браузера_, будет очень дорогой.
>>>подходит для современных вебдизайнеров.:'D
Дизайнеры прям либо роботы с необновляемым несовместимым с типизацией ПО, либо инвалиды какие-то )
>>>>подходит для современных вебдизайнеров.
> :'D
> Дизайнеры прям либо роботы с необновляемым несовместимым с типизацией ПО, либо инвалиды
> какие-то )Да.
Веб постепенно улучшается, оптимизируется, и это действительно круто
Чего только не изобретут, чтобы не писать натив... В вебе нужен только текст, опционально с картинками.
Мне такой веб не нужен.
А какой нужен, свистопердящий рекламными вставками?
С возможностью интерактивного взаимодействия с текстом, картинками и мультимедиа. Так понятнее?
HTML это и есть интерактивный текст. А уж сколько интерактива сейчас позворяет навесить css...
Тем не менее JS юзается вовсе не от неумения в СSS и по большей части не для рекламы.
Кажись, это дитя ютуба, которое с горем пополам умеет читать.
А какой веб тебе нужен, можешь сформулировать?
Так люблю читать, как кучка дoлбoeбoв с опеннета решает, каким должен быть веб.
ага, сначала думали все перекинуть на сторону клиента (всякие там SPA), а теперь обратно на сторону сервера, и до коли эти скачки будут продолжаться?
> до колиМожет, до пети?
> Может, до пети?да хоть до лампочки, каждому своё
до Петро
Мне сначала показалось странным, что ресурсоемкую операцию переносят на сторону сервера, совокупная мощность клиентов несоизмеримо больше, как мне кажется (запросы от которых сервак обрабатывает в данный момент), и экономически нецелесообразно.. но, по идее, на серваке как раз фаза разбора будет происходить один раз при выкате новой версии сервиса.. тогда это очень логично, нагрузка не возрастет вообще.
Может стоит задуматься об избавлении от идеи что-либо парсить или "разбирать", и самое главное от всяких "скачек". Гугл ещё не избавился от идеи все делать за нас?
Дополню немного>на серваке как раз фаза разбора будет происходить один раз при выкате новой версии сервиса.. тогда это очень логично, нагрузка не возрастет вообще.
хочу отметить, что и на серваке этого происходить не должно, а где должно? - правильно, на сервере разработки. Таки да, колесо катится в сторону компиляции, когда сервер тупо будет отдавать "готовое" клиенту, а клиент его тупо исполнять. Но проблема в корне совсем в другом, развитие клиента (браузеров) и сервера (веб серверов) на данный момент идет незамисимо, хотя должно идти в совокупности. Клиент диктует свое и перекладывает ответственность на сервер, сервер в свою очередь диктует свое и перекладывает на клиента. Отсюда и долбанные "скачки". Зачем? Если есть отношение клиент-сервер, то с чего они должны независимо развиваться? А про само отношение (протокол) я промолчу. Протокол вообще третья сторона, которая с какого-то бодуна сегодня диктует для клиента, а завтра для сервера. Вот и получился "треугольник противоречий" (лебедь, рак да щука. думаю не стоит обьяснять морали сей)
Приведу наглядный пример описанной выше ситуации.
Приходит как-то отец (родитель) в магазин игрушек и покупает пазл с картинкой героя комиксов для сына. Ну пазл довольно большой. На радостях ребенок начинает собирать. Тратит много времени,устает и т.д. Ему сложно и начинает жаловаться отцу. Отец бежит в магазин и заявляет, что пазл ваш очень сложный для ребенка, от тратит много времени и не может его собрать, соберите за него этот пазл. Ну магазин в недоумении ну и собрал пазл для ребенка. Ребенок теперь доволен смотря на собранную картинку любимого героя комиксов. Магазин столкнувшись с такой ситуацией решил продавать уже собранные пазлы. В один день устраивается на работу в магазин "успешный менеджер" и предлагает не продавать собранные пазлы, а что-нибудь менее затратное по времени - фотки тех же супер героев, ведь детей интерессуют именно они. И что в итоге, по факту убивается производство пазлов (набора кусочков) и заменяется на готовое. А далее порйдет некоторое время, и я думаю прибежит обратно отец и скажет, мой ребенок ничего не делает (ну в плане не развивается), дайте мне что-то, что заставит его делать какие-либо действия. А что будет дальше? Ровно тоже, что и было описано выше - по кругу (порочному). А все почему?
Обожаю длительные неуместные сравнения
Таки дочитали до конца)))
> ресурсоемкую операцию переносят на сторону сервераВсё просто. Раньше были только десктопы, а теперь внушительную (если не бОльшую) часть траффика составляют мобилки, которые сейчас конечно уже достаточно мощные, но всё же не настолько как десктопы.
Это примерно как убрать огнетушитель, чтобы вместить в коридор еще одного человека.
Строители знали об этом грязном способе заранее и конечно, оценив преимущества и недостатки не сделали это.
Теперь вы убираете огнетушитель и называете это развитием коридора!
Более того - байткод(даже не АСТ) передавались примерно в то же время когда и ява скрипт развивался.
> Это примерно как убрать огнетушитель,Это как бы если Лупа пришёл в магазин к Пупе, а Пупа заплатил за его покупки.
Веб это легаси зоопарк костылей и велосипедов все что в вашем браузере это Draft на краю технологий плоской земли.
Все бы эти оптимизации да 15 лет назад. Сейчас с доступными оптоволоконным интернетом, 16-ядерными процессорами и сотнями гигов оперативки - вообще как-то плевать.
Опять перестановка кроватей по просьбе уважаемых людей.
хотят прятать js-код
это первый шаг
Это шаг четвёртый или пятый (после минификации исходников, компиляции из очередного лиспа в JS или asm.js и внедрения WASM) и — в контексте прятки кода — абсолютно бестолковый.Короче, с разморозкой.
>BinaryAST позволило ускорить время начала запуска с 338 до 314 мс на настольной системеПрирост 7,6% - им кажется, что поймали слона за хобот.
Курочка по зернышку, в переводе не понятно, что конкретно меряли, если это время с момента попытки установки соединения и до начала работы js в браузере - то 10% прироста это очень много. Так как там надо сначала html прогрузить и распарсить, потом js вытянуть и распарсить, не все это хорошо параллелится и оптимизируется, не понятно используется ли при этом http2 server push, который дал бы ещё ускорения за счет параллельности обработки страницы.
Копирасты и веб-макаки будут рады — первые из-за того, что идея открытости исходников JS убивается, а вторые из-за того, что их страдания никто не увидит.
именно
под благовидным предлогом делают шаг в сторону закрытости
Народ схавает. Ему на открытость наплевать. Сейчас большая часть использует не сайты, где хоть какая-то возможность аудита производимых действий сохраняется, а через бинарное приложение из маркета.
Все шаги уже давно сделаны любителями развесистых фреймворков и шаблонизаторов на стороне клиента, а также минификации исходников и деплоймента каждые две минуты. Уже давно не осталось актуальных сайтов с JS, где можно было бы с пользой прочитать исходники. Не понимаю этого нытья, всё ж давно уже просрано.
Во-первых, исходники как были, так и остались, просто формат бинарный. И достать их намного легче, чем из того же байткода C#, python или Java (которые превосходно декомпилируются), потому что байткод - это не AST, а именно байткод, его ещё декомпилировать надо, а тут - всего лишь распарсить.
Обфусцированный код тоже можно распарсить, но это адовый ад и свинство.
Речь не об обфускации идёт (кстати, обфускация
JS при желании довольно легко снимается). Это скорее аналог минификации, причём нехардкорной, как делает Closure Compiler (и код всё-равно прекрасно понимаем, делюсь даже лайфхаком - хардкорно-обфусфированный код не мешает пропустить через CC на уровне ADVANCED - значительная часть обфускаций будет выоптимизирована символьным движком к чертям собачьим), снимающейся простым автоформатировщиком кода.
Сними пожалуйста вот тут у банка https://habr.com/ru/company/group-ib/blog/416453/#comment_18...
Я даже смотреть в ту сторону не буду: вы знаете, что даже мысль в сторону, противоположную стороне интересов СБ и/или владельцев банков (особенно того самого, у которого владелец печально известен сутяжничеством с разными пользователями инета) в России наказуема. По крайней мере на Хабре несколько раз читал от разных комментаторов слухи и сплетни о том, как разных обсуждальщиков банковской небезопасности на форумах уголовно покарали за одно высказывание идеи. Так что я даже смотреть это не буду.
> Я даже смотреть в ту сторону не буду: вы знаете, что даже
> мысль в сторону, противоположную стороне интересов СБ и/или владельцев банков (особенно
> того самого, у которого владелец печально известен сутяжничеством с разными пользователями
> инета) в России наказуема. По крайней мере на Хабре несколько раз
> читал от разных комментаторов слухи и сплетни о том, как разных
> обсуждальщиков банковской небезопасности на форумах уголовно покарали за одно высказывание
> идеи. Так что я даже смотреть это не буду.Что, даже одним глазком не взглянешь?
Для себя то можно попробовать снять.
-Давайте сделаем построение синтаксического дерева заранее?
-А давайте и машинные команды абстрактного процессора заранее напишем?
-Да не, ты чего, синтаксическое дерево это ж как исходники. Его только распарсить.
...И превратить в байт код, а потом в машиные коды и выполнить.
AST это далеко не исходники. Зато имея байт код легко получить аналогичный AST, получив при этом еще больше ускорения.
Вы уж определитесь что вы хотите - либо человекочитаемый код и тогда к черту все эти минимизаторы, фреймворки и все все все, либо заменяйте браузеры на QML клиенты.
AST - это исходники без мусора. Из байт-кода можно получить AST, но не всегда - можно сварганить байткод, который в языке вооще не выражается, и тем не менее, работает. А вот из AST однозначно получается байт-код.>Вы уж определитесь что вы хотите - либо человекочитаемый код и тогда к черту все эти минимизаторы, фреймворки и все все все, либо заменяйте браузеры на QML клиенты.
AST и есть чаловекочитаемый код. Все чужые коды перед прочтением пропускаю через автоформатировщик. Результат автоформатирвания AST и исходника одинаков, ибо качественные автоформатировщики обычно сначала читают код в AST, а потом AST дампят в код.
Все так. Это практически не противоречит моему комментарию.
Разве что "Из байт-кода можно получить AST, но не всегда - можно сварганить байткод, который в языке вооще не выражается, и тем не менее, работает", но тут вы правы.
> Во-первых, исходники как были, так и осталисьА зачем эти исходники нужны, "человекам на посмотреть"? Так для человека жестко обфускированный и оптимизированный JS будет не сильно легче того же байткода WebAssembly, в который можно было бы перегнать исходники JS. А для машин и алгоритмов (каких-нибудь, "веб-антивирусов") что AST, что байткод - одночленственно.
Что только не придумают - что бы впихнуть юзеру скрипты , обойдя блокировщики рекламы ...
+1 Да и это ещё. Плюс майнеры прятать станет легче.
это почему вдруг легче?майнеры перестанут нагревать процессор и тормозить? :-)
или ты по исходному году майнеры распозновал? (пофигу если ноутбук перегревается от какого-то сайта -- главное что в его исходном коде ты майнера не обнаружил -- да? так?:))
> это почему вдруг легче?
> майнеры перестанут нагревать процессор и тормозить? :-)С разморозкой!
Современные майнеры вполне выставляются на 15-20%, что в современном вебе никого не удивит.
https://github.com/cazala/coin-hive
> --throttle The fraction of time that threads should be idleСледующий логичный шаг, по примеру мальвари: поиск и удаление скриптов конкурентов :)
>> это почему вдруг легче?
>> майнеры перестанут нагревать процессор и тормозить? :-)
> С разморозкой!
> Современные майнеры вполне выставляются на 15-20%, что в современном вебе никого не
> удивит.
> https://github.com/cazala/coin-hive
>> --throttle The fraction of time that threads should be idleво первый 20% уже слегка нагревает ноутбук (не так быстро как 100%, в 5 раз медленее, но уже неприятно и заметно)..
и 20% хорошо было бы видно глазами на индикаторе нагрузки -- будь этот индикатор на каждой вкладке..
во вторых -- если майнеры ЯКОБЫ такие безобидные для тебя (предположим тебе пофигу на 20% CPU) -- то на кой фиг ты вообще их хочешь находить-и-отключать? аааАА?
ты так говоришь будто "майнер плохо -- потому что он крадёт деньги из моего кармана" ... но при этом рядом же будто говоришь "пропажи денег увидить нельзя, так как их укралось около нуля копеек (или просто нуль копеек)"..
логика?! понимаешь?
> во первый 20% уже слегка нагревает ноутбук (не так быстро как 100%,
> в 5 раз медленее, но уже неприятно и заметно)..Ага, "очень заметно" по сравнению с любым из современных "тяжелых" сайтов. Любой пользователь прям влет замечает, особенно на консумерских ноутах, с их "альтернативным" теплоотводом.
> в 5 раз медленееНу да, точки кипения достигнет в 5 раз медленнее, ага. </сарказм>
> во вторых -- если майнеры ЯКОБЫ такие безобидные для тебя (предположим тебе
> пофигу на 20% CPU) -- то на кой фиг ты вообще их хочешь находить-и-отключать? аааАА?
> ты так говоришь будто "майнер плохо -- потому что он крадёт деньги...
> логика?! понимаешь?Сам что-то придумал, сам же и опроверг.
Причем тут логика - непонятно.
> Ага, "очень заметно" по сравнению с любым из современных "тяжелых" сайтов. Любойи что -- если сайт тормозит-и-нагревает потому что он тяжёлый -- тебя устраивает?
а если сайт тормозит-и-нагревает (не более, так же) -- потому что там майнер -- тебе уже не устраивает?
тебе как пользователю какая нахрен разница какова причина нагревания-и-тормозов?
майнер который не нагревает и не тормозит -- почему ты хочешь обнаруживать? ЗАЧЕМ? ДЛЯ КАКОЙ ЦЕЛИ? ЧТО ХОЧЕШЬ ДОБИТЬСЯ его отключением? какую выгоду для себя преследуешь?
> Сам что-то придумал, сам же и опроверг.
> Причем тут логика - непонятно.если для тебя это сложно -- давай перейдём на аналогии:
диалог:
A: когда переходишь дорогу, тебя может сбить автомобиль! ПОЭТОМУ нужно РАСПОЗНОВАТЬ автомобили! но как это сделать если вдруг автомобили станут выглядеть подругому, не как щаз? это проблема!
B: но ведь можно просто посмотреть что какой-то ДВИЖУЩИЙСЯ (и шумящий) предмет едит на тебя! наверняка это и будет автомобиль! так можно распознать опасность сбивания.
А: НЕТ! этот способ не пройдёт! потому что некоторые водители едут очень МЕДЛЕННО (и почти безшумно), издалека вобще будет выглядеть будто автомобиль стоит на месте. так что твой способ распознования автомобилей не подходит.
(а ничего страшного -- если тебя собъёт самокат а не автомобмиль? распознование опасности самокатов ты будешь решать отдельной задачей?:))
>> Сам что-то придумал, сам же и опроверг.
>> Причем тут логика - непонятно.
> если для тебя это сложно -- давай перейдём на аналогии:Перейди для начала на внимательное прочтение перед ответом. Без приписывания другим каких-то посторонних утвреждений и прочей отсебятины.
Если для тебя это сложно -- давай я процтирую:
> если майнеры ЯКОБЫ такие безобидные для тебя
> ты так говоришь будто "майнер плохо -- потому что он крадёт деньги из моего кармана" ... но при этом рядом же будто говоришьа ты мне для начала укажешь, где я это утверждал и только потом оспоришь.
> А: НЕТ! этот способ не пройдёт! потому что некоторые водители едут очень МЕДЛЕННО (и почти безшумно),
> (а ничего страшного -- если тебя собъёт самокат а не автомобмиль?И даже приблизительные аналогии не сумел подобрать, сравнив *опу с пальцем 🙄.
Но зато придумал целый диалог.
> 2.18, Аноним (7), 21:08, 17/05/2019 > Плюс майнеры прятать станет легче.хочешь сказать что в этом предложении якобы НЕ было намёка о том что "майнеры плохо" (или тогда зачем их прятать если это не плохо?)
или хочешь сказать что это другой аноним?
Будут новые блокировщики, заточенные под блокировку исполнения бинарей на стороне клиента, тоже мне проблема...
На самом деле идея очевидная и у меня была в намного более расширенном виде. А именно - хранить все исходники в виде графа в VCS. Плюсы - оформление не хранится, места не занимает, в диффы искажения не вносит. Можно гра\W менять имена символов в коммитах. Можно делать слияние на уровне AST. Джва года (на самом деле как минимум вдвое больше) жду такую vcs.
Ты не понял, для чего нужна VCS.
Нет, это ты не осознал суть VCS. Важнейшая функция VCS - эть слияние. И на уровне текста слияние некачественное. некстген будет юзать AST, а old-gen отомрёт.
Ты и суть разработки ещё не понял, студент. Ничего, с опытом поймёшь.
Т.е. ты предлагаешь наплевать на комментарии, названия переменных, документацию в коде, оставить только AST и положиться на то, что все компиляторы генерируют одинаковый AST?
А ты, видимо, никогда не видел аст и не знаешь, что это такое. Потому что сферическивакуумный аст по дефолту включает ВСЁ — вплоть до колонок и столбцов в исходниках. В оп-посте грицца про про аст, из которого пострипали всё некритичное для выполнения (координаты нод, каменты). Анон (или кто он там) выше говорит про аст, в котором нет ТОЛЬКО координат нод.
Linkedin и новый Gmail — это замечательные примеры того, как делать не надо писать. Что там в мордокниге — ХЗ, не пользуюсь, но по 7 мегам скриптов можно только догадываться о степени корявости и перегруженности.
> Что там в мордокнигеабсолютно идиотская идея дублировать dom
Идея-то хорошая. Но:
1. Реализация идеи в реакте — гвно.
2. Реакт-код фейспука — эталон того, как на реакте писать НЕЛЬЗЯ.Есть куда более эффективные реализации — ivi, inferno, vue.
Из живых безвдомных фреймворков мы по факту имеем только ангуляр, но он СТАНЕТ весьма и весьма эффективным и шустрым только с выходом ivy, но увы, его всё ещё нет.
И офигенный svelte, но с ним совсем другая история.
> И офигенныйвы когда-нибудь перестаните использовать ОФИГЕННЫЕ классные фреймворки? (руководствоваться именно крутостью)
да, да, да -- они все хорошие/быстрые/легковестные/элегантные и т д..
но будьте так любезны -- пожалуйста уместите JS-код своих сайтов в 100kB (включая все зависимости).
ведь не операционную систему пишете, а всего лишь немного нескучной динамики
Вся прелесть Svelte в том, что он собирает на компайл тайме весь код. Получаются небольшие бандлы без притянутого фреймворка в зависимостях. Так что с точки зрения объема js-файла он как раз и офигенный.
WebAssembly тогда зачем!?
В WebAssembly пока не завезли поддержку GC, поэтому скомпилировать JS в WASM нельзя
Там религиозное ограничение - пишите все, кроме GC?
Чтобы скомпилированный JS мог взаимодействовать с обычным, у них должен быть общий GC
> Чтобы скомпилированный JS мог взаимодействовать с обычным, у них должен быть общий GCне обязательно должен. смотря что ты имеешь ввиду под "взаимодействовать".. :-)
возьми к примеру концепцию Worker() в JS -- у двух разных воркеров не обязан быть общий GC -- и они способный взаимодействовать друг с другом (через сообщения и серелизацию).
в Wasm вообще можно (с самой первой версии) вызывать из JS функции бинарника, а из бинарника вызывать функуии JS. чем не взаимодействие? это вполне полно по тьюрингу -- позволяет составлять алгоритмы любой сложности.
> Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для ускорения обработки уже существующего кода на JavaScript.Смотри какое галимое оправдание придумали.
Мне нравится сама технология веб ассембли, но тогда все становится таким же закрытым как и с бинари аст.
С точки зрения пользователя разницы нет - больше нет исходников на клиенте.
Короче очередной костыль, который скорее всего не приживется.
это кого надо костыль, нам похрен, куда он у тебя приживется, но в зад мы его тебе - затолкаем обязательно.
Неподдерживающие чудо-технологию браузеры будут по прежнему показывать пустое место, а не 99% сцайтов на модных фреймворках.
> это кого надо костыль, нам похрен, куда он у тебя приживется, но
> в зад мы его тебе - затолкаем обязательно.
> Неподдерживающие чудо-технологию браузеры будут по прежнему показывать пустое место,
> а не 99% сцайтов на модных фреймворках.ну хз
я кастрировал FF убрал веб сокеты, 3rd-party куки, referer подменяю, оригином режу все что тольо можно
и ничего - всего лишь на 3dnews коменты не показываются - да и хер с ним
всегда найдется тот, кто захочет выставить отсутствие анального зонда как конкурентное преимущество
и я думаю рано или поздно это сработает и эффект будет лавинообразным, все зависит от тупости пользователей, которые рано или поздно прозрееют
например GDPR это положительный звоночек
Монеро майнить. :)Так то эта хрень даже лишина способов самостоятельно взаимодействовать с пользователем,DOM,сетью.
Просто некий абстрактный вычислитель.
Веб и без этого уже дикая смесь. Недалек тот день, когда этот вебмакакный зоопарк настолько заплывет, что придется начинать всё с нуля.
"Электрон" в помощь, облачные, мобильные и десктопные приложения на электроне - платформа будущего.
> "Электрон" в помощьЧтобы "дикая смесь" и "вебмакакный зоопарк" были не только в вебе, но и на десктопе? Даром такое не надо.
самое забавное, что эти дятлы искренне верят в эту херь - в электрон, реакт и другую шнягу
я разок написал плагин на джаве для кордовы, и сделал мобильную версию на ней.
это трешак... просто кусок говна, у меня выбора особо не было (учитывая сроки на несколько платформ) - но я больше в эту жопу не полезу!
а че ты такой нубина и не взял React Native хотябы?
> а че ты такой нубина и не взял React Native хотябы?может быть потому что на момент написания у Cordova была уже далеко не одна стабильная версия?
а это был очередной говно фреймворк косяки и стабильность которого были непонятны
и когда я выпускал приложение об этом говне никто и в помине не знал?
> платформа будущегоантиутопичного.
которое и правда может наступить
Ахахаха, сколько лет 10 правило Гринспена работает и работает.
В том числе и все предыдущие
Зашёл в тред спросить, не в формле ли S-выражений передаётся AST, и наткнулся на ваш комментарий :)
> на 90-97% при включении режима игнорирования неиспользуемых функцийЭто всё, что надо знать о вёб-макаках. 90% функций - оверфакторинг и оверинжиниринг.
> 90% функций - оверфакторинг и оверинжиниринг.Не, это моднявый фреймворк, который макак пока не успел осилить, поэтому юзает оттуда только 2 функции. Когда осилит 3-ю, мода поменяется, и надо будет на другой фреймворк переходить.
С уверенностью могу сказать, что в большинстве случаев как раз таки код фреймворка используется как минимум на условные 80% и больше. А вот гвнокод, который этот дбил нагвнокодил — всё может быть. Конечно, самое очевидное гвно вычистится при сборке, но… А нет, не вичистится, потому что для этого нужно код писать с минимумом зависимостей между функциями и без классов. А большинство макак так не умеют.
Ну конечно же весь код, который ТЫ пишешь, выполняется на первом тике от первого до последнего байта, ну да. Что ещё расскажешь?
Хорошо полыхнуло, жги ещё.
Чего взъелись?Ну выкиньте оптимизацию из линковки сишного или плюсового кода (или посмотрите, сколько процентов функций используется конкретной софтиной в подключенных shared libraries).
Понятно, что нормальные люди используют библиотеки, написанные достаточно универсально, и для каждого частного случая большая часть их возможностей не нужна, а дальше работа тулчейнов это дело вовремя повыбрасывать. В принципе этим и минификаторы занимаются, но предлагаемая штука, в отличие от, существенно менее костыльна.
Отличие как раз в линковке. Когда на языках, которые работают по-другому пишут так, как будто у них линковка есть - это форменный дол**зм.
А правда чего там на 10 Мб кода? Можно переписать на чистом JavaScript все на сотню наверное мегабайт выйдет и то сомневаюсь.
Переписать десять МБ, и получит сто МБ?
Почитайте "Beyond jQuery" by Ray Nicholus.
Вы будете очень удивлены, что нативный JS code в большинстве случаев меньше чем код на jQuery.
> Почитайте "Beyond jQuery" by Ray Nicholus.
> Вы будете очень удивлены, что нативный JS code в большинстве случаев меньше
> чем код на jQuery.а какого года книжка? 2016?
ничего страшного что когда jQuery появился -- в те времена ванильный JS на обладал таким как сейчас -- богатым набором функций и отягощался проблемами кроссбраузерности? :-)
код на jQuery получался маленьким отчасти именно из-за решения тех (прошлых) проблем. и по сути только из-за этого.
> код на jQuery получался маленькимКод вебмакаки на jQuery получается маленьким. Но вебмакака не всегда осознаёт, что в бандл включается ещё и сам немаленький jQuery. А ванильный JS в любом современном браузере уже встроен и ничего лишнего тянуть не надо.
Учитывая популярность jQuery, он у тебя в кэше браузера лежит уже давно и всех возможных версий.
Причём в 100500 экземплярах. Чем не повод добавить ещё один, да?
Немаленький - это килобайт сто, шареные на кучу страниц?
> Тесты кода facebook.com показали, что на разбор JavaScript тратится 10-15% ресурсов CPUХорошо, что хоть понимают, какой гадюшник твариТся в 2019-ном web-е.
Мельком глянул немного сайтов в полной загрузке в Chrome:
habr 5.1 mb
youtube 7.8 mb
aliexpress.com 8.5 mb
amazon.com 9.0 mbПосле лазанья по этим сайтам, заходишь на opennet.ru с его полной загрузкой в 47.7 kb и понимаешь, вот оно, убежище от зомби апокалипсиса.
На эту тему есть отличная статья на том же хабре:
Моё разочарование в софте;
https://habr.com/ru/post/423889/Только и остаётся добавить знаменитую фразу из фильма "Операция "Ы" и другие приключения Шурика"
Ужасные сервисы, зомби апокалипсис, нельзя так делать сайты. А вот вам пару ссылок на материал на них..
Гениальная логика. Ты хочешь сказать, что эти сайты пришли к успеху благодаря нынешнему говняному фронтенду?
с функционалом Опеннета не ясно чего это туда напихали на целых 47.7 кБ
Интересно, разрабы знают о работе Михаэля Франца "Codegeneration On The Fly"? Он и формат придумал, и метод сжатия АСТ и даже плагин для Netscape, где-то в 1995-98 гг...
Байткод? Сначала выпилим из браузеров джаву, а потом запилим обратно.
У меня есть еще более радикальное предложение: а давайте сервер будет обрабатывать вообще все стадии этого жабаскриптоговна, а клиенту отдавать только результат в виде HTML и картинок? WAIT, OH SHI~~~
предлагаю сразу рендерить все на сервере и отдавать в виде какого-нибудь медиа. и не вмешаешься и рекламу хрен вырежишь - просто рай для всяких гуглов и прочих
А не к этому идёт? Просто плавно.
Препарсенный js? Чтоб блокировщиками рекламу не выпиливали?
Няш, а как блокировщик рекламу выпиливает? Расскажи, мне интересно.
И модификацией js тоже.
Ага, а жс он как модифицирует?
https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#...Работу встроенного и переменные - легко.
uBlock, например, инжектит в скрипты в тяжелых случаях. Вот так:
example1.com##+js(abort-current-inline-script.js, parseInt, decodeURIComponent)
example2.com##+js(abort-on-property-write.js, adBlockDetected)
example3.com##+js(set-constant.js, adsBlocked, false)
А сделают ли то же самое с HTML (CSS)?
А можно было просто грохать жс если загрузка АСТ занимает больше 10 сек.
Классный ход! В 2005ом сказали "хватит трахать наши серверы! несите тежеляк на JS клиенту"! В 2019ом кричат "хватит трахать наших клиентов! несите JS обратно на серверы!" =)>>на многих популярных сайтах приближается к 10 Мб
ОПСоСы дерут бабло за траф только в путь - они довольны )
Одно только не понятно - это технологии ради технологий? Абстракции ради абстракций? Что дала эта груда мусора? Вот реально - ради того, чтобы по нажатию кнопочки "ЛАЙК" страница не перезагружалась, нужно тащить в ХТМЛ столько дерьма? А двух строчек не хватит?
И ладно бы - все эти рамкоработы грузились ради совместимости с милионом браузеров (да, меня тоже задалбывало писать три кода вместо одного) - но ведь нет! Сейчас тот же ЖыдХаб не работает с фаерфоксом версии 50x (значит - специально?), всякие сосальные сети примерно так же.
Новый вектор атак
Даёшь ещё больше рекламы за единицу времени! Даёшь более быстрый слив данных на сторону!