We speed up the loading of JS by 3-4 times. Code Splitting and vendors.js / WEBPACK guide

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 พ.ย. 2024

ความคิดเห็น • 78

  • @tocode
    @tocode  5 ปีที่แล้ว +4

    Как вы js оптимизируете?
    Исходники - github.com/vedees/webpack-template
    Текущий Коммит - vk.cc/9rn7fI

    • @sergiymolchan8283
      @sergiymolchan8283 5 ปีที่แล้ว +7

      Пили больше видео, ты классно говориш и контент качественный

    • @tocode
      @tocode  5 ปีที่แล้ว

      @@sergiymolchan8283 спасибо, теперь буду чаще записывать видео)

    • @biLLie_wiLLie
      @biLLie_wiLLie 5 ปีที่แล้ว +1

      @@tocode Тяжелый урок) Подскажи как полностью заменить gulp?
      1 - Создавать сколько угодно html (через pug)
      2 - К каждой странице подключать тот js, который нужен

    • @tocode
      @tocode  5 ปีที่แล้ว

      @@biLLie_wiLLie будет видео по использованию вебпака в верстке, оно полностью этот вопрос закроет)
      1. Несколько хтмл: продублировать HtmlWebpackPlugin для нового html файла.
      2. Разные js: либо убрать хеши и inject и подключать все в ручную (под каждую хтмл страницу) или оставить хеши и пользоваться ejs вытаскивая по имени нужный js файл. Но vendors.js должен быть на всех страницах)

    • @biLLie_wiLLie
      @biLLie_wiLLie 5 ปีที่แล้ว

      @@tocode пожалуйста сделай этот урок с пагом и без дублирования HtmlWebpackPlugin. Вдруг страниц несколько десятков будет.

  • @blackmind2966
    @blackmind2966 5 ปีที่แล้ว +12

    Лучше использовать для js и css в данном случае разные значения хэширования:
    js - [hash], для css - [contenthash].
    Так мы не будем заставлять клиент грузить заново и js, и css, если изменится только один из них

    • @tocode
      @tocode  5 ปีที่แล้ว +2

      о спасибо, я добавлю это

    • @LordWelheor
      @LordWelheor 4 ปีที่แล้ว +1

      А почему нельзя и для js использовать [contenthash]?

  • @staticcheese8608
    @staticcheese8608 5 ปีที่แล้ว +7

    Хотел еще добавить, если сделать изменения(находясь в --mode development), например в common.js, то эти изменения повлекут изменения хешей у всех трех файлов из dist/
    app.3a7d08....css
    app.3a7d08....js
    vendor.3a7d08....js
    Кстати, при builde все три файла также генерируется с одинаковыми хэшами.
    Все это сказано к теме оптимизации JS, т.е. загрузки пользователем только действительно измененных модулей,
    так как ему нет необходимости снова подгружать в браузер то, что и так уже лежит в кэше.
    Но в текущей сборке получается, что если изменить common.js или даже какой-либо scss/modules/block.scss, хеши изменятся у всех.
    Решить проблему удалось используя [chunkhash] вместо [hash], а для css [contenthash]
    Инфа отсюда:
    medium.com/@sahilkkrazy/hash-vs-chunkhash-vs-contenthash-e94d38a32208
    Timestamp:
    th-cam.com/video/eMesm6Ef4VA/w-d-xo.html

    • @АртёмЧеканов-е1я
      @АртёмЧеканов-е1я 5 ปีที่แล้ว +3

      Достаточно просто вместо [hash] писать [contenthash] и для конфига на прод еще желательно в плагины довабить "clean-webpack-plugin", чтобы при каждом билде на прод старые файлы со старым хешем удалялись. В итоге у каждого файла свой хеш и меняться будет он только у того файла, что меняли + с плагином в папке dist всегда будет только самая свежая версия файлов

  • @ismalit
    @ismalit 4 ปีที่แล้ว +1

    Очень полезное видео! Спасибо!

  • @777Vasya77
    @777Vasya77 5 ปีที่แล้ว +2

    За Webpack ОГРОМНОЕ спасибо! ))) Давай серию по docker )))

    • @biLLie_wiLLie
      @biLLie_wiLLie 5 ปีที่แล้ว +2

      откуда вы вытаскиваете все эти новые слова?) я про вебпак только узнал, а тут уже докер какой-то

    • @tocode
      @tocode  5 ปีที่แล้ว +1

      ​@@biLLie_wiLLie чем дальше в веб тем больше интересных технологий открываются)

  • @ВладимирДомашенко-ъ2б
    @ВладимирДомашенко-ъ2б 5 ปีที่แล้ว +7

    На 18.30 упомянули о разбиении большого вендорного файла на чанки и их асинхронной загрузке. Хотелось бы узнать подробнее как это делать. Спасибо!

  • @fedortregubov3873
    @fedortregubov3873 5 ปีที่แล้ว +2

    В дополнение к хешам (из скринкаста Ильи Кантора). Хеш лучше всего добавлять непосредственно к имени файла [name].[hash].js, но не как GET-параметр [name].js?v=[hash] т.к. не все CDN правильно воспринимают файлы с GET-параметрами.

  • @NickJOin-yw1vd
    @NickJOin-yw1vd 7 หลายเดือนก่อน

    Спасибо, помог

  • @StasNemy
    @StasNemy 5 ปีที่แล้ว +1

    Благодарю, с Vue и Vuex не сталкивался, было интересно!

    • @tocode
      @tocode  5 ปีที่แล้ว

      Вью тут в пример, а так может быть что угодно, рад что понравилось)

  • @stayacid
    @stayacid 4 ปีที่แล้ว

    Для webpack рекомендуют использовать vue/dist/vue.esm.js, там tree-shaking есть для удаления из билда неиспользуемого кода. Я попробовал и действительно несколько килобайт сэкономило

  • @Super_dash1756
    @Super_dash1756 5 ปีที่แล้ว +1

    Ёлы палы, я дождался.

    • @tocode
      @tocode  5 ปีที่แล้ว

      Кулик Дмитрий теперь видео будут выходить быстрее!

  • @АлександрАндреев-ь7з7ъ
    @АлександрАндреев-ь7з7ъ 5 ปีที่แล้ว +1

    Jack, а посредством чего твой форум (там где статьи) запоминает мой выбор темной темы (кнопка в левом нижнем углу)? Web storage?

    • @tocode
      @tocode  5 ปีที่แล้ว +1

      local-storage, кстати один из базисов в курсе tocode.ru/curses/vuejs-s-nylya-do-pro

  • @stanislav5846
    @stanislav5846 5 ปีที่แล้ว +1

    СПАСИБО

  • @vedegis
    @vedegis 5 ปีที่แล้ว +2

    Когда я подключаю реакт он попадает в vendors.js, а то что я пишу из компонентов идет в файл app.js?
    А понял! Реакт использую 16 версии, а каждый билд это изменения в компонентах. Тогда vendors действительно не меняется, а лишь по новой подгружается app.js. Круто!!!

    • @tocode
      @tocode  5 ปีที่แล้ว

      @@vedegis Все верно! Кстати, вот статья где есть также сплиты для реакта - hackernoon.com/the-100-correct-way-to-split-your-chunks-with-webpack-f8a9df5b7758

  • @crybaby3128
    @crybaby3128 5 ปีที่แล้ว

    Очень классный материал, спасибо за видео, не подскажешь как вебпаку собираться без перезагрузки страницы, учитывая твою сборку!!

  • @СергейМеньщиков-р2ш
    @СергейМеньщиков-р2ш 5 ปีที่แล้ว +1

    Следуя вашему видео я разделил файлы на vendor.111mysuperhash.js и app.111mysuperhash.js например. Далее я делаю изменение в app.js и запускаю билд проекта. Далее я ожидаю что будет изменен hash только у app.js, но в действительно хэш поменяется и у vendor.js. Это странно. Ведь в начале видео вы говорили, что юзеру не имеет смысл догружать vendor.js т.к. он не менялся, а меняется только app.js

    • @tocode
      @tocode  5 ปีที่แล้ว

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

  • @АлександрКопытенко
    @АлександрКопытенко 4 ปีที่แล้ว

    А можно ли таким же образом разделить на app и vendors стили??
    Например, вынести в вендоры какие-то библиотеки стилей или фреймворки типа Bootstrap.

  • @ВасяСидоров-я6ш
    @ВасяСидоров-я6ш 5 ปีที่แล้ว +2

    Всё круто, а можно сообщить что Vue , это фреймворк? Либо ты смотришь с экосистемы Webpack?)

    • @tocode
      @tocode  5 ปีที่แล้ว

      Да, вью это фреймворк. Только не совсем понял, что ты имеешь ввиду)

    • @tocode
      @tocode  5 ปีที่แล้ว +2

      ​@Raiku По умолчанию, если юзер заходит первый раз на сайт то да - скачиваются оба файла, но в дальнейшем вендорс уже не скачивается, а перекачивается лишь app.js. Плюс в vue/cli добавляет asyc что тоже ускорят подгрузку тк js файлы загружаются асинхронно

    • @ВасяСидоров-я6ш
      @ВасяСидоров-я6ш 5 ปีที่แล้ว

      @@tocode имею ввиду, что в видео ты постоянно говоришь, что подключаем библиотеку Vue, вот и уточняю))

    • @tocode
      @tocode  5 ปีที่แล้ว +1

      @@ВасяСидоров-я6ш аа да, точно))

  • @LordWelheor
    @LordWelheor 4 ปีที่แล้ว

    Такой вопрос, насколько критично использовать [contenthash]? Удобная же вещь, обновляет хэш только у тех файлов что изменились

    • @tocode
      @tocode  4 ปีที่แล้ว +1

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

  • @alexandrnasonov
    @alexandrnasonov 5 ปีที่แล้ว +1

    А через ejs можно в html импортировать другие html файлы?
    т.е разбивать на header/content/footer , как например в blade шаблонизаторе

    • @tocode
      @tocode  5 ปีที่แล้ว

      Alex Nasonov да, но лучше такое делать с pug, на фронте обычно используют его, ejs обычно под серверы. В планах видео по пагу

    • @alexandrnasonov
      @alexandrnasonov 5 ปีที่แล้ว

      @@tocode pug как то не зашел , тем более это лишние трудности для людей в команде кто с ним не знаком
      я правильно понял кроме "Доки по ejs в хтмл" можно еще использовать это github.com/ampedandwired/html-webpack-plugin#configuration ?

    • @tocode
      @tocode  5 ปีที่แล้ว

      Alex Nasonov про командную работу это точно. Да, этот плагин в принципе может полностью текущий заменить

  • @Athlon5200plus
    @Athlon5200plus 4 ปีที่แล้ว

    Искал как в webpack 4 сделать несколько точек входа, чтобы не грузуть ЛК на пасадочной странице. И тут не нашел. Автор показал как подключить ЛК на главную, а как подключить к host:port/lk (условно) не поеазал 🙁

  • @espocada_official
    @espocada_official 5 ปีที่แล้ว

    если используешь create-react-app, надо оптимизировать таким образом или там уже все настроено?

    • @tocode
      @tocode  5 ปีที่แล้ว

      в create-react-app и vue cli это уже включено, по крайней мере, с которыми я работал

  • @pranamanna
    @pranamanna 5 ปีที่แล้ว

    Для меня загадка, я переписал файл index.pug под себя, но все равно как то добавляются в конец скрипты: yadi.sk/i/3RPuVu_i5NiusA Пересмотрел видео, не понятно каким образом добавляются! Поясни пожалуйста

    • @tocode
      @tocode  5 ปีที่แล้ว +1

      Автоматом происходит чтобы не заморачиваться с подключением и контролем хешей (иначе придется использовать ejs в хтмл, как один из способов), отключить можно в конфиге, там где настройка хтмла (какая-то из опций стоит в true - поставь в false)
      Если хочешь узнать об этом больше то глянь видео по моему про js оптимизацию, где я рассказывал про ejs

    • @LordWelheor
      @LordWelheor 4 ปีที่แล้ว

      Ты можешь поставить в плагине HtmlWebpackPlugin свойство inject: false

  • @ksawl
    @ksawl 4 ปีที่แล้ว

    странно что до сих пор не стоит clean-webpack-plugin и dist надо чистить руками))

  • @АлМ-ы8ъ
    @АлМ-ы8ъ 5 ปีที่แล้ว

    Можете показать как вебпак может разбить пользовательский js-файл в котором есть импорт другого пользовательского js-файла чтобы он их не объединял воедино под именем того файла в котором производится импорт???

  • @aleksprimetv
    @aleksprimetv 5 ปีที่แล้ว +1

    Сделай пожалуйста настройку с pug

  • @surho007
    @surho007 4 ปีที่แล้ว +1

    Вот не ясно зачем делили конфиги, если по сути все прописали тупо в base, еще не ясно зачем после MiniCssExtractPlugin идет style-loader. Вроде все хорошо ,но обьяснения зачем и что нужно местами просто настолько скомканы , не хватает именно глубокого понимания что зачем, все по верхам. В любом случае спасибо за труд

  • @ИгорьБ-ц4х
    @ИгорьБ-ц4х 4 ปีที่แล้ว

    А как с WordPress такое сделать ускорение?

    • @tocode
      @tocode  4 ปีที่แล้ว

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

  • @car-defects
    @car-defects 4 ปีที่แล้ว +2

    1мб + 25кб = 1, 049 мб

  • @pranamanna
    @pranamanna 5 ปีที่แล้ว

    Скрипты с хешами yadi.sk/i/KMnfDp8VTtywiw будут разрастаться в папке js?

    • @tocode
      @tocode  5 ปีที่แล้ว

      странно, по идее он должен полностью удалять папку дист и перезаписывать по новой чтобы не скапливалось

    • @pranamanna
      @pranamanna 5 ปีที่แล้ว

      @@tocode проверь пжта у себя

    • @tocode
      @tocode  5 ปีที่แล้ว +1

      @@pranamanna да, создаются, поставь плагин clean-webpack-plugin он будет очищать папку билд каждый раз, когда будет запускаться команда билда. Но лучше указать только js/css тк на картинки в большинстве случаев он не нужен

    • @pranamanna
      @pranamanna 5 ปีที่แล้ว

      @@tocode Просто установить плагин clean-webpack-plugin, больше ничего настраивать не надо? Для меня сложновато "указать только js/css".

  • @sergeyermolaev270
    @sergeyermolaev270 4 ปีที่แล้ว

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

    • @JohnDoe-p1y
      @JohnDoe-p1y 3 ปีที่แล้ว +1

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

  • @undefined-n5v
    @undefined-n5v 5 ปีที่แล้ว

    Класть :D

  • @staticcheese8608
    @staticcheese8608 5 ปีที่แล้ว

    Столкнулся с трудностью, решил использовать ejs в index.html, как показано в видео:

    Соответственно установил:
    inject: false
    в htmlWebpackPlugin из файла webpack.base.conf.js
    По итогу все компилируется без ошибок, но перестает работать livereload в webpack-dev-server,
    приходится обновлять окно браузера в ручную через F5.
    Livereload начинает работать только если убрать inject: false (ну или inject: true)
    Кто-нибудь может что-то подсказать по этому вопросу?
    Timestamp:
    th-cam.com/video/eMesm6Ef4VA/w-d-xo.html

    • @m.nimchenko
      @m.nimchenko 5 ปีที่แล้ว

      у тебя получилось решить проблему?

    • @staticcheese8608
      @staticcheese8608 5 ปีที่แล้ว

      @@m.nimchenko , нет, отложил этот вопрос в долгий ящик. Когда разбирался c ejs думал, что это как-то поможет мне решить проблему одинаковых хешей у app.css vendor.js и app.js, но решение оказалось в другом, ниже в комментариях я писал об этом.

    • @m.nimchenko
      @m.nimchenko 5 ปีที่แล้ว

      @@staticcheese8608 понятно, спасибо. А не подскажешь, ejs можно использовать вместе с шаблонизатором pug?

  • @SupermariobrosRU
    @SupermariobrosRU 4 ปีที่แล้ว

    зачекайте мою сборку github.com/AntonS86/webpack-starter-kit

  • @pranamanna
    @pranamanna 5 ปีที่แล้ว

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

    • @tocode
      @tocode  5 ปีที่แล้ว

      да я смотрел по статистике, что длинные видео не ок. зато уже придумал идеальный формат для след. видео

    • @pranamanna
      @pranamanna 5 ปีที่แล้ว

      @@tocode да хоть по 2 часа, не важно как по мне