Skip to main content
Практика завдань

Способи оптимізації додатків

Gzip Compression

Стиснення даних за допомогою Gzip дозволяє зменшити обсяг даних, що передаються з сервера на клієнт. Це особливо важливо для зменшення часу завантаження сторінки. У більшості випадків стиснення Gzip увімкнено за замовчуванням на сервері, але рекомендується перевірити його роботу на всіх статичних ресурсах (HTML, CSS, JS).

Using CDN (Content Delivery Network)

CDN — це мережа розподілених серверів, яка прискорює доставку статичного контенту (зображення, CSS, JavaScript) до користувача, вибираючи найближчий сервер. Це зменшує час відповіді та прискорює завантаження сторінки.

  • Приклад: Використання сервісів, таких як Amazon S3 або Cloudflare для зберігання та доставки зображень, стилів і скриптів.

Static Resource Caching

Щоб прискорити роботу програми, важливо кешувати статичні файли (зображення, шрифти, CSS та JavaScript файли). Це зменшує кількість запитів до сервера та прискорює завантаження сайту. Використовуйте заголовки Cache-Control, ETag та Last-Modified для налаштування правильного кешування.

Code Splitting

Розподіл коду за допомогою Webpack або інших інструментів дозволяє завантажувати лише необхідні частини коду, а не всю програму одразу. Це зменшує початковий час завантаження сторінки.

  • Приклад: Використання React.lazy та Suspense для динамічного завантаження компонентів лише за потреби.

Using HTTP/2 Instead of HTTP/1

HTTP/2 значно прискорює передачу даних, дозволяючи паралельне завантаження ресурсів та стиснення заголовків. Це також зменшує затримки, оптимізуючи обробку мережевих запитів. Використання HTTP/2 є одним із простих способів покращити продуктивність.

Lazy Loading

Lazy loading — це техніка, коли ресурси або компоненти завантажуються лише тоді, коли вони стають необхідними. Це зменшує початкове завантаження сторінки, покращуючи її час завантаження.

  • Приклад: Завантаження зображень лише тоді, коли вони з'являються в видимій області екрану, використовуючи loading="lazy" в тегах <img>.

Optimizing Re-renders with useMemo, useCallback and memo

Часті рендери можуть значно уповільнити роботу програми. Щоб зменшити їх кількість, ви можете використовувати хуки useMemo, useCallback та React.memo:

  • useMemo: Кешує результат обчислення, якщо залежності не змінюються.
  • useCallback: Кешує функцію, щоб вона не створювалася знову при кожному рендері.
  • React.memo: Мемоізація компонент, що запобігає його повторному рендеру, якщо пропси не змінилися.

Using Web Workers

Web Workers дозволяють виконувати ресурсоємні операції в окремих потоках, не блокуючи головний потік програми. Це корисно для обробки даних або виконання складних обчислень у фоновому режимі.

  • Приклад: Використання Web Workers для обробки великих обсягів даних на клієнті без блокування інтерфейсу.

Virtualization and Pagination

Щоб оптимізувати продуктивність при роботі з великими списками або таблицями даних, ви можете використовувати віртуалізацію або пагінацію:

  • Віртуалізація: Відображаються лише елементи списку, видимі на екрані, що зменшує навантаження на рендеринг.
  • Пагінація: Розбивка великих даних на сторінки, що зменшує кількість елементів, які потрібно рендерити.

Image Optimization

  • Використання CDN для зберігання та швидкої доставки зображень.
  • Ліниве завантаження зображень, щоб завантажувати їх лише за потреби.
  • Використання прогресивних зображень (наприклад, форматів WebP або JPEG 2000), які завантажуються з низькою якістю, а потім покращуються до вищої якості.

Using debounce/throttle for Input

Щоб запобігти частим запитам під час введення даних, ви можете використовувати debounce або throttle. Це дозволяє зменшити кількість запитів, що надсилаються на сервер, наприклад, під час фільтрації даних або пошуку.

  • Debounce: Чекає певний час після останнього введення перед виконанням функції (наприклад, для пошуку під час введення).
  • Throttle: Виконує функцію з фіксованими інтервалами (наприклад, обмежуючи кількість запитів до сервера).

Performance Measurement Methods and Metrics

Для ефективної оптимізації важливо відстежувати продуктивність вашої програми. Ось кілька інструментів, які допоможуть вам виміряти різні метрики:

  1. Performance in DevTools: Вкладка Performance в інструментах розробника браузера дозволяє записувати всі дії на сторінці, включаючи рендеринг, виконання JavaScript та запити.
  2. Lighthouse: Вбудована утиліта Chrome для вимірювання продуктивності сторінки, SEO, доступності та інших метрик.
  3. Web-vitals: Набір метрик для вимірювання продуктивності, таких як Largest Contentful Paint (LCP), First Input Delay (FID) та Cumulative Layout Shift (CLS).
  4. React Profiler: Розширення React, яке допомагає відстежувати непотрібні повторні рендери та виявляти вузькі місця в продуктивності.
  5. WebPageTest: Сайт для аналізу продуктивності веб-сторінки з можливістю тестування швидкості завантаження з різних регіонів та на різних пристроях.

Content

Gzip CompressionUsing CDN (Content Delivery Network)Static Resource CachingCode SplittingUsing HTTP/2 Instead of HTTP/1Lazy LoadingOptimizing Re-renders with useMemo, useCallback and memoUsing Web WorkersVirtualization and PaginationImage OptimizationUsing debounce/throttle for InputPerformance Measurement Methods and Metrics

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань