2012-11-15 11 views
7

Powiedzmy, że mam tablicę adresów URL. Nie chcę używać funkcji OpenOpen. Ponieważ oczekuje na załadowanie każdego poprzedniego adresu URL i skraca czas ładowania.Jednoczesne żądania CasperJS

casper.each(hrefs,function(self,href){ 
     self.thenOpen(href,function(){ }); 
     self.then(function(){ 
     // Selectors 
    }); 

});

Jakich metod używałbyś, by wydać znacznie mniej w porównaniu do powyższej metody? Byłoby wydajne, aby utworzyć wiele instancji przechowywać w db, a następnie pobrać ... ale to jest dużo bólu głowy. A także chciałbyś odpowiedzieć ogólnie, czy miałbym problemy, gdy jednocześnie uruchomiłem wiele instancji tego samego pliku js?

Odpowiedz

9

Jeśli nie interesuje Cię synchronizacja zachowań między wszystkimi otwieranymi adresami URL, powinieneś uruchomić wiele instancji casper dla każdego adresu URL. Oto przykład:

var casperActions = { 
    href1: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href1 
    casper.run(function() {...}); 
    }, 
    href2: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href2 
    casper.run(function() {...}); 
    }, 
    ... 
}; 

['href1', 'href2', ...].each(function(href) { 
    var casper1 = require('casper').create(); 
    casperActions[href](casper); 
}); 

Każda instancja działałaby niezależnie od siebie, ale pozwalałaby na jednoczesne trafianie wielu adresów URL.

+0

Nie rozumiem Twój kod do pracy. Następuje błąd: ** [TypeError: "undefined" nie jest funkcją (oceniającą "['href1', 'href2'].")] ** Czy wiesz, dlaczego jest niezdefiniowana? Z góry dziękuję! – Hammerfaust

+0

użyj '['href1', 'href2']. ForEach' zamiast' ['href1', 'href2']. 'Każdy' –