102 votes

node.js ou nginx frontend pour servir des fichiers statiques?

Existe-t-il un repère ou une comparaison plus rapide: placez nginx devant le nœud et laissez-le servir les fichiers statiques directement ou utilisez simplement le nœud et utilisez-le pour les fichiers statiques?

La solution de nginx semble être plus facile à gérer pour moi, des idées?

131voto

m33lky Points 1608

Je vais être en désaccord avec les réponses ici. Alors que le Nœud sera parfait, nginx sera très certainement plus rapide lorsqu'il est configuré correctement. nginx est mis en œuvre efficacement dans C à la suite d'une tendance similaire (retour à une connexion uniquement si nécessaire) avec une petite empreinte mémoire. En outre, il prend en charge la sendfile syscall pour servir ces fichiers aussi vite que vous pouvez éventuellement obtenir à servir des fichiers, puisque c'est le noyau du système d'exploitation lui-même que de faire le travail.

Maintenant, nginx est devenu le standard de facto comme l'interface serveur. Vous pouvez l'utiliser pour ses performances dans de servir les fichiers statiques, gzip, SSL, et même d'équilibrage de la charge plus tard.

P. S.: Ceci suppose que les fichiers sont vraiment "statique" comme au repos sur le disque au moment de la demande.

88voto

gremo Points 7116

J'ai fait une rapide ab -n 10000 -c 100 pour la signification de l'statique 1406 octet favicon.ico, en comparant nginx, Express.js (statique middleware) et cluster Express.js. Espérons que cela aide:

enter image description here

Malheureusement je ne peux pas tester 1000 ou même 10000 requêtes simultanées comme nginx, sur ma machine, commencera à lancer des erreurs.

EDIT: comme l'a suggéré artvolk, voici les résultats de cluster + static middleware (plus lent):

enter image description here

12voto

Will Stern Points 1727

Quoi qu'il en soit, j'aurais configuré Nginx pour mettre en cache les fichiers statiques … vous verrez une énorme différence là-bas. Ensuite, que vous les serviez en mode express ou non, vous obtenez essentiellement les mêmes performances et le même allégement de charge sur votre application express.

1voto

freakish Points 20067

Node.js de manière autonome. Vous n'avez pas besoin d'utiliser nginx avec Node.js plus (voir cette entrée pour plus de détails). Par conséquent, il n'y a pas de point à l'aide de nginx uniquement pour cette tâche simple. Comme pour la performance je ne sais pas vraiment, mais je ne pense pas qu'il n'y aura aucune différence notable.

En passant: est-il une différence notable (de performance) entre deux environnements de servir les fichiers statiques? Lecture des fichiers est un OS de l'emploi et de les envoyer au client dépend (pour la plupart) sur la connexion, n'est-ce pas?

0voto

Brad Harris Points 1274

C'est une question difficile à répondre. Si vous avez écrit un très léger nœud de serveur juste à servir les fichiers statiques, il serait probablement faire mieux que nginx, mais il n'est pas simple. (Voici une "référence" de la comparaison d'une nodejs serveur de fichiers et lighttpd - ce qui est semblable dans la performance de ngingx au moment de servir les fichiers statiques).

La Performance en matière de servir les fichiers statiques en revient souvent à plus que juste le serveur web faire le travail. Si vous voulez la meilleure performance possible, vous allez utiliser un CDN pour servir vos fichiers afin de réduire la latence pour les utilisateurs finaux, et de profiter de bord de la mise en cache.

Si vous n'êtes pas inquiet à ce sujet, un nœud peut servir les fichiers statiques très bien dans la plupart des situation. Le nœud se prête à de code asynchrone, il s'appuie également sur puisque c'est monothread et tout blocage i/o peut bloquer l'ensemble du processus, et de dégrader les performances de vos applications. Plus que probablement, vous écrivez votre code dans un non-blocage de la mode, mais si vous faites n'importe quoi de façon synchrone, vous risquez de provoquer de blocage, qui se dégrade à quelle vitesse les autres clients peuvent obtenir leurs fichiers statiques servi. La solution facile est de ne pas écrire de code bloquant, mais parfois ce n'est pas une possibilité, ou vous ne pouvez pas toujours faire respecter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X