Pull to refresh

Comments 28

Вы не учитываете, что Angular, React, Vue не используются в простых веб приложениях, их используют в основном для создания более комплексных веб приложений, и именно поэтому они передают больше данных, а не просто потому, что они являются фреймворками.

Если подобные большие проекты создать на чистом JS, они будут передавать больше данных, чем аналогичные проекты, созданные на фреймворках
и тут на сцену выходит preact который гораздо легче react.

По-моему тут начальные данные не верны, т.к. если система сбора данных, зафиксировала наличие фреймворка [vue, angular, react], то это 9 из 10 spa и сравнивать количество js кода в spa и статичным сайтом не корректно. P.S. 1 из 10 пусть останется за ssr)))

Vue можно использовать для простых формочек, подключив как js-файл. Просто собирать с них данные сразу в массив, валидировать на месте, сколько угодно добавлять поля или целые вкладки.
Совершенно верное замечание, пришла в комментарии написать нечто подобное. Стоит ещё заметить, что якобы «тяжёлые» фреймворки, работающие в концепции SPA, грузят, как правило, «всё и сразу», в то время как «обычному» приложению для того же самого потребуется несколько раз перегрузить страницу. В итоге суммарный трафик может оказаться в разы больше у «обычных» сайтов.

То же касается и времени работы. Вы учитываете только время работы «на клиенте». Понятно, что если фреймворки рендерят страницы в браузере, на это уходит время. А рендер на сервере типа не учитывается. (А пользователю ведь фиолетово кого ждать, браузер или сервер).

Все эти различия проявляются только в процессе взаимодействия приложения с пользователем, а не при анализе типа «загрузили–посмотрели».
То же касается и времени работы. Вы учитываете только время работы «на клиенте». Понятно, что если фреймворки рендерят страницы в браузере, на это уходит время. А рендер на сервере типа не учитывается. (А пользователю ведь фиолетово кого ждать, браузер или сервер).

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

Со сервер ведь и загружен больше.


Настоящая причина ускорения производительности — в сетевом лаге. При полностью клиентском рендере браузер вынужден делать как минимум на 1 запрос больше — надо же ещё и данные получить после загрузки всех скриптов. Плюс отрендеренную сервером страницу можно показать пользователю ещё до загрузки скриптов, это тоже ускорение.

Про загрузку ответил в соседеней ветке: https://habr.com/ru/company/ruvds/blog/499280/#comment_21575252


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

Однако, клиентское устройство одновременно обслуживает одного клиента. А сервер — тысячи.

Это вопрос администрирования сервера в общем и балансировки нагрузки в частности.
Если сервер не перегружен, то упомянутым вами фактом также можно пренебречь — сервер по-прежнему будет рендерить на порядок быстрее.

Нет, вопрос в соотношении дохода от пользователя и расходов на обслуживающие его сервера.

Сможете сделать, произвести замеры и доказать?


Вообще тема интересная и тут есть что пообсуждать, но меня (и еще сотни других людей) напрягает это и поэтому Хабр не место для обсуждения. Если у вас есть на примете более подходящий ресурс — маякните плиз.

пока что Nuxt меня вполне устраивает, не надо воротить просто того что не особо нужно в проекте

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

Это и неудивительно — нельзя сделать JavaScript-фреймворк основой сайта и ожидать того, что объём JS-кода проекта окажется очень низким.

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


Сайты с jQuery выглядят лучше всего. В настольных версиях сайтов они содержат на 15% больше JavaScript, чем все сайты, а в мобильных — на 18% больше.

Учитывая, что jQuery обычно применяется на многостраничных сайтах, то стоит учитывать и объём html, который для каждой страницы может запросто доходить до полумегабайта.

Согласен с автором по поводу распространения JS библиотек. Однако, предложил бы альтернативное пожелание создателям framework'ов:
Я не верю в то, что ограничение функций framework'а даст желаемый результат по увеличению производительности. Убежден, что, как только будут введены ограничения на использования функций(это оптимизация, уменьшением их количества) — сразу же найдутся противники такого подхода, голосующие тем, что либо будут использовать сразу 2 и более framework'ов с взаимодополняющими функциями(это даст обоатный эффект) либо, просто перестанут использовать библиотеку.
Если взять тот же jquery- то, несомненно, люди ее использующие, не берут все возможные функции из библиотеки, а значит б`ольшая часть кода просто лежит и занимает память и трафик. Тут можно спорить будет ли это minified обфускированная версия или цельная, но суть та же. Так вот, почему до сих пор в мире JS никто не использует мобильность?(кроме Node.js конечно)
Почему например, если я хочу использовать только fadeOut() у меня вся библиотека анимации загружается? Модульность, которая используется, скажем во фрагментах(прекомпилированных кусках кода, в Java) могла бы не только снизить трафик и загрузку памяти, но и нагрузку на ЦП, так как были бы уже разжёваны для машины.
Просто пишешь:


Import jquery.animation;


Получаешь функции по анимации.


Import jquery.ajax


Получаешь ajax функции.
Итд.


Либо в параметре к src можно указать


https://cdn.jquery.com/jquery.js?animation=true&ajax=false


Чем не вариант, который и операторов устроит и разработчиков?

Добро пожаловать в мир Tree Shaking в Webpack
Он отличный, не спорю, однако он требует npm. А вот если я пишу только на ванильном JS или вот скажем, пишу extension для Chrome, где у меня выбор либо добавлять jquery в подгрузку, как content_script и потом им пользоваться.
Вот если бы можно было тот же jquery «кушать по частям» — ну было бы круто. И сайты бы быстрее грузились.

JQuery UI поставляется именно таким образом.
Что касается самого JQuery, то есть его облегченная версия JQuery Slim. Уровень модульности не такой, как вы описывате, конечно, но это шаг в этом направлении.

Проблема не в фреймворках, да и jQuery появился не просто так. Это просто эволюция развития, или скажем так выживания браузеров. Когда в Netscape Navigator решили добавить язык, который бы помогал непрограммистам писать код, который бы добавлял динамики HTML страницам. Не буду приводить историю, думаю вы легко найдете статьи, описывающии эту историю. Так вот тогда никто не мог предполагать, к чему мы прийдем сейчас.

В то время, каждый производитель браузеров добавлял свое API, свои спецификации итд. И вот на сегодняшний день мы имеем тормознутое браузерное API, кучу кода для обратной совместимости. Одно наследование на прототипах чего стоит :)

Кстати, фреймворки и jQuery появились не просто так. Это были и есть инструменты, которые позволяют создавать, в первую очередь, удобные абстракции для программистов. Что бы можно было удобно, быстро работать с DOM, шаблонами динамикой итд.

Для тех, кто ругает фреймворки за объем, порог входа итд. Попробуйте запилить приложение на чистом JS. С красивым кодом, без дубликатов и повторений. Уверен, вас ждет неимоверное и увликательное приключение. А в конце вы все равно придете, к своему велосипеду.

За все надо платить. Мы выбираем комфорт и удобство в разработке. А за это мы расплачиваемся производительностью.

К впоросу, а что можно сделать, что бы это исправить.

Не использовать JS — сегодня, это не реально. Врядли заказчики соглясятся выключить динамические ништяки в угоду производительности. Лично я в это не верю.

Не использовать фреймворки — можно, но в конце вы сделаете свой велосипед и не факт, что он будет лучше существующих. А вот цена и время разработки вырастет в разы. И как объяснить заказчику, почему условный Вася из соседней конторки запросил $1K за условный сайт, а вы взяли $10-20K. А результате выйдет одино и то же.

Революция в браузерах — фантастичеко-мифический, я бы сказал, пункт. Переписать DOM API с нуля и выкинуть к черту обратную совместимость. Написать нормально движок для CSS. Выкинуть JS и вместо него добавить Go/Rust (или ваш любимый мега-супер-пупер быстрый язык). Можете добавить еще что нибуть, что считаете нужным :)

Увы, мы сегодня имеем что имеет. Миллионы сайтов уже написаны. Никто их переписывать не будет. Так что остается только опитимизировать фреймворки, оптимизировать свой код. Не добавлять стопиццот зависимостей в проект. Использовать JS там где это необходимо, а не на каждый чих. Ну и верить в чудо :)

Как думаете, webassembly здесь чем-нибудь поможет?

Не думаю, что особо поможет. WASM не панацея. Байт код выполняется в песочнице, как и JS, и так же будет работать с DOM API как и JS. К примеру, JS движок (V8 из хрома) довольно производителен. И если запустить NodeJS (там по умолчанию V8), то можно увидеть, что перфоманс не хуже, чем у Java в некоторых моментах. Т.е на сегодняшний момент JS довольно прилично оптимизирован.

WASM выигрывает только на этапе загрузки. Так как данных надо меньше скачивать по сети. Не требуется парсинг и компилация в байткод, так как скомпилированный байт код уже будет скачен из сервера.

Основная проблема на сегодня, как я уже написал выше — кривое, косое и неудобное DOM API и CSS engine. И пока я не вижу, что может помочь исправить ситуацию.

Что касается JS, то лично мне не нравится наследование на прототипах. Предпочел бы видеть вместо JS Go или Rust. Но это сугубо лично мое мнение и я его ни в коем случае, никому не навязываю.

Так что, поживем посмотрим. Возможно нас еще удивят :)
Зато шаблонизацией и простыми вычислениями теперь занимается не сервер, а клиент. Помимо экономии ресурсов сервера, имеем экономию трафика обеими сторонам (данные вместо готовой разметки), времени загрузки новых данных и много чего еще.
Да здравствует WebAssembly?
Ну и Blazor как конкретная реализация для моего стека технологий .NET
Отличная статья! Можно сказать что с языка снято.

JS-фреймворки — это очень удобно для разработчика, но за это удобство расплачивается пользователь.

Я для себя решил отказаться от всех фреймворков для сайта который виден «наружу», и Angular для админки, которой пользуется ограниченный круг людей. Между прочим, Яндекс не умеет индексировать SPA сайты, так что делать с таким подходу что-то что должно отображаться в поиске — так себе затея.

По поводу JQuery — его популярность сейчас обусловлена еще тем что Bootstrap основан на нем и не работает иначе. А Bootstrap очень популярен сам по себе.

Привет. Я из будущего. У меня для вас хорошие новости про Bootstrap :)

статистика расписана красиво, но всё это бесполезно, если исходные данные ошибочны.

Сравнивать лэндинг на jquery и полноценное приложение на angular — несколько странно. Это выглядит как анализ средней длины конечностей у людей, вот только половина опрашиваемых, как оказалось, нарушали ТБ на пилораме, а ещё часть — вообще дети.
Sign up to leave a comment.