意外的性能问题

时间:2018-04-13 08:03:48

标签: node.js performance router

我最近编写了一个用于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。

1 个答案:

答案 0 :(得分:1)

我不确定性能问题是什么。但是调用this.find()是不正确的。因为this.find接受实际的URL,而注册的URL可以具有正则表达式或参数详细信息。

因此,我重写了代码以解决解决性能的问题。