2012-12-14 12 views
6

Szukałem recenlty badając nodejs i phantomjs i napisałem mały kod, by zmierzyć czas wczytywania strony. Zauważyłem, że czas ładowania strony różni się między kodem phantomjs owiniętym w nodejs a czystym kodem phantomjs. Poniżej znajduje się kod: phantomjs i nodejs dla porównania:Nodejs + phantomjs vs. czysty phantomjs - czas wczytywania strony

Nodejs:

var http = require('http'), 
phantom = require('phantom'); 
url = require("url"); 

http.createServer(function (request, response) { 
    var start = Date.now(); 

    request.on('end', function() { 
    phantom.create(function(ph) { 
     ph.createPage(function(page) { 
     var _get = url.parse(request.url, true).query; 

     page.open(_get[url], function(status) { 
      if (status == 'success') { 
      var time = Date.now() - start; 
      console.log(time); 
      } 
     }); 
     }); 
    }); 
    }); 
}).listen(80,''); 

Phantomjs:

var page = require('webpage').create(); 
var system = require('system'); 

var address = system.args[1]; 
var time = 0; 
var start = Date.now(); 

page.open(address, function (status) { 
    time = Date.now() - start; 
    console.log(time + ''); 
}); 

Czas jest zwykle 4 razy dłużej podczas testowania witryny poprzez phantomjs. Jakieś pomysły?

+1

Zrzuć ruch sieciowy z PhantomJS (w obu przypadkach) i porównaj. Zobacz https://github.com/ariya/phantomjs/wiki/Network-Monitoring. –

+1

Proszę wyjaśnić, bezpośrednie wywołanie phantomjs jest 4 razy dłuższe niż phantomjs i nodejs? –

+0

http://phantomjs.org/network-monitoring.html (Nowe łącze) –

Odpowiedz

0

PhantomJS nie obsługuje danych wyjściowych, tylko otwiera strony internetowe. phantomjs-node połączyć je w następujący sposób - tworzy instancję ExpressJS i przesyła dane przez swój plik socket.io plus za pomocą dwóch kolejnych bibliotek. I dane idzie:

WebPage> Phantom.js>dnode + node-browserify> Express.js> Socket.io> node.js

Mam ten sam problem z szybkości i wydajności teraz czyta o node-webkit, to natywny WebKit bez kul, który obsługuje moduły Node.js.