iisnode的性能非常慢

我发现iisnode比使用节点命令慢。

使用iisnode有很多好处 ,但性能不好。

我从这里使用configuration文件。

任何想法如何加快?


更新:

我注意到每个页面调用都会重新连接一个新的mongodb连接。

我怎样才能防止它?

这里有一个提示,要将Node.js与IIS7集成到Windows 64位服务器上。 以下提示也解决了iisnode的一些不佳的性能问题,并演示了如何使用Node.js本机扩展。

概要:

创build专用于node.js的新的非托pipe集成32位应用程序池 。 没有其他应用程序应该使用此池。

这适用于64位,但一些node.js本机扩展(如Coconut2D)需要32位,因为SQLite包装。 如果你不使用本地扩展,那么你可以一路走到64位!

  1. 下载: iisnode-core-iis7-v0.1.19.0-x64.msi

  2. 使用以下命令安装它: msiexec /i iisnode-core-iis7-v0.1.19.0-x64.msi WOW=1 。 这将在64位机器上安装32位版本的iisnode。 请注意, iisnode.dll将安装在C:\Program Files (x86)\iisnode\iisnode.dll

  3. 下载node.js的32位版本(例如node-v0.12.0-x86.msi )并将其安装到C:\nodejs

  4. 创build一个新的应用程序池

    名称:node.js
    pipe理stream水线模式:集成 
    
     .NET Framework版本:没有托pipe代码
    启用32位应用程序:True
    身份:pipe理员
    
  5. 假设您的Node.js服务器脚本文件是server.js 。 转到Web文件夹并创build文件node_start.cmd 。 在命令文件中,您应该将当前path更改为您的wwwroot并使用server.js文件启动node.js。 你应该使用双引号的path。

     C:
     cd“C:\ HostingSpaces \ ... \ wwwroot”
     “C:\ nodejs \ node.exe”“C:\ HostingSpaces \ ... \ wwwroot \ server.js”
    
  6. 在你的server.js确保你有process.env.PORT

     var http = require('http');
     http.createServer(function(req,res){
        你的代码在这里
     })听(process.env.PORT);
    
  7. (可选)如果您正在使用任何node.js本机扩展 (如Coconut2D,SQLite,Cairo或WebKit模块),则必须将*.node文件和DLL复制到wwwroot\node_modules文件夹中。 确保您还设置NTFS安全性以允许执行这些文件或提升应用程序池以模拟pipe理员。 要加载本地扩展,使用require() ,如下所示。

     var http = require('http');
     var Coconut2D = require(“Coconut2D.node”);
     http.createServer(function(req,res){
        你的代码在这里
     })听(process.env.PORT);
    
  8. 将下面的web.config放在你的web根目录下(例如C:\HostingSpaces\...\wwwroot )。 这将使IIS7能够处理任何非节点文件,如图像,静态HTML文件和XML文件,并让node.js只处理自己的服务器端脚本

    让IIS处理静态文件并在node.js上并行运行服务器端脚本是非常值得推荐的做法,它可以提高网站的性能。

    在这个例子中,我通过使用重写规则来处理带有iisnode.asp文件。 将*.asp*replace为您的node.js服务器脚本扩展名(例如*.njs* )。 请注意,通配符模式中不存在根斜杠。 这是重要的,以及模式结尾的最后一个*

 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="iisnode" path="node.js" verb="*" modules="iisnode" /> </handlers> <iisnode nodeProcessCommandLine="&quot;C:\...\start_node.cmd&quot;" /> <defaultDocument> <files> <remove value="index.php" /> <remove value="default.aspx" /> <remove value="iisstart.htm" /> <remove value="index.html" /> <remove value="index.htm" /> <remove value="Default.htm" /> </files> </defaultDocument> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> <rewrite> <rules> <rule name="CavoBoutique" patternSyntax="Wildcard"> <match url="*.asp*" /> <action type="Rewrite" url="node.js" logRewrittenUrl="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>