![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio postanowiłem napisać bibliotekę upraszczającą równoległe pobieranie wielu stron stron na raz (curl_multi_*) i oto co z tego wyszło:
http://curly.codeplex.com Curly do działania wymaga dostępnego cURL oraz PHP w wersji przynajmniej 5.3, ze względu na używanie przestrzeni nazw i funkcji anonimowych. Dodatkowo w bibliotece znajduje się spora liczba rzadko używanych klas, pisanych pod adaptery, których jeszcze nie ma, lub po prostu znalezionych gdzieś na dysku. Problem jest taki, że klasy te trzeba sobie wpisywać do use jeśli się chce z nich korzystać. Więc jeśli twój edytor nie tworzy automatycznie wpisów 'use nazwaklasy;', to praca z tą biblioteką może być udręką (IMG:style_emoticons/default/wink.gif) Licencja jest liberalna, więc jeśli ktoś chce, to może sobie tą bibliotekę oczyścić ze "śmieci". Żeby użyć tej biblioteki wystarczy skopiować pliki z katalogu lib i dołączyć plik Loader.php. Przykładowy kod znajduje się tutaj: http://curly.codeplex.com/documentation W skrócie - tworzymy obiekt klienta http, tworzymy obiekty żądań, dodajemy żądania do klienta i uruchamiamy go. Po zakończeniu działania funkcji HttpClient::execute() pobieramy zakończone żądania i odczytujemy informacje z przypisanych im obiektów odpowiedzi. Jeżeli ktoś woli, to można również zapisać swoją funkcję lub obiekt implementujący SplObserver (używa ktoś tego?) do zdarzenia Request::requestCompletedEvent() - zostaniemy wtedy poinformowani od razu gdy dane żądanie się zakończy (patrz przykład poniżej) Dodatkowo zrobiłem dwa testy-benchmarki sprawdzające różnicę pomiędzy sekwencyjnym a równoległym pobieraniem dużej ilości zdjęć kotów z flickr.com. Wyniki są takie: Pobieranie sekwencyjne - http://ideone.com/jNklL Kod Na stronie 1 jest 63 zdjęć Na stronie 2 jest 63 zdjęć Na stronie 3 jest 63 zdjęć Na stronie 4 jest 63 zdjęć Na stronie 5 jest 63 zdjęć Na stronie 6 jest 63 zdjęć Na stronie 7 jest 63 zdjęć Na stronie 8 jest 63 zdjęć Na stronie 9 jest 63 zdjęć Na stronie 10 jest 63 zdjęć Pobranie zdjęć zajęło: 382.159 s Pobieranie równoległe - http://ideone.com/ww1Mz Kod Na stronie 1 jest 63 zdjęć Na stronie 3 jest 63 zdjęć Na stronie 2 jest 63 zdjęć Na stronie 8 jest 63 zdjęć Na stronie 4 jest 63 zdjęć Na stronie 6 jest 63 zdjęć Na stronie 9 jest 63 zdjęć Na stronie 7 jest 63 zdjęć Na stronie 10 jest 63 zdjęć Na stronie 5 jest 63 zdjęć Pobranie zdjęć zajęło: 14.436 s Różnica jest więc spora. Jednak do pobierania co najwyżej kilku stron myślę że się nie przyda. Gdy tylko znajdę trochę czasu pojawi się więcej przykładów, a w wersji 1.0 testy jednostkowe i adapter oparty na socketach (ten już nie będzie tak wydajny). Na testy też nie starczyło mi zbyt dużo czasu, więc proszę traktować tą wersję jako bardzo eksperymentalną (IMG:style_emoticons/default/smile.gif) A na razie czekam na wasze opinie |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:37 |