The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Cloudflare, Mozilla и Facebook развивают BinaryAST для ускорения загрузки JavaScript

17.05.2019 20:13

Инженеры из компаний Cloudflare, Mozilla, Facebook и Bloomberg предложили новый формат BinaryAST для ускорения доставки и обработки JavaScript-кода при открытии сайтов в браузере. BinaryAST выносит фазу синтаксического разбора на сторону сервера и поставляет уже сформированное абстрактное синтаксическое дерево (AST). При получении BinaryAST браузер сразу может перейти на стадию компиляции, минуя парсинг исходного кода JavaScript.

Для тестирования подготовлена эталонная реализация, поставляемая под лицензий MIT. Для парсинга используются компоненты Node.js, а код для оптимизации и формирования AST написан на языке Rust. На стороне браузера поддержка BinaryAST уже доступна в ночных сборках Firefox. Кодировщик в BinaryAST может применяться как на уровне инструментария конечного сайта, так и для упаковки скриптов внешних сайтов на стороне прокси или сети доставки контента. В настоящее время уже начался процесс стандартизации BinaryAST рабочей группой ECMA TC39, после завершения которого формат сможет сосуществовать с существующими методами сжатия отдаваемого контента, такими как gzip и brotli.

Значительное время при обработке JavaScript занимает фаза загрузки и синтаксического разбора кода. С учётом того, что объём загружаемого JavaScript на многих популярных сайтах приближается к 10 Мб (например для LinkedIn - 7.2 Мб, Facebook - 7.1 Мб), первичная обработка JavaScript вносит существенную задержку. Стадия парсинга на стороне браузера также замедляется из-за невозможности полноценного построения AST на лету по мере загрузки кода (браузеру приходится ожидать завершения загрузки блоков, например конца функций, для получения недостающей для разбора текущих элементов информации).

Частично проблему пытаются решить через распространение кода в минимизированном и сжатом виде, а также при помощи кэширования браузером сгенерированного байткода. На современных сайтах код обновляется достаточно часто, поэтому кэширование лишь частично решает проблему. Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для ускорения обработки уже существующего кода на JavaScript.

Другим вариантом является доставка готового скомпилированного байткода вместо JavaScript-скриптов, но разработчики браузерных движков выступают против, так как сторонний байткод трудно верифицировать, его прямая обработка может привести к расслоению Web, возникают дополнительные угрозы безопасности и требуется разработка формата универсального байткода.

BinaryAST позволяет вписаться в текущую модель разработки и доставки кода без создания нового формата байткода и без изменения языка JavaScript. Размер данных в формате BinaryAST сопоставим со сжатым минифицированным JavaScript-кодом, а скорость обработки за счёт исключения фазы парсинга исходных текстов заметно увеличивается. Также формат BinaryAST позволяет выполнять компиляцию в байткод по мере загрузки, не ожидая завершения получения всех данных. Более того, парсинг на стороне сервера позволяет исключить из отдаваемого представления BinaryAST неиспользуемые функции и лишний код, на который при парсинге на стороне браузера тратится время, как на разбор, так и на передачу лишнего трафика.

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

Тесты кода facebook.com показали, что на разбор JavaScript тратится 10-15% ресурсов CPU и на парсинг уходит больше времени, чем на генерацию байткода и начальное формирование кода для JIT. В движке SpiderMonkey время полного построения AST занимает 500-800 мс и применение BinaryAST позволило сократить этот показатель на 70-90%. В целом, для большинства web-фреймворков при применении BinaryAST время парсинга JavaScript сокращается на 3-10% в режиме без оптимизации и на 90-97% при включении режима игнорирования неиспользуемых функций. При выполнении тестового JavaScript-набора, размером 1.2 Мб, применение BinaryAST позволило ускорить время начала запуска с 338 до 314 мс на настольной системе (Intel i7) и с 2019 до 1455 мс на мобильном устройстве (HTC One M8).

  1. Главная ссылка к новости (https://blog.cloudflare.com/bi...)
  2. OpenNews: Представлен Lucet, компилятор для WebAssembly
  3. OpenNews: Mozilla развивает WASI для использования WebAssembly вне браузера
  4. OpenNews: Запуск WebAssembly runtime как модуля ядра Linux
  5. OpenNews: Сравнение производительности различных реализаций WebAssembly
  6. OpenNews: Google прекращает поддержку Portable Native Client в пользу WebAssembly
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: binaryast, javascript, web
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (110) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (1), 20:33, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +28 +/
    Идея хорошая а ситуация страшная
     
     
  • 2.43, VINRARUS (ok), 01:21, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    WEB хомяки всё никак не могут пережыть смерть FLASH.
    Теперь решыли из JS сделать недоступную для разбора человеком проприетарщину.
     
     
  • 3.48, axredneck (?), 02:10, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    При желании из JS можно сделать недоступную для разбора человеком проприетарщину, которая все еще будет JS, достаточно удалить комментарии, пробелы, отступы и переносы и заменить все идентификаторы их хэшами.
     
  • 3.102, хомяк (?), 01:22, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а ты опенсорсный пёс, сидишь и разбираешь каждый скрипт на каждом сайте?
     
  • 2.75, Аноним (75), 13:04, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Бинарный интернет на марше
     
     
  • 3.87, forum reader (?), 16:19, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Вот что страшно:

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

     
     
  • 4.114, KonstantinB (ok), 18:53, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Для Typescript-а, который становится все популярнее, это вполне выход.

    Уже есть AssemblyScript, кстати.

     

  • 1.2, Аноним (2), 20:34, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    Веб постепенно улучшается, оптимизируется, и это действительно круто
     
     
  • 2.5, НяшМяш (ok), 20:43, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +23 +/
    Чего только не изобретут, чтобы не писать натив... В вебе нужен только текст, опционально с картинками.
     
     
  • 3.51, anonimbl (?), 06:24, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Мне такой веб не нужен.
     
     
  • 4.62, Аноним (62), 11:13, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +11 +/
    А какой нужен, свистопердящий рекламными вставками?
     
     
  • 5.100, IRASoldier (?), 23:45, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    С возможностью интерактивного взаимодействия с текстом, картинками и мультимедиа. Так понятнее?
     
     
  • 6.105, Me (??), 07:22, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    HTML это и есть интерактивный текст. А уж сколько интерактива сейчас позворяет навесить css...
     
     
  • 7.109, IRASoldier (?), 11:46, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Тем не менее JS юзается вовсе не от неумения в СSS и по большей части не для рекламы.
     
  • 4.73, Наноним (?), 12:58, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Кажись, это дитя ютуба, которое с горем пополам умеет читать.
    А какой веб тебе нужен, можешь сформулировать?
     
  • 2.24, Sw00p aka Jerom (?), 21:38, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ага, сначала думали все перекинуть на сторону клиента (всякие там SPA), а теперь обратно на сторону сервера, и до коли эти скачки будут продолжаться?
     
     
  • 3.35, Sgt. Gram (?), 23:20, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > до коли

    Может, до пети?

     
     
  • 4.39, Sw00p aka Jerom (?), 00:17, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Может, до пети?

    да хоть до лампочки, каждому своё


     
  • 3.63, nrv (ok), 11:15, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Мне сначала показалось странным, что ресурсоемкую операцию переносят на сторону сервера, совокупная мощность клиентов несоизмеримо больше, как мне кажется (запросы от которых сервак обрабатывает в данный момент), и экономически нецелесообразно.. но, по идее, на серваке как раз фаза разбора будет происходить один раз при выкате новой версии сервиса.. тогда это очень логично, нагрузка не возрастет вообще.
     
     
  • 4.76, Sw00p aka Jerom (?), 13:14, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Может стоит задуматься об избавлении от идеи что-либо парсить или "разбирать", и самое главное от всяких "скачек". Гугл ещё не избавился от идеи все делать за нас?
     
  • 4.86, Sw00p aka Jerom (?), 15:53, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дополню немного хочу отметить, что и на серваке этого происходить не должно, а г... текст свёрнут, показать
     
     
  • 5.106, Илья (??), 07:44, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Обожаю длительные неуместные сравнения
     
     
  • 6.111, Sw00p aka Jerom (?), 14:11, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Таки дочитали до конца)))
     
  • 4.89, Гентушник (ok), 16:48, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > ресурсоемкую операцию переносят на сторону сервера

    Всё просто. Раньше были только десктопы, а теперь внушительную (если не бОльшую) часть траффика составляют мобилки, которые сейчас конечно уже достаточно мощные, но всё же не настолько как десктопы.

     
  • 2.34, Аноним (34), 23:10, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это примерно как убрать огнетушитель, чтобы вместить в коридор еще одного человека.
    Строители знали об этом грязном способе заранее и конечно, оценив преимущества и недостатки не сделали это.
    Теперь вы убираете огнетушитель и называете это развитием коридора!
    Более того - байткод(даже не АСТ) передавались примерно в то же время когда и ява скрипт развивался.
     
     
  • 3.107, Илья (??), 07:51, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Это примерно как убрать огнетушитель,

    Это как бы если Лупа пришёл в магазин к Пупе, а Пупа заплатил за его покупки.

     
  • 2.36, Аноним (36), 23:23, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Веб это легаси зоопарк костылей и велосипедов все что в вашем браузере это Draft на краю технологий плоской земли.
     
  • 2.53, Аноним (53), 09:22, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Все бы эти оптимизации да 15 лет назад. Сейчас с доступными оптоволоконным интернетом, 16-ядерными процессорами и сотнями гигов оперативки - вообще как-то плевать.
     

  • 1.3, Аноним (3), 20:35, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Опять перестановка кроватей по просьбе уважаемых людей.
     
  • 1.6, Аноним (6), 20:53, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    хотят прятать js-код
    это первый шаг
     
     
  • 2.17, имя (?), 21:06, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Это шаг четвёртый или пятый (после минификации исходников, компиляции из очередного лиспа в JS или asm.js и внедрения WASM) и — в контексте прятки кода — абсолютно бестолковый.

    Короче, с разморозкой.

     

  • 1.7, Аноним (7), 20:53, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    >BinaryAST позволило ускорить время начала запуска с 338 до 314 мс на настольной системе

    Прирост 7,6% - им кажется, что поймали слона за хобот.

     
     
  • 2.78, Аноним (78), 14:09, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Курочка по зернышку, в переводе не понятно, что конкретно меряли, если это время с момента попытки установки соединения и до начала работы js в браузере - то 10% прироста это очень много. Так как там надо сначала html прогрузить и распарсить, потом js вытянуть и распарсить, не все это хорошо параллелится и оптимизируется, не понятно используется ли при этом http2 server push, который дал бы ещё ускорения за счет параллельности обработки страницы.
     

  • 1.8, Timur Davletshin (?), 20:53, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Копирасты и веб-макаки будут рады — первые из-за того, что идея открытости исходников JS убивается, а вторые из-за того, что их страдания никто не увидит.
     
     
  • 2.9, native76 (ok), 20:56, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    именно
    под благовидным предлогом делают шаг в сторону закрытости
     
     
  • 3.15, Timur Davletshin (?), 21:03, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Народ схавает. Ему на открытость наплевать. Сейчас большая часть использует не сайты, где хоть какая-то возможность аудита производимых действий сохраняется, а через бинарное приложение из маркета.
     
  • 3.19, имя (?), 21:10, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Все шаги уже давно сделаны любителями развесистых фреймворков и шаблонизаторов на стороне клиента, а также минификации исходников и деплоймента каждые две минуты. Уже давно не осталось актуальных сайтов с JS, где можно было бы с пользой прочитать исходники. Не понимаю этого нытья, всё ж давно уже просрано.
     
  • 2.13, Аноним (13), 21:01, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Во-первых, исходники как были, так и остались, просто формат бинарный. И достать их намного легче, чем из того же байткода C#, python или Java (которые превосходно декомпилируются), потому что байткод - это не AST, а именно байткод, его ещё декомпилировать надо, а тут - всего лишь распарсить.
     
     
  • 3.16, Timur Davletshin (?), 21:05, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Обфусцированный код тоже можно распарсить, но это адовый ад и свинство.
     
     
  • 4.44, Аноним (13), 01:24, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Речь не об обфускации идёт (кстати, обфускация
    JS при желании довольно легко снимается). Это скорее аналог минификации, причём нехардкорной, как делает Closure Compiler (и код всё-равно прекрасно понимаем, делюсь даже лайфхаком - хардкорно-обфусфированный код не мешает пропустить через CC на уровне ADVANCED - значительная часть обфускаций будет выоптимизирована символьным движком к чертям собачьим), снимающейся простым автоформатировщиком кода.
     
     
  • 5.56, robot228 (?), 10:06, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сними пожалуйста вот тут у  банка https://habr.com/ru/company/group-ib/blog/416453/#comment_18864931
     
     
  • 6.115, Аноним (13), 19:13, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я даже смотреть в ту сторону не буду: вы знаете, что даже мысль в сторону, противоположную стороне интересов СБ и/или владельцев банков (особенно того самого, у которого владелец печально известен сутяжничеством с разными пользователями инета) в России наказуема. По крайней мере на Хабре несколько раз читал от разных комментаторов слухи и сплетни о том, как разных обсуждальщиков банковской небезопасности на форумах уголовно покарали за одно высказывание идеи. Так что я даже смотреть это не буду.
     
     
  • 7.117, robot228 (?), 23:33, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Я даже смотреть в ту сторону не буду: вы знаете, что даже
    > мысль в сторону, противоположную стороне интересов СБ и/или владельцев банков (особенно
    > того самого, у которого владелец печально известен сутяжничеством с разными пользователями
    > инета) в России наказуема. По крайней мере на Хабре несколько раз
    > читал от разных комментаторов слухи и сплетни о том, как разных
    > обсуждальщиков банковской небезопасности на форумах уголовно покарали за одно высказывание
    > идеи. Так что я даже смотреть это не буду.

    Что, даже одним глазком не взглянешь?
    Для себя то можно попробовать снять.

     
  • 3.29, Аноним (34), 22:59, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    -Давайте сделаем построение синтаксического дерева заранее?
    -А давайте и машинные команды абстрактного процессора заранее напишем?
    -Да не, ты чего, синтаксическое дерево это ж как исходники. Его только распарсить.
    ...И превратить в байт код, а потом в машиные коды и выполнить.
    AST это далеко не исходники. Зато имея байт код легко получить аналогичный AST, получив при этом еще больше ускорения.
    Вы уж определитесь что вы хотите - либо человекочитаемый код и тогда к черту все эти минимизаторы, фреймворки и все все все, либо заменяйте браузеры на QML клиенты.
     
     
  • 4.45, Аноним (13), 01:31, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    AST - это исходники без мусора. Из байт-кода можно получить AST, но не всегда - можно сварганить байткод, который в языке вооще не выражается, и тем не менее, работает. А вот из AST однозначно получается байт-код.

    >Вы уж определитесь что вы хотите - либо человекочитаемый код и тогда к черту все эти минимизаторы, фреймворки и все все все, либо заменяйте браузеры на QML клиенты.

    AST и есть чаловекочитаемый код. Все чужые коды перед прочтением пропускаю через автоформатировщик. Результат автоформатирвания AST и исходника одинаков, ибо качественные автоформатировщики обычно сначала читают код в AST, а потом AST дампят в код.

     
     
  • 5.64, Аноним (34), 11:26, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Все так. Это практически не противоречит моему комментарию.
    Разве что "Из байт-кода можно получить AST, но не всегда - можно сварганить байткод, который в языке вооще не выражается, и тем не менее, работает", но тут вы правы.
     
  • 3.59, Аноним (59), 10:36, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Во-первых, исходники как были, так и остались

    А зачем эти исходники нужны, "человекам на посмотреть"? Так для человека жестко обфускированный и оптимизированный JS будет не сильно легче того же байткода WebAssembly, в который можно было бы перегнать исходники JS. А для машин и алгоритмов (каких-нибудь, "веб-антивирусов") что AST, что байткод - одночленственно.

     

  • 1.10, Аноним (10), 20:57, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Что только не придумают - что бы впихнуть юзеру скрипты , обойдя блокировщики рекламы ...
     
     
  • 2.18, Аноним (7), 21:08, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    +1 Да и это ещё. Плюс майнеры прятать станет легче.
     
     
  • 3.66, Xasd5 (?), 11:40, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    это почему вдруг легче?

    майнеры перестанут нагревать процессор и тормозить? :-)

    или ты по исходному году майнеры распозновал? (пофигу если ноутбук перегревается от какого-то сайта -- главное что в его исходном коде ты майнера не обнаружил -- да? так?:))

     
     
  • 4.69, Аноним84701 (ok), 12:12, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > это почему вдруг легче?
    > майнеры перестанут нагревать процессор и тормозить? :-)

    С разморозкой!
    Современные майнеры вполне выставляются на 15-20%, что в современном вебе никого не удивит.
    https://github.com/cazala/coin-hive
    > --throttle        The fraction of time that threads should be idle

    Следующий логичный шаг, по примеру мальвари: поиск и удаление скриптов конкурентов :)

     
     
  • 5.70, Xasd5 (?), 12:26, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> это почему вдруг легче?
    >> майнеры перестанут нагревать процессор и тормозить? :-)
    > С разморозкой!
    > Современные майнеры вполне выставляются на 15-20%, что в современном вебе никого не
    > удивит.
    > https://github.com/cazala/coin-hive
    >> --throttle        The fraction of time that threads should be idle

    во первый 20% уже слегка нагревает ноутбук (не так быстро как 100%, в 5 раз медленее, но уже неприятно и заметно)..

    и 20% хорошо было бы видно глазами на индикаторе нагрузки -- будь этот индикатор на каждой вкладке..

    во вторых -- если майнеры ЯКОБЫ такие безобидные для тебя (предположим тебе пофигу на 20% CPU) -- то на кой фиг ты вообще их хочешь находить-и-отключать? аааАА?

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

    логика?! понимаешь?

     
     
  • 6.71, Аноним84701 (ok), 12:37, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > во первый 20% уже слегка нагревает ноутбук (не так быстро как 100%,
    > в 5 раз медленее, но уже неприятно и заметно)..

    Ага, "очень заметно" по сравнению с любым из современных "тяжелых" сайтов. Любой пользователь прям влет замечает, особенно на консумерских ноутах, с их "альтернативным" теплоотводом.
    > в 5 раз медленее

    Ну да, точки кипения достигнет в 5 раз медленнее, ага. </сарказм>

    > во вторых -- если майнеры ЯКОБЫ такие безобидные для тебя (предположим тебе
    > пофигу на 20% CPU) -- то на кой фиг ты вообще их хочешь находить-и-отключать? аааАА?
    > ты так говоришь будто "майнер плохо -- потому что он крадёт деньги

    ...
    > логика?! понимаешь?

    Сам что-то придумал, сам же и опроверг.
    Причем тут логика - непонятно.

     
     
  • 7.79, Xasd5 (?), 14:12, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ага, "очень заметно" по сравнению с любым из современных "тяжелых" сайтов. Любой

    и что -- если сайт тормозит-и-нагревает потому что он тяжёлый -- тебя устраивает?

    а если сайт тормозит-и-нагревает (не более, так же) -- потому что там майнер -- тебе уже не устраивает?

    тебе как пользователю какая нахрен разница какова причина нагревания-и-тормозов?

    майнер который не нагревает и не тормозит -- почему ты хочешь обнаруживать? ЗАЧЕМ? ДЛЯ КАКОЙ ЦЕЛИ? ЧТО ХОЧЕШЬ ДОБИТЬСЯ его отключением? какую выгоду для себя преследуешь?

     
  • 7.81, Xasd5 (?), 14:30, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Сам что-то придумал, сам же и опроверг.
    > Причем тут логика - непонятно.

    если для тебя это сложно -- давай перейдём на аналогии:

    диалог:

    A: когда переходишь дорогу, тебя может сбить автомобиль! ПОЭТОМУ нужно РАСПОЗНОВАТЬ автомобили! но как это сделать если вдруг автомобили станут выглядеть подругому, не как щаз? это проблема!

    B: но ведь можно просто посмотреть что какой-то ДВИЖУЩИЙСЯ (и шумящий) предмет едит на тебя! наверняка это и будет автомобиль! так можно распознать опасность сбивания.

    А: НЕТ! этот способ не пройдёт! потому что некоторые водители едут очень МЕДЛЕННО (и почти безшумно), издалека вобще будет выглядеть будто автомобиль стоит на месте. так что твой способ распознования автомобилей не подходит.

    (а ничего страшного -- если тебя собъёт самокат а не автомобмиль? распознование опасности самокатов ты будешь решать отдельной задачей?:))

     
     
  • 8.85, Аноним84701 (ok), 14:46, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Перейди для начала на внимательное прочтение перед ответом Без приписывания дру... текст свёрнут, показать
     
     
  • 9.99, Xasd (ok), 23:18, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    хочешь сказать что в этом предложении якобы НЕ было намёка о том что майнеры пл... текст свёрнут, показать
     
  • 2.101, IRASoldier (?), 23:48, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Будут новые блокировщики, заточенные под блокировку исполнения бинарей на стороне клиента, тоже мне проблема...
     

  • 1.11, Аноним (13), 20:58, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    На самом деле идея очевидная и у меня была в намного более расширенном виде. А именно - хранить все исходники в виде графа в VCS. Плюсы - оформление не хранится, места не занимает, в диффы искажения не вносит. Можно гра\W менять имена символов в коммитах. Можно делать слияние на уровне AST. Джва года (на самом деле как минимум вдвое больше) жду такую vcs.
     
     
  • 2.22, Аноним (22), 21:30, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты не понял, для чего нужна VCS.
     
     
  • 3.46, Аноним (13), 01:34, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Нет, это ты не осознал суть VCS. Важнейшая функция VCS - эть слияние. И на уровне текста слияние некачественное. некстген будет юзать AST, а old-gen отомрёт.
     
     
  • 4.61, Аноним (61), 11:10, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ты и суть разработки ещё не понял, студент. Ничего, с опытом поймёшь.
     
  • 4.65, Аноним (34), 11:28, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Т.е. ты предлагаешь наплевать на комментарии, названия переменных, документацию в коде, оставить только AST и положиться на то, что все компиляторы генерируют одинаковый AST?
     
     
  • 5.90, Аноним (90), 16:54, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А ты, видимо, никогда не видел аст и не знаешь, что это такое. Потому что сферическивакуумный аст по дефолту включает ВСЁ — вплоть до колонок и столбцов в исходниках. В оп-посте грицца про про аст, из которого пострипали всё некритичное для выполнения (координаты нод, каменты). Анон (или кто он там) выше говорит про аст, в котором нет ТОЛЬКО координат нод.
     

  • 1.12, Timur Davletshin (?), 20:59, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +13 +/
    Linkedin и новый Gmail — это замечательные примеры того, как делать не надо писать. Что там в мордокниге — ХЗ, не пользуюсь, но по 7 мегам скриптов можно только догадываться о  степени корявости и перегруженности.
     
     
  • 2.30, цукерг (?), 23:00, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что там в мордокниге

    абсолютно идиотская идея дублировать dom

     
     
  • 3.91, Аноним (90), 17:07, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Идея-то хорошая. Но:
    1. Реализация идеи в реакте — гвно.
    2. Реакт-код фейспука — эталон того, как на реакте писать НЕЛЬЗЯ.

    Есть куда более эффективные реализации — ivi, inferno, vue.

    Из живых безвдомных фреймворков мы по факту имеем только ангуляр, но он СТАНЕТ весьма и весьма эффективным и шустрым только с выходом ivy, но увы, его всё ещё нет.

    И офигенный svelte, но с ним совсем другая история.

     
     
  • 4.113, Xasd (ok), 18:32, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > И офигенный

    вы когда-нибудь перестаните использовать ОФИГЕННЫЕ классные фреймворки? (руководствоваться именно крутостью)

    да, да, да -- они все хорошие/быстрые/легковестные/элегантные и т д..

    но будьте так любезны -- пожалуйста уместите JS-код своих сайтов в 100kB (включая все зависимости).

    ведь не операционную систему пишете, а всего лишь немного нескучной динамики

     

  • 1.14, Аноним (14), 21:02, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    WebAssembly тогда зачем!?
     
     
  • 2.27, Аноним (27), 22:34, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В WebAssembly пока не завезли поддержку GC, поэтому скомпилировать JS в WASM нельзя
     
     
  • 3.31, Аноним (34), 23:01, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Там религиозное ограничение - пишите все, кроме GC?
     
     
  • 4.40, Аноним (40), 01:05, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чтобы скомпилированный JS мог взаимодействовать с обычным, у них должен быть общий GC
     
     
  • 5.72, Xasd5 (?), 12:42, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Чтобы скомпилированный JS мог взаимодействовать с обычным, у них должен быть общий GC

    не обязательно должен. смотря что ты имеешь ввиду под "взаимодействовать".. :-)

    возьми к примеру концепцию Worker() в JS -- у двух разных воркеров не обязан быть общий GC -- и они способный взаимодействовать друг с другом (через сообщения и серелизацию).

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

     
  • 2.41, вот такая вот куйня (?), 01:07, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для ускорения обработки уже существующего кода на JavaScript.

    Смотри какое галимое оправдание придумали.

    Мне нравится сама технология веб ассембли, но тогда все становится таким же закрытым как и с бинари аст.

    С точки зрения пользователя разницы нет - больше нет исходников на клиенте.

    Короче очередной костыль, который скорее всего не приживется.

     
     
  • 3.58, гуглебук (?), 10:34, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    это кого надо костыль, нам похрен, куда он у тебя приживется, но в зад мы его тебе - затолкаем обязательно.
    Неподдерживающие чудо-технологию браузеры будут по прежнему показывать пустое место, а не 99% сцайтов на модных фреймворках.

     
  • 2.52, КО (?), 08:56, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Монеро майнить. :)

    Так то эта хрень даже лишина способов самостоятельно взаимодействовать с пользователем,DOM,сетью.
    Просто некий абстрактный вычислитель.

     

  • 1.20, Аноним (20), 21:13, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Веб и без этого уже дикая смесь. Недалек тот день, когда этот вебмакакный зоопарк настолько заплывет, что придется начинать всё с нуля.
     
     
  • 2.26, Аноним (7), 22:09, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • –8 +/
    "Электрон" в помощь, облачные, мобильные и десктопные приложения на электроне - платформа будущего.
     
     
  • 3.32, Аноним (32), 23:06, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > "Электрон" в помощь

    Чтобы "дикая смесь" и "вебмакакный зоопарк" были не только в вебе, но и на десктопе? Даром такое не надо.

     
     
  • 4.42, вот такая вот куйня (?), 01:11, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    самое забавное, что эти дятлы искренне верят в эту херь - в электрон, реакт и другую шнягу
    я разок написал плагин на джаве для кордовы, и сделал мобильную версию на ней.
    это трешак... просто кусок говна, у меня выбора особо не было (учитывая сроки на несколько платформ) - но я больше в эту жопу не полезу!
     
     
  • 5.103, хомяк (?), 01:29, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    а че ты такой нубина и не взял React Native хотябы?
     
  • 3.83, Xasd5 (?), 14:36, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > платформа будущего

    антиутопичного.

    которое и правда может наступить

     

  • 1.25, Урри (?), 21:56, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ахахаха, сколько лет 10 правило Гринспена работает и работает.
     
     
  • 2.33, Аноним (33), 23:08, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В том числе и все предыдущие
     
  • 2.37, Аноним (37), 23:25, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зашёл в тред спросить, не в формле ли S-выражений передаётся AST, и наткнулся на ваш комментарий :)
     

  • 1.28, Онаним (?), 22:42, 17/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > на 90-97% при включении режима игнорирования неиспользуемых функций

    Это всё, что надо знать о вёб-макаках. 90% функций - оверфакторинг и оверинжиниринг.

     
     
  • 2.38, Аноним (61), 23:26, 17/05/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > 90% функций - оверфакторинг и оверинжиниринг.

    Не, это моднявый фреймворк, который макак пока не успел осилить, поэтому юзает оттуда только 2 функции. Когда осилит 3-ю, мода поменяется, и надо будет на другой фреймворк переходить.

     
     
  • 3.93, Аноним (90), 17:16, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С уверенностью могу сказать, что в большинстве случаев как раз таки код фреймворка используется как минимум на условные 80% и больше. А вот гвнокод, который этот дбил нагвнокодил — всё может быть. Конечно, самое очевидное гвно вычистится при сборке, но… А нет, не вичистится, потому что для этого нужно код писать с минимумом зависимостей между функциями и без классов. А большинство макак так не умеют.
     
  • 2.92, Аноним (90), 17:12, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну конечно же весь код, который ТЫ пишешь, выполняется на первом тике от первого до последнего байта, ну да. Что ещё расскажешь?
     
     
  • 3.96, Онаним (?), 21:57, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошо полыхнуло, жги ещё.
     

  • 1.50, Аноним (50), 04:32, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А правда чего там на 10 Мб кода? Можно переписать на чистом JavaScript все на сотню наверное мегабайт выйдет и то сомневаюсь.
     
     
  • 2.55, Владимир (??), 10:03, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Переписать десять МБ, и получит сто МБ?
     
     
  • 3.82, OpenEcho (?), 14:32, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Почитайте "Beyond jQuery" by Ray Nicholus.
    Вы будете очень удивлены, что нативный JS code в большинстве случаев меньше чем код на jQuery.
     
     
  • 4.84, Xasd5 (?), 14:41, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Почитайте "Beyond jQuery" by Ray Nicholus.
    > Вы будете очень удивлены, что нативный JS code в большинстве случаев меньше
    > чем код на jQuery.

    а какого года книжка? 2016?

    ничего страшного что когда jQuery появился -- в те времена ванильный JS на обладал таким как сейчас -- богатым набором функций и отягощался проблемами кроссбраузерности? :-)

    код на jQuery получался маленьким отчасти именно из-за решения тех (прошлых) проблем. и по сути только из-за этого.

     
     
  • 5.88, НяшМяш (ok), 16:20, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > код на jQuery получался маленьким

    Код вебмакаки на jQuery получается маленьким. Но вебмакака не всегда осознаёт, что в бандл включается ещё и сам немаленький jQuery. А ванильный JS в любом современном браузере уже встроен и ничего лишнего тянуть не надо.

     
     
  • 6.97, Твой ночной кошмар (?), 22:26, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Учитывая популярность jQuery, он у тебя в кэше браузера лежит уже давно и всех возможных версий.
     
     
  • 7.108, Аноним (61), 10:28, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Причём в 100500 экземплярах. Чем не повод добавить ещё один, да?
     

  • 1.54, Мексиканец (?), 10:02, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > Тесты кода 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/

    Только и остаётся добавить знаменитую фразу из фильма "Операция "Ы" и другие приключения Шурика"

    https://www.youtube.com/watch?v=WqDegB1Q_b0

     
     
  • 2.60, Сергей (??), 10:44, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ужасные сервисы, зомби апокалипсис, нельзя так делать сайты. А вот вам пару ссылок на материал на них..
     
     
  • 3.104, Наноним (?), 02:15, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Гениальная логика. Ты хочешь сказать, что эти сайты пришли к успеху благодаря нынешнему говняному фронтенду?
     

  • 1.57, Mykhayl (?), 10:34, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Интересно, разрабы знают о работе Михаэля Франца "Codegeneration On The Fly"? Он и формат придумал, и метод сжатия АСТ и даже плагин для Netscape, где-то в 1995-98 гг...
     
  • 1.67, anonymous (??), 11:42, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Байткод? Сначала выпилим из браузеров джаву, а потом запилим обратно.
     
  • 1.68, Ретроград (?), 11:48, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    У меня есть еще более радикальное предложение: а давайте сервер будет обрабатывать вообще все стадии этого жабаскриптоговна, а клиенту отдавать только результат в виде HTML и картинок? WAIT, OH SHI~~~
     
     
  • 2.74, Аноним (74), 13:04, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    предлагаю сразу рендерить все на сервере и отдавать в виде какого-нибудь медиа. и не вмешаешься и рекламу хрен вырежишь - просто рай для всяких гуглов и прочих

     
     
  • 3.80, Аноним (80), 14:21, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А не к этому идёт? Просто плавно.
     

  • 1.77, Аноним (77), 13:33, 18/05/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Препарсенный js? Чтоб блокировщиками рекламу не выпиливали?
     
     
  • 2.94, Аноним (90), 17:19, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Няш, а как блокировщик рекламу выпиливает? Расскажи, мне интересно.
     
     
  • 3.95, Аноним (77), 21:10, 18/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    И модификацией js тоже.
     
     
  • 4.112, Аноним (90), 17:37, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, а жс он как модифицирует?
     
     
  • 5.116, Аноним (77), 20:01, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#scriptlet-injectio

    Работу встроенного и переменные - легко.

     
  • 3.110, Аноним (110), 13:00, 19/05/2019 [^] [^^] [^^^] [ответить]  
  • +/
    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)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    MIRhosting
    Fornex
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру