用phantomjs打开很多网页

时间:2014-05-06 02:23:58

标签: javascript phantomjs javascript-objects

我使用phantomjs从一些使用ajax每秒自动更新的网站获取一些数据。这些网站会更新3个小时,因此我们需要每隔一段时间从这些网站获取一些数据。 我定义了一个打开每个网页的对象:

function myobj(nemad, url) {
    this.url = url;
    this.nemad = nemad;
    var me = this;
    nemad = require('webpage').create();
    nemad.open(url);
    this.myans = function() {
        var ua = nemad.evaluate(function() {

            return document.getElementById("MainContent");
        });
        return ua;
    }
}

我们有一个数组,对于这些网页(urls =[...];)有大约200个网址。为了打开页面,我们首先为每个URL定义一个新对象,并将其存储在如下所示的数组中:

var arr=[];
for ( i=0;i<urls.length;i++) {

    arr.push(new stocks(nemads[i], urls[i]));
}

当所有网页成功打开后,我们需要为每个网页调用myobj.myans();函数来获取数据。

setInterval(function() {
    var result = [];
    for (i = 0; i < arr.length; i++) {

        result.push(arr[i].myval());

    }

    console.log("Result => " + result );

}, 1000);

所以我们遇到了一些问题:

  1. 打开大约40个网页幻像崩溃后,我知道我们应该使用webpage.close()来释放内存,但我们必须长时间打开每个网页(3小时)并每秒接收一次数据。
  2. 最重要的问题是,当我们打开例如40页时,内存使用量每秒都在增加。每个页面大小为100kb,因此40页内存使用量约为4 MB,但每秒内存使用量增加到1GB大约10分钟,之后phantomjs崩溃。
  3. 有什么不对?

0 个答案:

没有答案