処理時間を短縮するには、いくつかの方法があります。
1。より強力なサーバ/コンピュータ(マチューが正しく言及した通り)を入手してください。
はい、あなたはこの質問とは無関係だと主張することができますが、それを掻くことの問題は非常にです。最適化されていない$ 8 VPSの予算では、初期スクリプトは9589ms
で実行されていましたが、これは既に30%向上しています。
2。画像の読み込みをオフにします。それは...少し助けになります。 8160ms
page.settings.loadImages = false;
3。ページを分析し、不要なネットワーク要求を見つけて取り消します。
Google Chromeのような通常のブラウザであっても、サイトはゆっくりと読み込まれます:AdblockPlusでのロード時間は129回/ 8.79秒です。 There are a lot of requests(gif、1Mb)、facebook、twitter(ウィジェットをフェッチするため)、広告サイトなどのサードパーティサイト向けのものが多い。
私たちは、あまりにもそれらを取り消すことができます。ページがロードされ、使用可能である一方、
block_urls = ['gstatic.com', 'adocean.pl', 'gemius.pl', 'twitter.com', 'facebook.net', 'facebook.com', 'planplus.rs'];
page.onResourceRequested = function(requestData, request){
for(url in block_urls) {
if(requestData.url.indexOf(block_urls[url]) !== -1) {
request.abort();
console.log(requestData.url + " aborted");
return;
}
}
}
を私のためのロード時間は今ちょうど4393ms
です:PhantomJS screenshot
私ははるかにせずに行うことができるとは思いませんページのコードで判断するのは非常にスクリプト重いためです。
全体コード:
var page = require('webpage').create();
var fs = require("fs");
// console.time polyfill from https://github.com/callmehiphop/console-time
;(function(console) {
var timers;
if (!console) {
return;
}
timers = {};
console.time = function(name) {
if (name) {
timers[ name ] = Date.now();
}
};
console.timeEnd = function(name) {
if (timers[ name ]) {
console.log(name + ': ' + (Date.now() - timers[ name ]) + 'ms');
delete timers[ name ];
}
};
}(window.console));
console.time("open");
page.settings.loadImages = false;
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36';
page.viewportSize = {
width: 1280,
height: 800
};
block_urls = ['gstatic.com', 'adocean.pl', 'gemius.pl', 'twitter.com', 'facebook.net', 'facebook.com', 'planplus.rs'];
page.onResourceRequested = function(requestData, request){
for(url in block_urls) {
if(requestData.url.indexOf(block_urls[url]) !== -1) {
request.abort();
console.log(requestData.url + " aborted");
return;
}
}
}
page.open('https://www.halooglasi.com/nekretnine/izdavanje-stanova/novi-beograd---novi-merkator-id19270/5425485514649', function() {
fs.write("longload.html", page.content, 'w');
console.timeEnd("open");
setTimeout(function(){
page.render('longload.png');
phantom.exit();
}, 3000);
});
私はあなたの結果に興味がある、これはあなたのために働いていますどのようにコメントしてください。 – Vaviloff
大変ありがとうございました、これは私をたくさん助けました。あなたが私に与えたアドバイスは、プロセスのスピードを上げました!同じ問題を抱えている人にとって便利なもう1つのことがあります。便利なもう1つのメソッドがあります。これは 'page.settings.resourceTimeout'です。これを1000ミリ秒に設定すると、phantomJSはそのジョブだけを実行します1秒後に終了しますが、時間が短すぎるとコンテンツが読み込まれないことがありますが、非常に安全な解決策ではない場合がありますが、これは役に立ちます。お世話になりました! –