#node.js #express #testem
#node.js #экспресс #testem
Вопрос:
Мы используем Testem для обслуживания множества HTML-файлов (шаблонов). Под прикрытием Testem использует экспресс-метод «res.sendfile» для отправки статического файла обратно клиенту. На компьютерах Mac это происходит очень быстро — 1-2 мс на файл в соответствии с трассировкой сети Chrome. Однако на компьютере с Ubuntu это занимает 39 мс.
Это на последнем стабильном узле — 0.10.29. Testem использует Express 3.1.
Любые предложения о том, что может вызвать это или как я могу это диагностировать дальше?
Комментарии:
1. Предостережения: Я точно ничего не знаю о Testem; но, как полный аутсайдер, вот чего я не вижу в вашем вопросе: работают ли на Mac и на компьютере Ubuntu одна и та же версия node.js ? Установлена ли версия Mac через HomeBrew? Если вы отправляете 1 файл; получаете ли вы тот же результат для каждого файла, что и при отправке нескольких файлов? Если вы выполняете трассировку с каждой машины, каковы результаты — используют ли они одни и те же сетевые пути (при прочих равных условиях)? Является ли машина Ubuntu виртуальной машиной или коробкой? Что еще нам нужно, чтобы попытаться воспроизвести это?
2. Да, странно, что в OSX это, кажется, решается намного быстрее, является ли Ubuntu env каким-то удаленным сервером или локальной машиной?
3. @GeorgeStocker — та же версия Node (управляется через Nave, а не Homebrew). Ubuntu — это голый металл, без виртуальной машины. Мне нужно будет посмотреть, смогу ли я сократить сценарий, чтобы сделать простое воспроизведение.
Ответ №1:
Обычно я обслуживаю статические файлы напрямую, используя:
app.use( express.static(__dirname '/public') );
промежуточное программное обеспечение. Ваши статические файлы будут храниться в
/<app-path>/public
Это позволит вам /<app-path>/public/some.html
получить доступ к:
http://yoursite.com/some.html
Если вы введете file.html
/<app-path>/public/html/
, следующее разрешит:
http://yoursite.com/html/file.html
http://yoursite.com/public/html/file.html
Если желаемый результат — иметь чистые URL-адреса без расширений, то мое предложение не подойдет. Однако, если вы не возражаете против расширений файлов в URL-адресах, статическое промежуточное программное обеспечение должно сократить время запросов, возможно, даже значительно. Кроме того, может быть, движок шаблонов, подобный dust
or jade
, может помочь? Это позволит вам использовать res.render
fn.
Дело в том, что я видел, как время запросов увеличивается при использовании:
res.sendfile(somepath '/some.html');
Потому что express перед отправкой файла передаст его через промежуточное ПО разрешения пути регулярных выражений. Если у вас много маршрутов, это также может замедлить время запроса.
Надеюсь, это поможет!
Комментарии:
1. Почему разрешение пути регулярных выражений будет медленнее в Linux по сравнению с OS X?
2. Я не думаю, что регулярное выражение будет медленнее от ОС к ОС, но я знаю, что sendfile() по сравнению с обслуживанием статического файла медленнее. Это кажется сложной задачей для решения и определения того, чем именно отличается запуск вашего приложения express в OSX от Ubuntu. Может быть, вы могли бы попробовать запустить приложение с помощью экспресс-отладчика?
DEBUG=express:* node app.js