Il precaricamento di un file piccolo in Node.js migliorerà in modo significativo l'efficienza del server Web?

3

Quando si risponde ad una richiesta HTTP per un file comunemente usato sul mio server web, ad esempio index.html, piuttosto che leggere il file ogni volta, elencho quelle risorse popolari in una matrice e le leggo all'avvio del server, quindi per tutte le richieste questi file non devono essere letti.

Penso che questo potrebbe aumentare l'efficienza del server web se il traffico raggiunge livelli estremi. Ma in realtà non so come funziona il lettore di file internamente, quindi potrei sbagliarmi. La lettura di un file in precedenza migliora significativamente le prestazioni del server Web con Node.js?

    
posta Viziionary 26.03.2016 - 07:42
fonte

2 risposte

4

Mentre Tim ha ragione nel dire che le chiamate di sistema possono essere piuttosto veloci, sono comunque lente rispetto a ottenere solo un blocco dalla propria memoria.

La cosa più importante è che tutti gli altri livelli della cache non hanno le stesse informazioni che hanno l'applicazione. Ad esempio il sistema operativo non sa che il file verrà servito utilizzando HTTP. L'app lo fa. Può quindi non solo memorizzarlo nella cache, ma anche memorizzare una versione compressa con gzip, con cui può rispondere a tutti i client che accettano risposte gzip (che è probabilmente il 99% di esse). Se un file viene richiesto ad altissima frequenza, non vuoi essere gzip per ogni richiesta.

Quindi sì, può fare una grande differenza, ma l'unico modo per dire è misurando. La scrittura di cache personali introduce una fonte di errori (perdite di memoria, stato scaduto, ...), quindi memorizza solo le cose che causano in modo dimostrabile un collo di bottiglia. Per tutto il resto, segui la soluzione più semplice.

    
risposta data 26.03.2016 - 09:09
fonte
2

Tenere presente qualsiasi memorizzazione nella cache eseguita dal sistema operativo / file del server. Ci sono buone probabilità che una volta aperti, li stai leggendo dalla cache del sistema. Mantenerli in memoria come si fa diventa controproducente solo se l'applicazione viene messa fuori servizio, ma sembra che tu sia più interessato a cosa succederebbe sotto carico pesante, quindi non è un problema.

Ciò che stai facendo, in pratica, è salvare le chiamate di sistema sottostanti a open() , read() e close() - che potrebbero darti un piccolo aumento di velocità - ma sono incredibilmente veloci se il SO ha i file nella cache.

Probabilmente è un piccolo aiuto al costo di pochi kilobyte di memoria, ma non sarebbe veramente scalabile. Se tu avessi, per esempio, centinaia o migliaia di pagine, probabilmente stai meglio permettendo al sistema operativo di memorizzarle nella cache o memorizzarle in un modo in cui l'I / O non è un grande collo di bottiglia per recuperarle.

    
risposta data 26.03.2016 - 08:49
fonte

Leggi altre domande sui tag