node.js在循环迭代后崩溃

时间:2013-05-08 10:00:08

标签: javascript node.js firefox

我正在尝试使用node.js编写一个性能工具,因此我可以将其自动化,并将结果存储在MySQL中。该工具应该收集浏览器加载特定网页所花费的时间。我正在使用HttpWatch来测量性能,结果以秒为单位显示。使用的浏览器是Firefox。 下面是我用来运行性能测试的一段脚本:

var MyUrls = [
    "http://google.com",
    "http://yahoo.com"
    ];    

try {

       var win32ole = require('win32ole');
       var control = win32ole.client.Dispatch('HttpWatch.Controller');
       var plugin = control.Firefox.New();
       for (var i=0; i < MyUrls.length; i++) {
          var url = MyUrls[i];
          console.log(url);
          for(var j=0; j < 14; j++) {
            // Start Recording HTTP traffic
            plugin.Log.EnableFilter(false);
            // Clear Cache and cookier before each test
            plugin.ClearCache();
            plugin.ClearAllCookies();   
            plugin.ClearSessionCookies();
            plugin.Record();
            // Goto to the URL and wait for the page to be loaded
            plugin.GotoURL(url);
            control.Wait(plugin, -1);
            // Stop recording HTTP
            plugin.Stop();
            if ( plugin.Log.Pages.Count != 0 )
            {           
               // Display summary statistics for page
               var summary = plugin.Log.Pages(0).Entries.Summary;
               console.log(summary.Time);
            }
          }
       }
       plugin.CloseBrowser();
    } catch(e) {
        console.log('*** exception cached ***\n' + e);
    } 

在内循环的第二次迭代之后,我收到以下错误:

C:\xampp\htdocs\test\browser-perf>node FF-load-navigation.js
http://localhost/NFC-performance/Bing.htm
[Number (VT_R8 or VT_I8 bug?)]
2.718
[Number (VT_R8 or VT_I8 bug?)]
2.718
OLE error: [EnableFilter] -2147352570 [EnableFilter] IDispatch::GetIDsOfNames Au
toWrap() failed

以前有人见过这个吗?你能救我吗?

1 个答案:

答案 0 :(得分:0)

您必须记住该节点是异步的

因此for循环同时运行到plugin.CloseBrowser();,这显然不是你想要的,因为它导致它关闭,这将导致for循环出现问题。

而是希望在 for循环结束后运行

请查看async以获得一种简单的方法。

async.each(MyUrls, function (callback) {
    ...
    callback()
}, function(err){
    plugin.CloseBrowser();
});

必须为你的内部循环做同样的事情。