Сучасні сайти часто поєднують всі свої JavaScript в єдиний, великий main.js сценарій. Цей регулярно містить скрипти для всіх ваших сторінок або маршрутів, навіть якщо користувачі потребують лише невелика частина сторінки, яку вони переглядають.
Коли JavaScript обслуговується таким чином, ефективність завантаження ваших веб-сторінок може страждати - особливо з Реактивний веб-дизайн на мобільних пристроях. Отже, давайте зафіксувати його, впроваджуючи розщеплення JavaScript.
Коли веб-браузер бачить a & lt; сценарій & gt; Він повинен проводити час завантаження та обробки JavaScript, який ви посилаєтеся. Це може відчувати себе швидким на висококласним пристроям, але завантаження, аналіз та виконання невикористовуваного коду JavaScript може зайняти деякий час на середніх мобільних пристроях з більш повільною мережею та повільним процесором. Якщо ви коли-небудь повинні були увійти до кав'ярня або готель Wi-Fi, ви знаєте, що повільна мережева досвідом може статися з усіма.
Кожен другий витрачений очікування на JavaScript для завершення завантаження може затримати, як скоро користувачі зможуть взаємодіяти з вашим досвідом. Особливо це стосується, якщо ваш UX спирається на JS для критичних компонентів або навіть просто прикріплюючи обробники подій для простих частин інтерфейсу користувача.
Це, безумовно, варто попросити себе, чи потрібно виконати код (якщо ви використовували простий Веб-будівельник ви, напевно, не). Якщо ваш сайт вимагає JavaScript для інтерактивного вмісту (для функцій, таких як ящики для меню та каруселлів) або є односторонньою програмою, яка спирається на рамки JavaScript для рендерингу UI, відповідь, швидше за все, "так". Незалежно від того, чи є кодовим розщепленням для вашого сайту, це питання, яке вам потрібно буде відповісти. Ви розумієте свою архітектуру та як ваш сайт завантажує найкраще. На щастя, є інструменти, доступні для вас тут. Пам'ятайте, що якщо ви реалізуєте зміни у вашій системі дизайну, збережіть ці зміни у вашому спільному хмара зберігання Отже, ваша команда бачила.
Для розщеплення коду JavaScript, Маяк - Панель аудиту в інструментах розробника Chrome - може допомогти світити світло на те, чи це проблема для вашого сайту. Аудит ви хочете шукати - це зменшення часу виконання JavaScript (задокументований тут ). Цей аудит висвітлює всі скрипти на вашій сторінці, яка може затримати користувач, який взаємодіє з ним.
PagesPeed Insights це онлайн-інструмент, який також може виділити продуктивність вашого сайту - і включає в себе дані Lab з маяка та реальних даних на вашому сайті з доповіддю користувачів Chrome. Ваш веб хостинг Сервіс може мати інші варіанти.
Якщо це схоже, у вас є дорогі скрипти, які можуть бути кращими, розділені, наступний інструмент для перегляду - це функція покриття коду в інструментах розробника Chrome (DevTools & GT, верхня праве меню & GT; більше інструментів & GT; охоплення). Це заходи, скільки невикористаних JavaScript (і CSS) знаходиться на вашій сторінці. Для кожного сценарію узагальнено, DevTools покаже "невикористані байти". Це код, який ви можете розглянути можливість розщеплення та Lazy-Lave, коли користувач потребує цього.
Є кілька різних підходів, які ви можете взяти, коли мова йде про код розщеплення JavaScript. Скільки вони застосовуються до вашого сайту, як правило, змінюється залежно від того, чи хочете ви розділити сторінку / програми "логіка" або розділити бібліотеки / рамки з інших "постачальників".
Динамічний код розщеплення: Багато хто з нас "статично" імпорту javascript модулів та залежностей так, щоб вони були укладені в один файл під час збірки. Розширення "Динамічний" код додає можливість визначити точки у вашому JavaScript, який ви хочете розділити та ліниво-навантаження за потребою. Сучасний JavaScript використовує динаміку Імпорт () Заява для досягнення цього. Ми будемо більш коротко.
Розщеплення коду постачальника: Рамки та бібліотеки, які ви покладаєтеся на (наприклад, реагують, кутові, VUE або LODASH) навряд чи зміниться в скриптах, які ви надсилаєте до своїх користувачів, часто, як "логіка" для вашого сайту. Щоб зменшити негативний вплив кеш -ваналізації для користувачів, які повертаються на свій сайт, ви можете розділити свої "продавці" у окремий скрипт.
Розщеплення коду входу: Записи починаються з пунктами вашого сайту або додаток, який інструмент, як WebPack, може подивитися, щоб створити ваше залежне дерево. Розщеплення за записами корисна для сторінок, де маршрутизація на стороні клієнта не використовується, або ви покладаєтеся на комбінацію сервера та надання клієнта.
Для наших цілей у цій статті буде зосереджена на розщепленні динамічного коду.
Давайте оптимізувати ефективність JavaScript a Просте застосування, яке сортує три цифри Через розщеплення коду - це додаток моїм колегою житла djirdeh. Робочий процес ми будемо використовувати, щоб зробити наш завантаження JavaScript швидко вимірювати, оптимізувати та контролювати. Починай тут .
Перш ніж намагатися додати будь-які оптимізації, ми спочатку збираємося вимірювати продуктивність нашого JavaScript. Оскільки програма Magic Sorter розміщена на глюк, ми будемо використовувати своє кодуюче середовище. Ось як йти про це:
Ця проста програма, здається, використовує 71,2 кб JavaScript, просто сортувати кілька номерів. Що, звичайно, не здається правильним. У нашому джерелі src / index.js , утилітаційна бібліотека Лодаш, і ми використовуємо сортувати за - Один з його сортувальних утиліт - щоб відсортувати наші номери. Lodash пропонує кілька корисних функцій, але додаток використовує лише один метод від нього. Це загальна помилка для встановлення та імпорту всієї сторонніх залежностей, коли насправді, вам потрібно лише використовувати невелику його частину.
Є кілька варіантів, доступних для обрізання нашого розміру Bundle JavaScript:
Опції 1 та 2 підходять для зменшення розміру нашого пакету - це, ймовірно, має сенс для реальної програми. Для викладання, ми спробуємо щось інше. Варіанти 3 та 4 допомагають підвищити продуктивність програми.
Ми будемо змінювати кілька файлів, щоб імпортувати тільки один сортувати за Метод, який нам потрібно від Локаш. Почнемо з заміни нашого лопатка залежність package.json :
"lodash": "^4.7.0",
з цим:
"lodash.sortby": "^4.7.0",
У src / index.js, ми імпортуємо це більш конкретний модуль:
js
Імпорт "./style.css";
Імпорт _ від "Лодаш";
імпортувати відторні від "Лодаш.Сорбі";
Далі ми будемо оновлювати, як значення сортуємо:
js
form.addeventlistener ("Надіслати", e = & gt; {
e.preventdefault ();
const bagnement = [input1.valueasnumber, input2.valueasnumber, input3.valueasnumber];
const sortedvalues = _.Sortby (значення);
const sortedvalues = sortby (значення);
results.innerhtml = `
& lt; h2 & gt;
$ {SortedValues}
& lt; / h2 & gt;
`
});
Перезавантажте додаток Magic Numbers, відкрийте інструменти розробника та знову подивіться на мережеву панель. Для цього конкретного додатка, наш розмір пакетів був зменшений за шкалою чотирьох з невеликою роботою. Але для поліпшення все ще багато місця.
WebPack є одним з найпопулярніших бавовників JavaScript, який використовуються веб-розробниками сьогодні. Це "пучки" (поєднуються) всі ваші модулі JavaScript та інші активи в статичні файли веб-браузерів можуть читати.
Єдиний пучок у цій програмі можна розділити на два окремі скрипти:
Використання динамічного імпорту (з Імпорт () Ключове слово), другий скрипт може бути ледачим завантаженим за попитом. У наших магічних номерах додаток код, що складається з сценарію, може бути завантажений, якщо потрібно, коли користувач натискає кнопку. Ми починаємо з усунення імпорту верхнього рівня для способу сортування в src / index.js :
Імпорт згорнути від "Лодаш.Сорбі";
Імпортуйте його в межах слухача подій, що пожежі, коли кнопка натискається:
form.addeventlistener ("Надіслати", e = & gt; {
e.preventdefault ();
Імпорт ('Lodash.Sortby')
.then (модуль = & gt; модуль.default)
.then (Sortinput ())
.catch (err = & gt; {errom (err)});
});
Ця динаміка Імпорт () Функція, яку ми використовуємо, є частиною пропозиції стандартівтрек для включення здатності динамічно імпортувати модуль у стандарті мови JavaScript. Веб-сайт вже підтримує цей синтаксис. Ви можете дізнатись більше про те, як працює динамічний імпорт У цій статті .
Точний Імпорт () Заява повертає обіцянку, коли він вирішує. WebPack вважає це як розкол, що вона вирвана в окремий скрипт (або шматок). Після того, як модуль повертається, то Модуль.default використовується для посилання на експорт за замовчуванням лопатка . Обіцянка прикупована іншою .потім() дзвонити сортування Спосіб сортування трьох вхідних значень. Наприкінці обіцянки ланцюга, .улов() Покликається обробляти, де обіцянка відхиляється як результат помилки.
У реальних програмах, ви повинні правильно обробляти динамічні помилки імпорту. Прості повідомлення попередження (подібні до того, що використовується тут) - це те, що використовуються, і не може забезпечити найкращий користувацький досвід для дозволів користувачам знати щось не так.
У випадку, якщо ви бачите помилку Linting, наприклад "Помилка розбору: Імпорт та експорт може відображатися лише на верхньому рівні", знайте, що це пов'язано з динамічним синтаксисом імпорту, але ще не завершено. Хоча веб-сайт підтримує його, налаштування для Eslint (інструмент Linting JavaScript), який використовується Glitch, не оновлено, щоб включити цей синтаксис, але він все ще працює.
Останнє, що нам потрібно зробити, це написати сортування метод в кінці нашого файлу. Це має бути функція, яка повертає функцію, яка приймає в імпортованому методі з Lodash.Sortby . Вкладена функція може сортувати три вхідні значення та оновити DOM:
const sortinput = () = & gt; {
повернення (sortby) = & gt; {
CONST значення = [
invent1.valueasnumber,
input2.valueasnumber,
input3.valueasnumber
];
const sortedvalues = sortby (значення);
results.innerhtml = `
& lt; h2 & gt;
$ {SortedValues}
& lt; / h2 & gt;
`
};
}
Тепер давайте перезавантажте заявку в останній раз і зберегти очі на мережевій панелі. Ви повинні помітити, як тільки невеликий початковий пакет завантажується при завантаженні додатків. Після натискання кнопки, щоб відсортувати вхідні цифри, сценарій / шматок, що містить код сортування, отримує і виконується. Чи бачите ви, як цифри досі сортуються, як ми очікуємо?
Розщеплення коду JavaScript та Lazy-Loading може бути дуже корисним для обрізання початкового розміру пакетів вашого додатка або сайту. Це може безпосередньо призвести до більш швидкого завантаження сторінок для користувачів. Незважаючи на те, що ми розглянули додавання коду, що розщеплює до програми Vanilla JavaScript, ви також можете застосувати його до додатків, побудованих з бібліотеками або рамками.
Багато популярних каркасних підтримує додавання коду розподілу та Lazy-Lave, використовуючи динамічний імпорт та веб-сайт.
Ось як ви можете Lazy-завантажувати компонент фільму "Опис", використовуючи реагування (з React.lazy () та їхня сила напруженості), щоб забезпечити "завантаження ...", а компонент ледачим завантаженим (див тут Для деяких деталей):
Імпортувати реагування, {suspencense} від «реагування»;
CONST Опис = React.Lazy (() = & GT; Імпорт ('./ Опис'));
Функція програми () {
повернення ("
& lt; div & gt;
& lt; h1 & gt; мій фільм & lt; / h1 & gt;
& lt; підвіска Fagback = "Завантаження ..." & GT;
& lt; опис / & gt;
& lt; / suspense & gt;
& lt; / div & gt;
);
}
Розщеплення коду може допомогти зменшити вплив JavaScript на свій досвід користувачів. Безумовно, вважаю, якщо у вас є більші пучки JavaScript, і коли ви сумніваєтеся, не забудьте виміряти, оптимізувати та монітор.
Ця стаття була опублікована у випуску 317 сітка , журнал найкращого у світі для веб-дизайнерів та розробників. Купити проблему 317 тут або Підписатися тут .
Пов'язані статті:
(Credit Image: Tiffany Chooong) Створення зображень CSS - це цікавий спосіб прак..
Цей підручник навчить вас створити анімований пляж Діорама з початку, ..
Artrage - це популярний інструмент цифрового мистецтва (більше, побачимо н..
Створення шматка 3D-арт З природним ландшафтом може здатися ви�..
Якщо ви завжди хотіли знати, як малювати пір'я, і зробити їх супер-реалістичними, ви в потрібному місц�..
Стрічкові установки досить поширені 3D-арт Виробничі установк�..
Будучи позаштатним художником, я працюю з різноманітних невеликих про..