дієта-статичний-потік

Подавати статичні файли через потокові об’єкти для Diet.js

пакет

Встановлення

Використання

## Документація Дієта-статичний потік може мати кілька варіантів використання

шлях [рядок] - обов’язковий

Шлях, де diet-static-stream буде обслуговувати файли

index [Рядок | Логічне] - Необов’язково (за замовчуванням: index)

Ім'я файлу, яке слід шукати, якщо в запиті немає вказаного розширення

якщо значення булеве, він буде шукати файл індексу за замовчуванням, якщо true, інакше якщо значення false, він не буде виконувати автоматичний пошук файлу індексу

defaultExtension [рядок] - Необов’язково (за замовчуванням: html)

Розширення для пошуку, коли розширення у запиті відсутнє

кеш [рядок | функція] - необов’язково (за замовчуванням: max-age = 3600)

Значення Control-Cache, яке потрібно встановити у відповіді заголовка, якщо функція надана, то всі запити виконуються в рамках цієї функції, передаючи сигнал $, якщо функція повертає false, то всі необхідні заголовки для кешу будуть виключені

scriptName [Boolean] - Необов’язково (за замовчуванням: false)

Чи вимагатиме файл розширення у запиті, якщо істинні параметри defaultExt та index будуть ігноровані

хук [Об’єкт] - Необов’язково

Якщо є потреба в хуках за запитом, це зручно для встановлення користувацьких заголовків або будь-яких інших необхідних змін, ця властивість є картою подій, які виконуються в певному процесі

запит [Функція] ($: Сигнал) - Необов’язково Хук запиту виконується безпосередньо під час запуску модуля, перед тим, як здійснювати пошук файлу, сигнал $ - це відповідь на запит, передана з проміжного програмного забезпечення

успіх [Функція] ($: Сигнал, заголовки: Об'єкт, файл: Об'єкт) - Необов'язково Гачок успіху виконується, коли файл успішно відкривається, ця функція вводить $ signal разом із заголовками як заголовки за замовчуванням, встановлені для знайденого файлу, та файл як об'єкт, що містить властивість, що використовується для потоку

відмова [Функція] ($: Сигнал) - Необов’язково Помилка гачка виконується, коли запитаний файл не знайдено, безпосередньо перед відповіддю 404, сигнал $ передається з проміжного програмного забезпечення

кешована [Функція] ($: Сигнал) - Необов’язково Кешований хук виконується, коли запитаний файл був знайдений, але він не був змінений з моменту останнього запиту, що робить відповідь 304, сигнал $ передається з проміжного програмного забезпечення

Порівняльне порівняння

Як пояснювалося раніше, і дієтично-статичний, і дієтично-статичний потік досягають однакових цілей для надсилання статичних даних клієнту, через час, необхідний для того, щоб зробити дані доступними для клієнта, я зробив 2 етапи, які:

Час розв’язання Час розв’язання базується на тому, скільки часу займає сервер, щоб зробити доступними дані та почати надсилати їх клієнту, цей процес було виконано за допомогою console.time () безпосередньо перед тим, як модуль починає завантажувати файл, виконується console.timeEnd () коли модуль починає надсилати.

Час відповіді Час відповіді базується на тому, як довго клієнт чекає, поки сервер почне отримувати запитувані дані, це залежить від затримки та, в основному, часу розв’язання на сервері, цей процес був досягнутий за допомогою команди cURL

Тести виконувались із використанням підроблених файлів, створених з fallocate на Linux, тести проводились з такими специфікаціями:

  • ОС: Linux/Debian Ubuntu 16.04 x64
  • Процесор: Intel Core I5 ​​3,30 ГГц
  • Оперативна пам'ять: 4 ГБ x 2 1600 МГц
  • Жорсткий диск: 256 Гб 7200 об/хв

Яка різниця між дієтично-статичним та цим?

Відповідь проста, дієтична статика використовує fs.readFile, і, згідно з документами API node.js, він зчитує весь вміст файлу, це означає, що всі дані з файлу тимчасово зберігаються в пам'яті, це добре, якщо ви читаєте лише декілька файлів із малими розмірами.

Але що трапляється, коли ви використовуєте його на сервері, який має сотні запитів на мультимедійні файли, це може призвести до перевантаження та аварійного завершення роботи сервера.

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

## Test Ви можете протестувати модуль, виконавши такі команди: