![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
WItam,
Napisałem klasę, lecz dane pobierne są ze sklepu intenetowego. FIRMA => części => rodzaj_cześci => szczegóły towaru. Informacje wyszukują się idealnie. Przy "ostatnim etapie" - wyciąganie ceny produktu. Skrpty straaaasznie muli , ponad 5min co składnia mnie do nacisnięcia "ESC" (IMG:style_emoticons/default/sad.gif) . Proszę o pomoc
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 511 Pomógł: 143 Dołączył: 13.03.2010 Skąd: Jasło Ostrzeżenie: (0%) ![]() ![]() |
podrzuć jakieś dane cobyśmy mogli sobie po testować bez pisania sobie wszystkiego z palca, bo nie każdemu się będzie chciało + jaki chcesz mieć dla tego output, jaki cel osiagnąć
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
Reszta bez zmian. Po wywołaniu print_r(Klocki::parseData()); - oczywiście zmienić private na public , dostaje ładne linki i pózniej w getInfo() w foreach , chciałem wyswietlić cene. Lecz strasznie długo ładuje :/ |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
To co podałeś jest bez sensu. A jak chcesz optymalizacji, to pobierz źródło raz, zapisz je w zmiennej i na niej operuj, a jak już za pomocą jednego wyrażenia pobierzesz dane, to tak jak wyżej, zapisz w zmiennej i na nich operuj, a nie robisz pętle w pętli dla pętli i to z file_get_content.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
No dobrze ale pętli i tak się nie pozbędę. Muszę jakoś obrobić te dane. ? Może jakiś przykład mógłbym prosić ?
Tutaj nie mam jednego źródła - ta sama strona. Tylko "skaczę" po linkach - więc muszę pobierać nową treść stron. Ten post edytował kielich 2.04.2013, 12:49:11 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Obróbka istniejącej zmiennej, to nie to samo co obróbka danych które pobieram za każdym razem.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
ALe ja przechodzę z linku na link. mając tablice linków ponad(200linków) to muszę "poskakać" - po kazdym i wyciągnąć cenę
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem problemu. Mam link A, pobieram jego źródło w celu sprawdzenia czy są linki do strony B, jak są, zapisuję je do tablicy. Jak już mam wszystkie linki, sprawdzam czy znajduje się w nich nazwa i cena, jak tak, uzupełniam tablice. Koniec. Na moje oko jest to jedna pętla, max 2.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
FIRMA => części => rodzaj_cześci => szczegóły towaru - jak widać mam link A wchodzi dalej mam B jak mamy dalej C i dopiero produkt więc jak możesz mieć 1 pętle ? (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem problemu. Mam link A, pobieram jego źródło w celu sprawdzenia czy są linki do strony B, jak są, zapisuję je do tablicy. Jak już mam wszystkie linki, sprawdzam czy znajduje się w nich nazwa i cena, jak tak, uzupełniam tablice. Koniec. Na moje oko jest to jedna pętla, max 2. On ma racje, w jego przypadku na podstronach znajduja sie kolejne podstrony, wiec nie wystarczy wejsc w jeden link, zeby uzyskac cene. Trzeba wejsc na kolejny i kolejny. Kielich, czemu sie dziwisz, ze trwa to 5 minut? Skoro polaczenie z tyloma stronami troche trwa, dodatkowo to musi byc obrobione za pomoca regexp, ktory tez do najszybszych nie nalezy. Moze powienienes sprawdzic jaki zakres bitow potrzebujesz pobrac? Mniej szukania, dzialalby ciut szybciej, aczkolwiek nadal jest to z 500 stron lub cos w tym stylu. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
Dokładnie jest to 5160 linków , przerobiłem że mam w jednej funkcji w drugiej przerabiam a w trzeciej wyświetlam. Lecz pozbycie się pętli jest NIEMOŻLIWE.
Bardzo proszę o jakąś pomoc. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Czlowieku zrozum, ze tego nie przyspieszysz! Nie masz infrastruktury Google w domu, zeby obsluzyc taka ilosc zapytan na raz. To wszystko trwa, z reszta serwery tego sklepu tez nie maja, a i one musza wygenerowac zawartosc.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jest różnica między 200 a 5160, taka tyci.
Cytat Czlowieku zrozum, ze tego nie przyspieszysz! Nie masz infrastruktury Google w domu, zeby obsluzyc taka ilosc zapytan na raz. To wszystko trwa, z reszta serwery tego sklepu tez nie maja, a i one musza wygenerowac zawartosc. Chyba że wykona to równolegle, skrypt podzieli linki na partie i w tym samym czasie wykona do nich odwołanie. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
Cytat Chyba że wykona to równolegle, skrypt podzieli linki na partie i w tym samym czasie wykona do nich odwołanie. Co masz na myśli (IMG:style_emoticons/default/questionmark.gif) Możesz podać jakiś przykład ? Ten post edytował kielich 2.04.2013, 14:28:28 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Chyba że wykona to równolegle, skrypt podzieli linki na partie i w tym samym czasie wykona do nich odwołanie. Mysle, ze to nie znacznie przyspieszy caly proces, bo: 1. on pobiera linki z jednej strony, dopiero przechodzi do drugiej, z niej pobiera, przechodzi do 3. strony, znow pobiera i dopiero z 4. strony pobiera cene. 2. serwer nadal musi obsluzyc kilkaset zapytan, w ktorych trzeba pobrac dane z bazy, itd., itp. W najlepszym przypadku przyspieszy calosc o kilkanascie sekund (tak mysle, nie mowie ze tak jest NA PEWNO), a w najgorszym wykona mini-DoS i bedzie czekal jeszcze dluzej. Do tego dochodzi zabezpiecznie antyDDoS. Jesli serwer ma jakies oprogramowanie i faktycznie skrypt dzialalby powiedzmy 2x szybciej, to wykonanie 5160 zapytan w ciagu ~3 minut daje dosyc spora sume zapytan/sekunde z jednego adresu IP, a wtedy zamiast 5 minut poczeka sobie 15 albo i dluzej (IMG:style_emoticons/default/smile.gif) Nic tylko probowac (IMG:style_emoticons/default/biggrin.gif) Ale nadal jestem zdania, ze nie spadnie ponizej 4 minut. @up: http://www.php.net/manual/en/function.curl-multi-init.php Ten post edytował artuross 2.04.2013, 14:31:11 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie mam pojęcia o działaniu równoległym w PHP (i czy jest samo w sobie jakieś narzedzie które to ulatwia), jak potrzebuję to na szybko piszę coś w bashu. Chodzi o to że jak masz skrypt A.php to w nim pobierasz linki od 0 do 300 i tak samo odpowiednio dla skryptu B.php, C.php itd. Później w konsoli wklepujesz
Cytat php A.php & php B.php & itd. w linux & na końcu odpala skrypt w tle, a php nazwapliku.php uruchamia nowy parser.edycja @artuross - tak, z tym tez trzeba się liczyć, ale kto mówi że trzeba pobierać wszytko razem i za jednym zamachem? Ten post edytował !*! 2.04.2013, 14:36:20 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
@artuross - tak, z tym tez trzeba się liczyć, ale kto mówi że trzeba pobierać wszytko razem i za jednym zamachem? No teoretycznie nikt nie mowie, ale problem w tym, ze kielich chcialby, aby to wszystko dzialo sie szybciej, wiec jezeli i tak bedzie musial czekac to chyba nie osiagnie zamierzonego efektu. Wg mnie zostaw tak jak jest, a i tak powinienes sie cieszyc, ze nie maja SSL bo czekalbys 3x dluzej (IMG:style_emoticons/default/biggrin.gif) Albo sprobuj pobierac tylko okreslone bity z calego zapytania, bo jak na razie bierzesz cala zawartosc strony: 'QAZWSXEDCRFVTGBYHNUJMIKOLP', a Ty potrzebujesz tylko 'DCRFVTGBYHNUJMIKOLP' Ten post edytował artuross 2.04.2013, 14:42:34 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Będzie szybciej, bo skrypt nie będzie czekał aż wykona się w całości, tylko w tym samym czasie wykona się pobieranie poszczególnych grup linków. To tak jak z zakładkami w przeglądarce, jak otwierasz ich 5, to nie czekasz po kolei aż otworzy się 1 potem 2, 3, 4 i na końcu 5, tylko wczytują się od razu wszystkie naraz. Ograniczeniem jest tu jedynie łącze, zabezpieczenia serwera, ale przyspieszenie jest możliwe.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 164 Pomógł: 9 Dołączył: 30.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tylko, ze gdy otwierasz karty w przegladarce otwierasz najczesciej rozne witryny, a nawet jezeli to jest ten sam serwer, to nie obsluguje on 300 wejsc w jednej chwili. A wydaje mi sie (tutaj nie jestem pewien), ze cURL nie obsluguje Keep-Alive, wiec i tak dochodza DNSy, cookies, itd. Z reszta, nie wazne, nie spierajmy sie kto ma racje (dobra, na 90% Ty masz racje (IMG:style_emoticons/default/wink.gif) ).
@kielich, wyprobuj kilka opcji, ale tak czy siak, skrypt nie wykona sie w 10 sekund (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 4 Dołączył: 28.12.2008 Skąd: Warszawa Ostrzeżenie: (20%) ![]() ![]() |
A w jaki sposób moge pobrać odpowienie bity - długość ciągu źródła (IMG:style_emoticons/default/questionmark.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.09.2025 - 19:57 |