我最近编写了一个用于HTTP路由的nodejs包अनुमार्गाक (Anumargak)。我面临一个奇怪的性能问题。
它有一个方法on
来注册一个路由,find
来找到注册的路由。
var anumargak = Anumargak();
anumargak.on("GET",'/some/url',fn);
anumargak.find("GET",'/some/url');
当用户调用on
方法时,它首先调用find
方法检查路由是否已经注册,否则将路由信息保存在2d数组中。当用户调用find
方法时,它只查找2d数组中的条目。
Anumargak.prototype.on = function(method,url,fn){
if(this.find(method,url)){
this.count --;//count of unique registered routes.
}
this.count +=1;
this._on(method,url,fn);//_on method has actual logic of saving route information
}
Anumargak.prototype.find = function(method,url){
var result = this.staticRoutes[method][url];
if(result) return result.fn;
else{
//handles dynamic routes
}
return this.defaultFn;
}
find
方法不依赖于on
方法。但是当我从on
方法调用find方法时,find方法的性能降低了一半。我只调用on
方法一次并测试find
方法的性能。可能的原因是什么?
我正在使用node v9.5.0。
答案 0 :(得分:1)
我不确定性能问题是什么。但是调用this.find()
是不正确的。因为this.find
接受实际的URL,而注册的URL可以具有正则表达式或参数详细信息。
因此,我重写了代码以解决解决性能的问题。