20

私はphantom.jszombie.jsを評価しています。トレードオフとして、ファントムは (実際のレンダラーを使用するため) より幅広いドキュメントをサポートし、ゾンビは (レンダリング エンジンを使用しないため) 高速であると予想しました。ただし、私が行ったテストでは、ゾンビの方がはるかに遅いようです。これは理にかなっていますか?

私はおそらくゾンビがvisit()が戻る前に(すべてのスクリプトの実行とcssのロードを含む)完全なページがロードされるのを待っていると考えていますが、ファントムはstart()(私はcasperjsを使用しました)の直後に戻り、ページ全体を待たずに続行できます.

Phantom.js

casper.userAgent("Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13");

casper.test.begin('bing search', 2, function(test) {
    casper.start('http://www.bing.com/', function() {
        this.waitUntilVisible('#sb_form_q', function() {
            this.sendKeys('#sb_form_q', "book", true);
            this.click('#sb_form_go');
            this.waitUntilVisible('#count', function() {        
                var val = this.evaluate(function() {
                     return document.getElementById('count').innerText
                });

                console.log(val)
            });
        });
    }).run(function() {
        test.done();
    });
});

ゾンビ.js

var Browser = require("zombie");
var browser = new Browser()

browser.userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13"

browser.visit("http://www.bing.com/", function() {
    browser.fill("#sb_form_q", "book");
    browser.pressButton("#sb_form_go");

    function resultArrived(window) {
        return window.document.querySelector("#count")
    }

    browser.wait(resultArrived, function() {
        console.log(browser.document.querySelector("#count").innerHTML)               
    });
});
4

1 に答える 1

12

なぜあなたがゾンビの約束の構文を利用していないのかわからない(キャスパーのように)? あなたは次のようなことをしているはずです:

browser.fill(...)
   .then(browser.pressButton)
   .then(something else)

promises 構文を使用しないと、あらゆる種類の奇妙な効果が生じる可能性があります。非同期 API での実行順序は、スクリプト言語で慣れ親しんだトップダウン コードとは異なるためです。

あなたの質問については、完全にはわかりませんが、私の経験から、zombie.js と capser.js (phantom.js の上) の速度は非常に似ています。また、zombie.js のドキュメントには次のように記載されていることに注意してください。

ページが完全に読み込まれてイベントが処理されるまで待機するには、visit コールバック関数を渡します。

コールバックを渡すので、期待どおりの結果が得られます - ページ全体の読み込みを待機します。

于 2013-12-14T20:32:48.310 に答える