CasperJS であるサイトをクロールし、クロールした情報をデータベースに格納する処理を作成しましたが、クロール中にメモリが97%程度まで上がり、 Killed と表示され終了してしまいます。

メモリを大幅に使用してしまう原因は、以下のいずれかだと予想しています。

  1. クロールした情報を格納している配列が大きすぎる
  2. eachThen を使用しクロールするページが多すぎる

1.が原因の場合、ある程度の数になったら配列情報をデータベースに格納し、配列の中身をクリア。その後、クロールを継続する方法、または、参考になるサイト教えて頂けますでしょうか。

また、 2.が原因の場合を想定して、 casper.page オブジェクトの close() を使用したのですが、

Error: cannot access member `customHeaders' of deleted QObject                  

と表示されてしまいます。原因を教えて頂けますでしょうか。

上記のいずれでもない場合は、原因、または参考になるサイトを教えて頂けますでしょうか。

よろしくお願いします。

'use strict';

var i, e;
var targets = new Array();
var title = new Array();
var page = new Array();
var image = new Array();
var duration = new Array();
var video = new Array();
var ua = ('Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5');

for (i=0; i<10; i++) {
  targets.push('http://example.com&page=' + i);
}

var casper = require('casper').create({
  exitOnError: true,
  verbose: true,
  logLevel: "debug",
  pageSettings: {
    loadImages: false,
    loadPlugins: false
  }
}).userAgent(ua);

casper.start().eachThen(targets, function(response){
  this.thenOpen(response.data, function(response){

    //タイトルを取得
    e = this.getElementsInfo('.thumbInside>p>a');
    for (i=0; i < e.length; i++) {
      title.push(e[i]['text']);
    }

    //時間を取得
    e = this.getElementsInfo('.duration');
    for (i=0; i < e.length; i++) {
      duration.push(e[i]['text'].replace(/min/, "分").replace(/()/, ""));
    }

    //画像ファイルを取得
    e = this.getElementsInfo('.thumb>a>img');
    for (i=0; i < e.length; i++) {
      image.push(e[i]['attributes']['src']);
    }

    //ページURLを取得
    e = this.getElementsInfo('.thumb>a');
    for (i=0; i < e.length; i++) {
      page.push('http://example.com' + e[i]['attributes']['href']);
    }

  });
});

//動画ファイルURLを所得
casper.then(function(){
  this.eachThen(page, function(response){
    this.thenOpen(response.data, function(response){
      this.thenClick('#playbtn>a', function(){
        video.push(this.requestUrl);
      });
    });
  });
});

casper.thenOpen('http://localhost/add.php', {
  method: 'post',
  data: {
    'site': site,
    'title[]': title,
    'page[]': page,
    'image[]': image,
    'duration[]': duration,
    'video[]': video
  }
});

casper.run(function(){
  this.exit();
});