Комментарии 23
Постарайтесь нас не осуждать, нам нужны работающие importы в универсальном коде
Да, но зачем вебпак-то? babel-node же.
говорю webpack-подразумеваю react
Почему? и то и другое никак друг на друга не завязаны.
Нужно собирать пререндер-entry, который использует babel с кастомным конфигом (static вот это все), нужно пересобирать его на лету для горячей перезагрузки сервера и просто для единообразия.
кроме того собраный бандл уже независим от babel-node и прочего и запускается просто `node build/server.js`
Есть специальный инструмент, чтобы автор опенсорс-библиотеки сам контролировал размер и пользователям не надо было использовать хаки
А если коротко, то те, кто собирает готовое из лего и настолько обленились и деградировали, что им даже лень хоть что-то подпилить напильником, не могут называться программистами
Но вот для тех, кто впервые заходит на сайт — это плохо.
Для тех, кто заходит на сайт через 2G/3G — это плохо.
Для тех, у кого слабый CPU время парсинга становится убер-высоким.
Если ваши зависимости весят по 100кб, то с развитием проекта у вас вылезет больше одной такой зависимости, что приведет к раздуванию бандла до неприличных размеров
У firebase разве нет рест апи, которое можно использовать напрямую, а не через говнолибу?
А в чем смысл убирать firebase из бандл И добавлять preload link на него? Он же таким образом будет касаться параллельно и замедлит загрузку бандла, нет?
ну вот именно потому что параллельно — в результате получится быстрее (https://github.com/webpack/webpack/issues/3216 — тут подробнее).
Но это именно оптимизация — preload/prefetch имеет более низкий приоритет чем собственно скрипты, и вставлять вы можете его предполагая с какой вероятностью пользователю понадобится firebase на данной странице.
Если собирать вот так: NODE_ENV=production ./node_modules/.bin/webpack -p
+ webpack.DefinePlugin
, то бандл будет радикально меньше. Будут вырезаны различные отладочные коды, плюс будет uglify. Затем сжимаем gzip (превентивно или оставляем на усмотрение nginx & пр.). И получается, что если не перегружать зависимостями то < 100 KiB. Если проект средних размеров, то < 300 KiB. 2 MiB это ну очень много.
1) бандла 2 — vendor.js и app.js; vendor.js включает в себя почти все из node_modules, app — соответственно код самого приложения. совокупно получается около 210-220кб в сжатом виде. Плюс такого подхода — пока мы не добавили зависимость или не обновили версию зависимости в package.json — vendor.js не инвалидируется. Ну и грузится параллельно;
2) нужно вручную следить что бы библиотки не утащили несколько версий lodash например или react-router+react-router/es или еще что-то типа того;
3) нужно следить за размером некоторых библиотек и выносить их вот так (или любым имным способом) в ленивую загрузку или уменьшать их размер если это возможно. популярный выстрел себе в ногу — momen.js и его локали: ;
4) uglify/gzip — разумеется; babili и иные минификаторы работают менее стабильно и дают эффект хоть и лучший — но не настолько лучший на моей практике что бы заморачиваться. пока опыт с ними отрицательный.
firebase.js ПРОСТО ОГРОМНЫЙ (и что мы можем с этим сделать)