You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> Наприкінці ваші бандли будуть значно відрізнятися від наведених прикладів.
47
47
48
-
Якщо ви використовуєте [Create React App](https://create-react-app.dev/), [Next.js](https://nextjs.org/), [Gatsby](https://www.gatsbyjs.org/) чи подібний інструмент, ви матимете налаштування Webpack за замовчуванням для бандлінгу вашого
49
-
додатку.
48
+
Якщо ви використовуєте [Create React App](https://create-react-app.dev/), [Next.js](https://nextjs.org/), [Gatsby](https://www.gatsbyjs.org/) чи подібний інструмент, Webpack за замовчуванням налаштований для бандлінгу вашого додатку.
50
49
51
-
Якщо ви не використовуєте нічого з наведеного чи подібного, вам доведеться налаштовувати бандлінг самостійно. Для прикладів ознайомтеся зі
50
+
Якщо ви не використовуєте нічого з наведеного чи подібного, вам доведеться налаштувати бандлінг самостійно. Для прикладів ознайомтеся зі
52
51
[Встановленням](https://webpack.js.org/guides/installation/) та
Розбиття по бандлам – це прекрасно, але з темпом росту вашого додатку, бандли теж зростають.
59
-
Це особливо помітно, якщо ви встановили та використовуєте великі сторонні бібліотеки. Вам потрібно
60
-
стежити за кодом, який потрапляє у ваш бандл для того, щоб в один момент не зробити цей бандл настільки
61
-
великим, що для завантаження вашого додатку знадобиться чимало часу.
57
+
Зшивання файлів – це прекрасно, але з ростом вашого додатку розмір бандлу теж зростатиме.
58
+
Особливо якщо ви використовуєте великі сторонні бібліотеки. Вам потрібно
59
+
стежити за кодом, який ви включаєте у свій бандл, щоб випадково не зробити його настільки великим, що завантаження вашого застосунку займатиме багато часу.
62
60
63
-
Щоб уникнути розростання бандла, варто почати "розділяти" ваш бандл.
64
-
Поділ коду - це функціонал, який підтримується такими бандлерами,
61
+
Щоб уникнути розростання бандла, варто заздалегідь почати його розбивати на шматки.
62
+
Розбиття коду - це функціонал, який підтримується такими бандлерами,
65
63
як [Webpack](https://webpack.js.org/guides/code-splitting/),
66
64
[Rollup](https://rollupjs.org/guide/en/#code-splitting) та Browserify (з
67
65
[factor-bundle](https://github.com/browserify/factor-bundle)), що можуть створювати
68
-
декілька бандлів та завантажувати їх у разі потреби.
66
+
декілька окремих бандлів, які можна динамічно завантажувати під час виконання застосунку.
69
67
70
-
Розбиття коду вашого додатку може допомогти поступово завантажити тільки те,
68
+
Розбиття коду вашого додатку може допомогти "ліниво" завантажувати (lazy load) тільки те,
71
69
що необхідно користувачеві в цей момент. Це може значно покращити продуктивність вашого
72
-
додатку. Хоча ви не скоротили кількість коду вашого додатку, ви уникнули завантаження
73
-
коду, який може ніколи не знадобитись користувачеві та скоротили об'єм коду, що необхідний
70
+
додатку. Хоч ви й не скорочуєте обсяг коду вашого додатку, ви уникаєте завантаження
71
+
того коду, який може ніколи не знадобитись користувачеві, а також скорочуєте обсяг коду, що необхідний
74
72
на початку завантаження додатку.
75
73
76
74
## `import()` {#import}
77
75
78
76
Найращий спосіб впровадження розбиття коду — через синтаксис
В той момент, коли Webpack стикається з таким синтаксисом, він автоматично починає розбивати код вашого додатку.
98
-
Якщо ви вже користуєтесь Create React App, це вже налаштовано для вас
99
-
та ви можете одразу [почати користуватися цим](https://facebook.github.io/create-react-app/docs/code-splitting). Це також підтримується
100
-
у [Next.js](https://nextjs.org/docs/advanced-features/dynamic-import) за замовчуванням.
95
+
Коли Webpack стикається з таким синтаксисом, він автоматично починає розбивати код вашого додатку.
96
+
Якщо ви користуєтесь Create React App, він вже налаштований відповідним чином, і ви можете одразу почати [користуватися розбиттям коду](https://facebook.github.io/create-react-app/docs/code-splitting). У [Next.js](https://nextjs.org/docs/advanced-features/dynamic-import) розбиття коду також підтримується за замовчуванням.
101
97
102
98
Під час самостійного налаштування Webpack, скоріш за все, у вас з'явиться бажання прочитати
103
99
[інструкцію з розбиття коду](https://webpack.js.org/guides/code-splitting/) від Webpack. Конфігурація вашого Webpack повинна мати вигляд, [схожий на цей](https://gist.github.com/gaearon/ca6e803f5c604d37468b0091d9959269).
104
100
105
-
Під час використання [Babel](https://babeljs.io/), ви маєте пересвідчитись в тому, що Babel може парсити синтаксис динамічних import, виключаючи можливість його перетворення.
101
+
В разі використання [Babel](https://babeljs.io/) ви маєте пересвідчитись в тому, що Babel може парсити синтаксис динамічного import(), але не перетворює його.
106
102
Для цього вам знадобиться [babel-plugin-syntax-dynamic-import](https://yarnpkg.com/en/package/babel-plugin-syntax-dynamic-import).
107
103
108
104
## `React.lazy` {#reactlazy}
109
105
110
106
> Примітка:
111
107
>
112
-
> `React.lazy` та Suspense ще не доступні для рендерингу на стороні сервера. Якщо ви хочете використовувати розбиття коду в додатках відрендерених на сервері, ми рекомендуємо [Loadable Components](https://github.com/gregberge/loadable-components). Він має гарну [інструкцію для розбиття на бандли, використовуючи серверний рендеринг](https://loadable-components.com/docs/server-side-rendering/).
108
+
> `React.lazy` та Suspense ще не доступні для рендерингу на стороні сервера. Якщо ви хочете використовувати розбиття коду в додатках, відрендерених на сервері, ми рекомендуємо [Loadable Components](https://github.com/gregberge/loadable-components). Вони мають гарну [інструкцію для розбиття на бандли з використанням серверного рендерингу](https://loadable-components.com/docs/server-side-rendering/).
113
109
114
-
Функція `React.lazy` дозволяє вам рендерити динамічний import, як звичайний компонент
110
+
Функція `React.lazy` дозволяє вам рендерити динамічний import як звичайний компонент
115
111
116
112
**До:**
117
113
@@ -125,11 +121,11 @@ import OtherComponent from './OtherComponent';
Цей код автоматично завантажить бандл, що містить `OtherComponent` коли цей компонент відрендеритися вперше.
124
+
Цей код автоматично завантажить бандл, що містить `OtherComponent`, коли цей компонент буде рендеритися вперше.
129
125
130
-
`React.lazy` приймає функцію, яка має викликати динамічний `import()`. Потім повертається `Promise`, який при успішному виконанні поверне модуль з `default`експортом, а у цьому модулі у свою чергу знаходитиметься React-компонент.
126
+
`React.lazy` приймає функцію, яка має викликати динамічний `import()`. Вона має повернути `Promise`, який при вирішенні поверне модуль з `default`-експортом, який містить React-компонент.
131
127
132
-
Ледачий компонент потім повинен відрендеритися у тілі компонента `Suspense`. Це дозволить нам показати резервний контент (наприклад, індикатор завантаження), поки ми чекаємо коли ледачий компонент завантажиться.
128
+
Ледачий компонент потім повинен відрендеритися у тілі компонента `Suspense`. Це дозволяє нам показати резервний контент (наприклад, індикатор завантаження), поки ми чекаємо на завантаження ледачого компонента.
133
129
134
130
```js
135
131
importReact, { Suspense } from'react';
@@ -147,7 +143,7 @@ function MyComponent() {
147
143
}
148
144
```
149
145
150
-
`fallback` приймає будь-який React елемент, поки чекає повного завантаження компонента. Компонент `Suspense` можна розмістити де завгодно над "ледачим" компонентом. Ви навіть можете обернути кілька "ледачих" компонентів за допомогою одного `Suspense` компонента
146
+
Проп `fallback` приймає будь-який елемент React, який слід відобразити до повного завантаження компонента. Компонент `Suspense` можна розмістити де завгодно над "ледачим" компонентом. Ви навіть можете обгорнути кілька "ледачих" компонентів одним компонентом `Suspense`.
151
147
152
148
```js
153
149
importReact, { Suspense } from'react';
@@ -171,7 +167,7 @@ function MyComponent() {
171
167
172
168
### Запобіжники {#error-boundaries}
173
169
174
-
Якщо інший модуль не завантажився (наприклад, через виключений інтернет) — це призведе до помилки. Ви можете обробити ці помилки, щоб створити гарний досвід користування і керувати відновленням за допомогою [Запобіжників](/docs/error-boundaries.html). Після створення запобіжника, його можна використати де завгодно над "ледачим" компонентами для того, щоб показати стан помилки, коли виникає проблема з мережою.
170
+
Якщо інший модуль не зміг завантажитися (наприклад, через вимкнений інтернет), це призведе до помилки. Ви можете обробляти такі помилки, щоб створити гарний досвід користування і керувати відновленням за допомогою [Запобіжників](/docs/error-boundaries.html). Після створення запобіжника, його можна використовувати де завгодно над "ледачими" компонентами для того, щоб показати стан помилки, коли виникає проблема з мережею.
175
171
176
172
```js
177
173
importReact, { Suspense } from'react';
@@ -196,16 +192,16 @@ const MyComponent = () => (
196
192
197
193
## Розбиття коду на основі маршрутів {#route-based-code-splitting}
198
194
199
-
Рішення стосовно того, де саме вводити розбиття коду може бути доволі складним.
200
-
Ви хочете переконатися, що ви обираєте місця, які рівномірно розділять ваші бандли,
201
-
але в жодному разі не порушуватимуть роботу користувача.
195
+
Вирішувати, де саме запроваджувати розбиття коду, часом буває непросто.
196
+
Слід намагатися обирати місця для розбиття таким чином, щоб розбивати бандли рівномірно,
197
+
але при цьому не створювати проблем для користувача.
202
198
203
-
Вдалим місцем для початку може бути ваш файл з маршрутами додатку. Більшість людей
199
+
Почати можна із маршрутів додатку. Більшість людей
204
200
звикли до того, що перехід між сторінками займає певний час. Крім того, ви часто
205
201
перезавантажуєте цілу сторінку одразу, тому користувачі навряд чи будуть взаємодіяти
206
202
з іншими елементами на сторінці в цей час.
207
203
208
-
Нижче наведено приклад налаштування розбиття коду файла з маршрутами додатку, використовуючи
204
+
Нижче наведено приклад налаштування розбиття коду на основі маршрутів, використовуючи
209
205
бібліотеку [React Router](https://reacttraining.com/react-router/) за допомогою `React.lazy`.
210
206
211
207
```js
@@ -229,7 +225,7 @@ const App = () => (
229
225
230
226
## Іменовані Експорти {#named-exports}
231
227
232
-
Наразі `React.lazy` підтримує тількі експорти за замовчуванням. Якщо модуль, який ви імпортуєте використовує іменовані експорти, можна створити проміжний модуль, який повторно експортуватиме його за замовчуванням. Це гарантує працездатність tree shaking - механізма усунення невикористаного коду.
228
+
Наразі `React.lazy` підтримує тільки експорти за замовчуванням. Якщо модуль, який ви імпортуєте, використовує іменовані експорти, можна створити проміжний модуль, який повторно експортуватиме потрібний компонент за замовчуванням. Це гарантуватиме працездатність tree shaking - механізму усунення невикористаного коду.
0 commit comments