Lazy loading ресурсів

Майже кожен додаток бо # x301; більшу частину часу працює з зовнішніми ресурсами. Наприклад, завантажує інформацію з файлів і відправляє запити в бази даних. Крім цього, відбувається ініціалізація компонент, необхідних для роботи самого додатка (бібліотеки і фреймворки).

Lazy loading ресурсів

Ефективна робота з ресурсами дозволяє підвищити швидкість програми. Lazy loading - простий підхід оптимізації управління ресурсами.

Lazy loading

Робота з будь-яким зовнішнім ресурсом зазвичай складається з двох етапів:
  • Підключення. Наприклад, ініціалізація з'єднання з MySQL або читання файлу налаштувань програми.
  • Використання. Наприклад, отримання даних з MySQL або використання підключеного компонента.

Лінива ініціалізація з'єднань

Найбільш часто в додатку використовується робота з базами даних (MySQL, Memcache, Redis і т.п.). Зазвичай підключення до бази инициализируется десь на початку роботи з програмою:

# Ми не використали запити до Memcache, хоча встановили до нього з'єднання

Lazy loading ресурсів

Lazy loading в цьому випадку передбачає установку з'єднання тільки в момент першого звернення до ресурсу. наприклад:

# Lazy loading для з'єднання з MySQL

Всі звернення до MySQL повинні будуть проходити через клас mysql. Тоді установка з'єднання відбудеться після першої спроби відправити запит до бази. Такий же принцип буде працювати для будь-яких ресурсів, що вимагають установки з'єднань, наприклад Memcache:

# Lazy loading для з'єднання з Memcache

Ліниве підключення компонент

Додаток зазвичай представляє з себе велику купу файлів, в яких знаходяться різні компоненти (класи і функції). Підключення компоненти - це підключення файлу. На кожній окремій сторінці в кращому випадку використовується 20. 30% всіх доступних компонент в додатку, а їх підключення зазвичай виглядає так:

# Жоден з підключених файлів не потрібен на цій сторінці

Зрозуміло, що немає сенсу підключати всі файли відразу. У PHP для цього передбачений механізм автозавантаження. Він дозволяє виконати певну функцію при зверненні до класу, який не існує.

Lazy loading ресурсів

Це дозволить завантажувати файли тільки тоді, коли вони потрібні. Для використання цього методу, необхідно організовувати всі компоненти в класи. Часто зручно використовувати просто статичні класи:

# Підключаємо файл з класом mysql при першому зверненні до нього

У реальних додатках файли класів часто знаходяться в різних папках. Для цього зручно використовувати карту шляхів:

# Карту класів зручно збирати автоматично, наприклад за допомогою функції glob () і кешувати в файл map.php

Звичайно, на практиці існують обов'язкові для завантаження компоненти, які потрібно підключати завжди. У підсумку, додаток буде структуровано так:

Ліниве підключення файлів даних

У багатьох додатках існують файли, які зберігають дані для різних цілей. наприклад:
  • Установки програми (параметри підключень до баз даних і т.п.)
  • Підготовлені переклади на різні мови
  • Карта класів для автозавантаження
Lazy loading ресурсів

Для таких випадків також зручно використовувати ледачу завантаження. Наприклад, нехай настройки програми зберігаються у файлі виду:

# Приклад файлу налаштувань програми

Тоді слід використовувати обгортку, яка буде підключати цей файл при першій необхідності:

# Завантажуємо налаштування програми тільки при першому зверненні до них

Те ж саме можна було б зробити і для системи завантаження перекладів:

Це може знизити обсяг необхідних для завантаження даних в кілька разів для нового відвідувача.

розвантаження фреймворка

І змінити виклик в HTML:

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

Для зручності можна використовувати кеш APC (взагалі можна використовувати будь-яку зовнішню базу даних для цього). Тоді логіка підрахунку залишиться в самому фреймворку. Але ми доповнимо її інструкцією розвантаження:

Ми зберегли в APC параметри підключення до MySQL і запит, який слід виконувати без завантаження фреймворку.

Lazy loading ресурсів

Тепер перед ініціалізацією фреймворка ми можемо додати обробку розвантаження:

# Якщо в ключі є дані, ми виконаємо потрібні дії без завантаження фреймворку

Використовувати розвантаження фреймворка слід в тих випадках, коли має місце велика кількість повторних простих операцій.

Найважливіше

Lazy loading ресурсів

матеріали по темі