Тёмный

Оптимизация Frontend приложений (23 совета) | Оптимизация Web, полный курс 2024 [для новичков] 

Какие-то уроки
Подписаться 15 тыс.
Просмотров 13 тыс.
50% 1

Опубликовано:

 

19 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 85   
@NikitaShmidt-v4f
@NikitaShmidt-v4f Месяц назад
Привет, спасибо за видео, насчёт первого пункта не согласен. Ты скорее всего взял изображение пнг для сравнение без сжатия, пнг намного лучше как мне кажется сжимается, и при сжатии пнг размер у него все же меньше чем у вебп. Для сжатия пнг юзаю tinyjpg, как и говорил ранее размер все же меньше чем при сжатии webp
@kakieToYroki
@kakieToYroki Месяц назад
Так я изначально и webp взял без сжатия. По поводу того, что из них лучше сжимается, проверю чуть позже. Но обычно вебп всегда сжималось лучше. В общем, потестирую чуть позже :)
@kakieToYroki
@kakieToYroki Месяц назад
Потестировал и да, во многих ситуациях png, действительно, сжимается намного лучше. Спасибо за комментарий
@eobardmeef8166
@eobardmeef8166 Месяц назад
Смотрю ваш канал уже несколько дней, по плейлистам с нуля научился верстать макет практически любой сложности, сейчас почти изучил основы js. Дай бог вам здоровья за ваш труд. Нет слов описать благодарность, я очень вами восхищен)
@ruslanryapov6221
@ruslanryapov6221 Месяц назад
Пожалуй, самый полезный контент за последнее время! Продолжай в том же духе! Комьюнити будет тебе благодарно)
@svet0v
@svet0v Месяц назад
Тут даже и не для новичков много полезного, лайк однозначно
@gabblz480
@gabblz480 Месяц назад
и полного бреда
@svet0v
@svet0v Месяц назад
@@gabblz480 почему бреда?
@INetreba
@INetreba Месяц назад
Удивительное качество контента! Спасибо
@kakieToYroki
@kakieToYroki Месяц назад
Бешеная активность, обязательно сниму вторую часть :)
@SerzhNesteruk
@SerzhNesteruk Месяц назад
Будем ждать! 🙂
@mind150
@mind150 Месяц назад
Не зря я подписан)) очень очень круто и интересно.
@СергейКузнецов-щ6д
Bro, до последнего не хотел лайк ставить, не удержался, ЛАЙК ❤❤❤
@mndevitmndevit
@mndevitmndevit Месяц назад
Пожалуй, это самый настоящий клад) премного благодарен за великолепный контент!
@EugeneKoshelev
@EugeneKoshelev Месяц назад
Вау! Это видео просто находка! Много ценных мыслей, спасибо!
@azamatmyktybekov6194
@azamatmyktybekov6194 Месяц назад
самое лучшее что я видел про способы оптимизаций. однозначный лайк видосу
@vladislavlightweight5855
@vladislavlightweight5855 Месяц назад
Благодарю за видео,позновательно !
@denisttk
@denisttk Месяц назад
Не новичок но спасибо за систематизацию , лайк однозначно
@un_defined
@un_defined Месяц назад
спасибо большое, подписался. конечно я на некстжс работаю в данный момент и там много уже оптимизаций из коробки но всё равно полезный обзор, ещё я подключал библиотеку react-intersection-observer которая при попадании элемента в окно браузера подгружает DOM элемент. так же благодаря ей удобно динамически подгружать на клиенстких компонентах данные с сервера при попадании в область видимости.
@sdfasdfssdfsdf
@sdfasdfssdfsdf Месяц назад
Lighthouse работает и с локальном сервером.
@kakieToYroki
@kakieToYroki Месяц назад
Да, действительно, давно его на локалхосте не тестировал. Закреплю ваш комментарий, весьма полезный
@aazubakin
@aazubakin Месяц назад
И показывает показатели относительно мощности локального компьютера, что для большинства пользователей не правда.
@kakieToYroki
@kakieToYroki Месяц назад
@aazubakin там не только циферки быстродействия нужно смотреть. Там можно увидеть и другую полезную информацию
@sawer.v
@sawer.v Месяц назад
Супер! Очень полезная инфа, особенно про ресурсоемкость функций и их методов))
@askelatre9550
@askelatre9550 Месяц назад
Супер контент, огромное спасибо!
@andyash3337
@andyash3337 Месяц назад
Мы всё знали, но ТЫ - красавчик!!!🤗
@kakieToYroki
@kakieToYroki Месяц назад
Получается ты красавчик, раз все знал :)
@andyash3337
@andyash3337 Месяц назад
@@kakieToYroki 😁
@evgenym.2137
@evgenym.2137 Месяц назад
Классный контент. У этого канала большое будущее ;)
@kakieToYroki
@kakieToYroki Месяц назад
🩷
@karatsergio4472
@karatsergio4472 Месяц назад
Спасибо , полезно !
@Iraes05
@Iraes05 Месяц назад
Великолепное видео! Спасибо большое!!!!!
@aazubakin
@aazubakin Месяц назад
Это общие оптимизации, хотелось пройтись на примере, по показателям того же lighthouse, и увидеть какие показатели можно поправить в лучшую сторону.
@BudniyDen
@BudniyDen Месяц назад
Супер, просто и полезно в копилку.
@frontfromsofa
@frontfromsofa Месяц назад
сокровище, а не видео
@d_r_robot
@d_r_robot Месяц назад
Топ инфа, спасибо! Можно побольше вот такого пожалуйста?
@STELLS541
@STELLS541 Месяц назад
Оч годно) Спасибо 🙏🏻
@efimkapliy6370
@efimkapliy6370 Месяц назад
Отличное видео, спасибо за контент!
@lesson-web
@lesson-web Месяц назад
Тебе друг, тебе Мурыч ответил , посвятив целый стрим! As for js
@denvir2254
@denvir2254 Месяц назад
очень много полезного для себя увидел - спасибо
@thedownwardspiral9787
@thedownwardspiral9787 Месяц назад
Большое спасибо, узнал много полезного
@esp2644
@esp2644 Месяц назад
Еще можно было б и вебсокеты упомянуть , что бы не нагружать сервер лишними соединениями
@Рельныйобзор
@Рельныйобзор Месяц назад
спасибо очень круто и интересно
@ReAgent003
@ReAgent003 Месяц назад
Можно добавить пагинацию чтобы грузить данные с бэка порциями
@АнтонГордеев-ч6у
@АнтонГордеев-ч6у Месяц назад
Автор видео: мы сэкономили 2 килобайта!! Я: ну если поставить сюда эти картинки по 2МБ каждая, то будет норм
@kakieToYroki
@kakieToYroki Месяц назад
ахаххааха кайф )
@ublastbeat9165
@ublastbeat9165 Месяц назад
Топ контент!
@SerzhNesteruk
@SerzhNesteruk Месяц назад
Спасибо за интересное видео! 👍 Насчёт 11-го пункта не согласен. Цикл for...in является крайне медленным и трудно оптимизируемым. Руководство по написанию JS-кода Google JavaScript Style Guide (пункт 5.8.1) рекомендует по возможности отдавать предпочтение другим альтернативным способам обхода по собственным перечисляемым свойствам объекта. Блок "через for" некорректен для оценки перформанса, поскольку ничего не делает (является по сути "мёртвым кодом"). При корректном сравнении преимущество будет отнюдь не на стороне for...in.
@kakieToYroki
@kakieToYroki Месяц назад
Хмм… потестирую этот момент, спасибо
@metalcorewitchkhousovitch5774
@metalcorewitchkhousovitch5774 Месяц назад
23:43 - насколько это разумно, учитывая, что хттп запросы обычно и так сжимаются через гзип и пр алгоритмы? Повторяющиеся ключи в объектах будут подменятся на фразы из словаря компрессора, в из-за чего выигрыш в сокращении этих слов будет сомнителен
@kakieToYroki
@kakieToYroki Месяц назад
Ну, сами данные, насколько я знаю, он не сжимает. Потому что их потом нужно разжать. Написал простенький сервер для тестов на ноде. Тут я получаю json и сжимаю через gzip. Если в jsonData подставить json: const jsonData = JSON.stringify(json); То на выходе я скачал 4кб данных. Если подставить newJson: const jsonData = JSON.stringify(newJson); То будет 3.9кб. Разница всего в 1кб, но это потому что json маленький. _____ P.S. Я надеюсь, что вы именно это имели ввиду. Код для тестов: import express from 'express'; import zlib from 'zlib'; const app = express(); const url = 'jsonplaceholder.typicode.com/todos'; app.get('/', (req, res) => { fetch(url) .then(response => response.json()) .then(json => { const newJson = json.map((data) => ({ uI: data.userId, i: data.id, t: data.title, c: data.completed })); const jsonData = JSON.stringify(newJson); const gzip = zlib.createGzip(); res.setHeader('Content-Type', 'application/json'); res.setHeader('Content-Encoding', 'gzip'); res.writeHead(200); gzip.pipe(res); gzip.write(jsonData); gzip.end(); }) }); app.listen(3000);
@ЮжныйАлександр
@ЮжныйАлександр Месяц назад
С webp надо быть осторожным с фотографиями с высокой растеризация изображения, например, где присутствует небо. Очень заметно ухудшение качества!
@un_defined
@un_defined Месяц назад
кстати хотелось бы то же самое но для nextjs увидеть
@Vitalikzzzz
@Vitalikzzzz Месяц назад
Бро подскажи какая у тебя тема для vs code ? Контент топ !
@kakieToYroki
@kakieToYroki Месяц назад
какая-то стандартная, я vs code только для видео использую, поэтому никакие настройки не менял :)
@lampadashine8246
@lampadashine8246 Месяц назад
Не упомянул чанкинг node modules. Популярные сборщики имеют функцию подключения npm пакетов только на тех страницах, где они используются в js. Использовал эту фичу в работе, на больших проектах сильно ускоряет загрузку страниц
@ДмитрийКиктев-п2с
@ДмитрийКиктев-п2с Месяц назад
Очень круто, конечно, но, если я правильно понял, мы сжимаем все, но при этом используем библиотеки, которые имеют вес. Оптимизации не видно, в конечном счете
@kakieToYroki
@kakieToYroki Месяц назад
Библиотеки хоть и имеют вес, но совсем небольшой. А вот пользы приносят намного больше. Давай посчитаем Библиотека knip не попадает в финальный билд. Ее вес не учитываем. ReactVirtualized - 30 килобайт cdn.jsdelivr.net/npm/react-virtualized@9.22.5/dist/umd/react-virtualized.min.js Весит хоть и много, но тут уже сам смотри, что важнее. Скачать 30 килобайт, либо отрисовывать кучу элементов в дом дереве. Плюс эта куча элементов может отрисовываться в разных местах, а библиотеку можно скачать один раз и даже попросить браузер ее закэшировать MessagePack - 9 килобайт cdn.jsdelivr.net/npm/@msgpack/msgpack@3.0.0-beta2/dist.es5+umd/msgpack.min.js Если мы данных по сети гоняем больше, чем на 9 килобайт, то имеет смысл ее подключить. React Lottie - 2 килобайта cdn.jsdelivr.net/npm/react-lottie@1.2.4/dist/index.min.js Библиотека для debounce / throttle по идее вообще не нужна. Это две простые функции на 10 строк кода, которые можно вручную реализовать Ну и вроде все по библиотекам :)
@vsevolodkurochka2698
@vsevolodkurochka2698 Месяц назад
@@kakieToYroki все зависит от задачи и времени на ее исполнение. Я не думаю, что для стартапа/продукта ты будешь писать свою виртуализацию или для оптимизации писать messagePack. Умение правильно выставлять приоритеты - ключ к успеху!
@MrWertixvost
@MrWertixvost Месяц назад
9 сортировка, не совсем правильная оценка как мне кажется, и результат, в первом "неоптимальном случае" мы сортируем массив значений, что бы в нем небыло, и его же на выходе получаем отсортированный, а в "оптимизированном" варианте, сортируются числа, и на выходе массив чисел а не строковых дат, к примеру.в таком случае актуальнее сортировать структуры с оригинаьным значением и промапленным, однако такие варианты тяжелее для восприятия в рамках одной минуты )
@ЕвгенийЕ-б9б
@ЕвгенийЕ-б9б Месяц назад
Пишу комент о том что есть еще SSR, как вы и просили в конце видео)))
@kakieToYroki
@kakieToYroki Месяц назад
(
@metalcorewitchkhousovitch5774
@metalcorewitchkhousovitch5774 Месяц назад
Этот вариант очень спорный и зависит от случая
@stormbraker637
@stormbraker637 Месяц назад
Гифка весит 100-200кб а либа для lottie 800. Вот это оптимизатор
@kakieToYroki
@kakieToYroki Месяц назад
Понятия не имею, откуда вы взяли эти цифры. Вот либа из видео, она весит 53кб cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.3/lottie.min.js Вот версия для реакта, которую я показывал в видео. Весит 2кб cdn.jsdelivr.net/npm/react-lottie@1.2.4/dist/index.min.js Плюс нужно помнить, что на сайте может быть не одна, а N гифок. Поэтому нужно иметь свою голову на плечах и посчитать все данные, перед тем как грузить либу. У вас может быть одна маленькая гифка на весь сайт. Вы можете ее сжать и получить размер даже меньше lottie библиотеки. Разумеется, в таком кейсе нет смысла целую либу грузить
@user-ep6zz3be3v
@user-ep6zz3be3v Месяц назад
Слушай, а если линтер настроен и выдает переменные которые не используются, получается knip не нужен ? Или он глубже копает чем линтер ?
@kakieToYroki
@kakieToYroki Месяц назад
knip может показывать целиком неиспользуемые файлы, а не только переменные Плюс он вроде зависимости из package.json проверяет
@user-ep6zz3be3v
@user-ep6zz3be3v Месяц назад
На новой работе встретился с тем, что линтер ругается на for in, hasOwnProperty , приходится какие-то окольные методы использовать) А это оказывается быстрее
@kakieToYroki
@kakieToYroki Месяц назад
На твоей работе не любят производительность )
@SerzhNesteruk
@SerzhNesteruk Месяц назад
Линтер, возможно, ругается из-за нарушения правила `eslint: no-prototype-builtins`, согласно которому метод hasOwnProperty не рекомендуется вызывать на самом объекте. Во-первых, это небезопасно, так как свойство может быть переопределено у объекта. Во-вторых, прототипом объекта может быть не Object, а null. Например, при создании объекта через Object.create(null) или Object.groupBy(arr, func) этот метод в нём попросту будет отсутствовать. Поэтому, в Airbnb JavaScript Style Guide (пункт 3.7) рекомендуется вызывать данный метод у прототипа: Object.prototype.hasOwnProperty.call(obj, key). К тому же в Google JavaScript Style Guide (пункт 5.3.3) не рекомендуется использовать hasOwnProperty при "structs"-форме объектного литерала. А вместо цикла for...in с методом hasOwnProperty предлагается по возможности отдавать предпочтение более эффективным способам обхода объекта: for...of (для итерируемых объектов) или Object.keys/Object.values/Object.entries (пункт 5.8.1).
@SerzhNesteruk
@SerzhNesteruk Месяц назад
​@@kakieToYroki В блоке "через for" на видео (12:09) у нас идёт обход по перечисляемым (enumerable) свойствам пустого массива и его цепочки прототипов. Учитывая, что ни пустой массив items, ни Array, ни Object не содержат перечисляемых свойств, то цикл for...in не совершит ни единой итерации. Чтобы сделать блок "через for" эквивалентным блоку "через map", нужно переписать первый блок примерно так: const items = []; for (const key in myObject) { const has = Object.prototype.hasOwnProperty; if (!has.call(myObject, key)) continue; const value = myObject[key]; items.push(value.item); } Примечательно, что два обхода (Object.values и метод map) вдруг окажутся заметно шустрее одного обхода с медлительным for...in. 🧐
@r_y_k_u_s2746
@r_y_k_u_s2746 Месяц назад
Второй,где серебро😂?
@kakieToYroki
@kakieToYroki Месяц назад
🥉Судя по количеству комментов, ты уже третий :)
@r_y_k_u_s2746
@r_y_k_u_s2746 Месяц назад
@@kakieToYroki медную медаль плиз
@kakieToYroki
@kakieToYroki Месяц назад
@@r_y_k_u_s2746 🥉 держи )
@dmitry9463
@dmitry9463 Месяц назад
Я попробовал библиотечку knip но она почему-то выдала мне целую кучу Unused exports (62) которые на самом деле используются в других файлах через import. Не могу понять почему так происходит. Вот например: AUTO_POSTING_PERIODS_ARRAY unknown src/common/constants.js:114:14 Идем на 114 строку файлика src/common/constants.js и видим там следующее: export const AUTO_POSTING_PERIODS_ARRAY = [ { value: 'PREVIOUS', name: 'Past' }, { value: 'NEXT', name: 'Next' }, ];
@kakieToYroki
@kakieToYroki Месяц назад
Возможно у вас несколько точек входа в приложение. В моем случае у меня был только файл main.jsx. Но на реальных проектах бывают всякие утилиты, которые запускаются отдельно. У них своя точка входа, независящая от основного приложения. Плюс, возможно, он ругается из-за того, что вы написали export, но нигде не написали import. Если вы эту константу используете только в этом файле, то уберите export
@user-pz7jq2ks4m
@user-pz7jq2ks4m Месяц назад
У вас канал на рутубе?? Боль:(
@user-rg4nf3hv1d
@user-rg4nf3hv1d Месяц назад
Первый
@kakieToYroki
@kakieToYroki Месяц назад
🥇выиграл золотую медаль :)
@user-rg4nf3hv1d
@user-rg4nf3hv1d Месяц назад
@@kakieToYroki ура
@0bsess10n
@0bsess10n Месяц назад
Lottie?! 😂 Не... Ну слабенько же...
@DicobraZReview
@DicobraZReview Месяц назад
Только сам лотти весит тонну
@kakieToYroki
@kakieToYroki Месяц назад
Уже писал этот комментарий, но повторюсь: Вот либа из видео, она весит 53кб cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.3/lottie.min.js Вот версия для реакта, которую я показывал в видео. Весит 2кб cdn.jsdelivr.net/npm/react-lottie@1.2.4/dist/index.min.js Плюс нужно помнить, что на сайте может быть не одна, а N гифок Также и наоборот, у вас может быть одна маленькая гифка на весь сайт. Вы можете ее сжать и получить размер даже меньше lottie библиотеки. Разумеется, в таком кейсе нет смысла целую либу грузить
@woodDacha
@woodDacha Месяц назад
Очень полезное видео! Спасибо!
Далее
КОСПЛЕЙ НА СЭНДИ ИЗ СПАНЧБОБА
00:57
SENIOR on JUNIOR Javascript Developer interview
26:35
Просмотров 282 тыс.
Lineage 2 after 18 years: the difference surprised
10:09
iOS 18 ВЫШЛА и ее НЕ НАДО СТАВИТЬ!
15:12
These CSS PRO Tips & Tricks Will Blow Your Mind!
8:48
Просмотров 311 тыс.