@retyui

Разумное подключение middleware в Express?

Мне часто приходится видеть вот такую структуру подключения:
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger());
...
app.use(routes);
...
app.use(express.static(path.join(__dirname, 'public')));

Статика раздается после того как пробежится по некоторым роутерам. И бывает такое, что где-то происходит десериализация юзера, а это один запрос к бд.
Чем вы нагружаете бд и увеличиваете ответ при раздаче статики.
Также есть смысл от логирования запросов к статике, от чего можно избавится подключив статику перед логером:
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(logger());
...
app.use(routes);
...


Не берем во внимание что статику лучше не радовать нодай .
Есть ли в это предложении капля разумного?
  • Вопрос задан
  • 961 просмотр
Пригласить эксперта
Ответы на вопрос 2
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Конечно есть, можете проверить скорость отдачи при помощи банального apache benchmark. Но вообще к самому принципу цепочек middleware есть много вопросов и претензий, гораздо эффективнее маршрутизировать URL к функциям не через цепочки, а через хеш-таблицы. Иначе, при сотнях мидлверов все умирает, а в крупных проектах так и происходит. Даже если не брать в учет CDN и nginx, и отдавать статику нодой, то лучше не с диска. Статики обычно мало, ну пусть 15мб (не считая пользовательского контента конечно), так что у Вас не найдется 15мб памяти? Более того, в памяти можно держать уже буфер, минифицированный и упакованный в gzip (если нужно).
Ответ написан
mr_T
@mr_T
Web-разработчик
Так все же достаточно очевидно и зависит от требований. Если доступ к файлу ограничен, то должна быть логика для проверки ограничений => так или иначе придется настроить контроллер или middleware для этой самой проверки перед тем, как отдастся файл. Если нужно логировать запросы к файлам, то (внезапно!) нужно подключать логгер перед отдачей файлов.

Короче, капля разумного в таком варианте, возможно, и есть, но случаи, описанные выше, на мой взгляд, встречаются достаточно редко для того, чтобы можно было ответить, что ни капли разумного здесь нет. Это еще если не говорить о том, чего ты просил не брать во внимание, хотя во внимание это берется на реальных проектах всегда.

Кстати, десериализация юзера может быть не напрямую из базы, а, например, из сессии.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы