为什么PhantomJS Page实例会渲染以前的页面? (使用Phantom页面池)

时间:2015-10-10 15:45:11

标签: node.js phantomjs

我正在使用PhantomJS buildpack在Heroku上运行Express服务器。它的目的是充当屏幕截图服务并捕获发送给它的网址的图像。我创建了一个页面实例池(使用sgentle的phantomjs-node包装器),以便在有多个请求时加快呈现过程:

var _pages = [];
for (var i = 0; i < PHANTOM_PAGE_INSTANCES; i++) {
  (function(i) {
    phantom.create(function(ph) {
      ph.createPage(function(page) {
        page.set('viewportSize',{width:1200,height:630},function(err){
          _pages[i] = page
        });
      });
    });
  })(i)
}

但是,稍后在Express回调中,我注意到在重负载下,每个实例经常呈现它之前访问过的页面:

function generate_preview_image(req, res) {
  // Get a random phantom page instance:
  var index = Math.floor(Math.random() * PHANTOM_PAGE_INSTANCES);
  // Make sure it is not currently being used:
  while (_pages[index].busy === true) {
    index = Math.floor(Math.random() * PHANTOM_PAGE_INSTANCES);
  }
  _pages[index].busy = true;
  _pages[index].open(req.body.url, function(status) {
    _pages[index].render(req.url + '.png', function(err) {
        res.send({'success': true});
        _pages[index].busy = false;
    });
  });
}

app.post('/gen_image/', generate_preview_image);

例如page.open()回调是否可能&#34; x&#34;在实例&#34; x&#34;之前由其他一个页面实例触发。实际上已经打开了页面?

0 个答案:

没有答案