Serviți fișiere statice prin streaming de obiecte pentru Diet.js

diet-static-stream

Instalare

Utilizare

## Documentație Diet-static-stream poate lua mai multe opțiuni pentru utilizarea sa

cale [Șir] - Obligatoriu

Calea în care diet-static-stream va servi fișierele

index [String | Boolean] - Opțional (Implicit: index)

Numele fișierului pentru a căuta atunci când nu există o extensie specificată în cerere

dacă valoarea este booleană, va căuta fișierul index ca implicit, dacă este adevărat, altfel dacă este fals, nu va căuta automat un fișier index

defaultExtension [String] - Opțional (Implicit: html)

Extensie pentru a arăta atunci când nu există nicio extensie la cerere

cache [String | Function] - Opțional (Implicit: vârsta maximă = 3600)

Valoarea Control-Cache pentru a seta în răspunsul antetului, dacă funcția este furnizată, atunci toate cererile sunt executate în cadrul acestei funcții, trecând semnalul $, dacă funcția returnează fals, atunci toate antetele necesare pentru cache vor fi excluse

scriptName [Boolean] - Opțional (Implicit: false)

Dacă necesită fișier de extensie la cerere, dacă opțiunile defaultExt și index adevărate vor fi ignorate

hook [Object] - Opțional

Dacă este nevoie de cârlige la cerere, acest lucru este la îndemână pentru setarea anteturilor personalizate sau a oricărei alte modificări necesare, această proprietate este o hartă a evenimentelor executate într-un anumit proces

request [Funcție] ($: Signal) - Opțional Cârligul de solicitare este executat chiar când pornește modulul, înainte ca fișierul să fie căutat, semnalul $ este răspunsul la cerere transmis din middleware

succes [Funcție] ($: Semnal, anteturi: Obiect, fișier: Obiect) - Opțional Cârligul de succes este executat când fișierul este deschis cu succes, această funcție injectează semnal $ împreună cu anteturile ca anteturi implicite setate pentru fișierul găsit și fișierul ca obiect care conține proprietatea utilizată pentru flux

fail [Funcție] ($: Signal) - Opțional Cârligul de eșec este executat când fișierul solicitat nu a fost găsit, chiar înainte de a răspunde la 404, semnalul $ este transmis din middleware

cache [Funcție] ($: Signal) - Opțional Cârligul cache este executat atunci când fișierul solicitat a fost găsit, dar nu a fost modificat de la ultima cerere, făcând răspunsul să fie 304, semnalul $ este trecut din middleware

Comparație de referință

Așa cum s-a explicat anterior, atât fluxul dietetic-static, cât și fluxul dietetic-static realizează același scop pentru trimiterea datelor statice către client, datorită timpului necesar pentru a pune datele la dispoziția clientului și au realizat 2 faze care sunt:

Resolve Time Rezolvarea timpului se bazează pe cât durează serverul pentru a pune la dispoziție datele și a începe să trimită către client, acest proces a fost realizat folosind console.time () chiar înainte ca modulul să înceapă încărcarea fișierului, console.timeEnd () este executat când modulul începe să trimită.

Timpul de răspuns Timpul de răspuns se bazează pe cât timp clientul așteaptă ca serverul să înceapă să primească datele solicitate, acest lucru depinde de latență și, în principal, Timpul de rezolvare pe server, acest proces a fost realizat folosind comanda cURL

Testele au fost făcute folosind fișiere false create din fallocate pe Linux, testele au fost făcute cu aceste specificații:

  • OS: Linux/Debian Ubuntu 16.04 x64
  • CPU: Intel Core I5 ​​3.30GHz
  • RAM: 4gb x 2 1600mhz
  • HDD: 256 GB 7200 rpm

Care este diferența dintre dietă-statică și aceasta?

Răspunsul este simplu, dietetic, folosește fs.readFile și, conform documentelor API ale node.js, citește întregul conținut al unui fișier, ceea ce înseamnă că toate datele dintr-un fișier sunt stocate temporar în memorie, este bine dacă citiți doar câteva fișiere cu dimensiuni mici.

Dar ce se întâmplă când îl utilizați pe un server care are sute de solicitări de fișiere media, acest lucru ar putea duce serverul la supraîncărcare și blocare.

Acest pachet folosește obiecte de flux pentru a trimite bucăți de date atunci când acestea sunt citite, acest lucru nu încarcă date în memorie și putem evita supraîncărcarea memoriei pentru sute de solicitări

## Testare Puteți testa modulul executând următoarele comenzi: