服务器端路由上的 Meteor iron-router - 为什么这么慢?

Meteor iron-router on server-side route - why so slow?

11,222 requests/sec 原始节点...

var http = require('http');
http.createServer(function(req, res) {
    res.end('done');
}).listen(1337, '127.0.0.1');

=

gobench -c 100 -t 5 -u http://localhost:1337

Requests:                            56112 hits
Successful requests:                 56112 hits
Network failed:                          0 hits
Bad requests failed (!2xx):              0 hits
Successfull requests rate:           11222 hits/sec
Read throughput:                   1369156 bytes/sec
Write throughput:                  1349088 bytes/sec
Test time:                               5 sec

但是在 Meteor 中使用 Iron-Router 服务器端路由返回同样的东西...

Router.route('/test', function() {
    this.response.end('done');
}, {
    where: 'server'
});

=

gobench -c 100 -t 5 -u http://localhost:3000/test

Requests:                             6544 hits
Successful requests:                  6544 hits
Network failed:                          0 hits
Bad requests failed (!2xx):              0 hits
Successfull requests rate:            1308 hits/sec
Read throughput:                    189776 bytes/sec
Write throughput:                   164771 bytes/sec
Test time:                               5 sec

瓶颈是 Meteor 还是 Iron-Router?

瓶颈是几件事的结合。

当您使用原始 http 服务器时,您会错过 Meteor 和 Iron Router(bodyparser 和路由匹配)和路由匹配工具包(meteor 端)使用的中间件。还要记住 Iron Router 使用正则表达式来匹配路由。

另一个是 meteor run 模式(不是 meteor build 的捆绑应用)在应用本身之上有一个额外的代理服务器。

还有一些其他中间件可以检查从何处路由文件(即它是否是静态资产)(包括针对哪种架构(cordova 或客户端)。

此外,index.html 文件必须在 Meteor 中的每个运行时生成。

Meteor 使用的中间件的提示来自 webapp 包:https://github.com/meteor/meteor/blob/devel/packages/webapp/webapp_server.js