![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 19.06.2007 Skąd: Gdańsk Ostrzeżenie: (10%) ![]() ![]() |
Witam.
mam stronę, na której muszę odczytać n razy dane zawarte w pliku xml na innym serwerze. Ma dwie wersje skryptu, obie mojego autorstwa, jednak obie zbyt wolne dla liczby danych większej niż 20... Oto jak wygląda funkcja [wersja "na debila"]: Kod function getAddress($xpos, $ypos) { // adres serwera, który zwraca plik xml [zamieszczony niżej 1] $url = 'http://ws.geonames.org/findNearbyPlaceName?lat='.$ypos.'&lng='.$xpos.'&maxRows=1'; $file = fopen($url, 'r'); // otwieram go $content = fread($file, 1024); // zczytuję zawartość fclose($file); // zamykam return explode("\n", trim(strip_tags($content))); // tworzę sobie tablicę [2] } Oto kod xml [1] (dla x=-8.22, y=54.46) http://ws.geonames.org/findNearbyPlaceName...2&maxRows=1 : Kod <?xml version="1.0" encoding="UTF-8" standalone="no"?> <geonames> <geoname> <name>Rathglass</name> <lat>54.4733333</lat> <lng>-8.2341667</lng> <geonameId>3307846</geonameId> <countryCode>IE</countryCode> <countryName>Ireland</countryName> <fcl>P</fcl> <fcode>PPLL</fcode> <distance>1.7423977508579884</distance> </geoname> </geonames> W wyniku działania wcześniejszej funkcji otrzymuję: Kod Array ( [0] => Rathglass [1] => 54.4733333 [2] => -8.2341667 [3] => 3307846 [4] => IE [5] => Ireland [6] => P [7] => PPLL [8] =>1.7423977508579884 ) Z czego tak naprawdę potrzebowałem tylko 0. Sposób ten był wystarczająco dobry dla nieiwelkich danych. Dla większej liczby danych się okazał zbyt wolny. Przeszukaem forum i znalazłem: Kod function getAddress($xpos, $ypos) { $url = 'http://ws.geonames.org/findNearbyPlaceName?lat='.$ypos.'&lng='.$xpos.'&maxRows=1'; $file = fopen($url, 'r'); // LINIA 1 $content = fread($file, 1024); // LINIA 2 $xml = new SimpleXMLElement($content); return $xml->geoname->name; } Jednak to też jest za wolne. BTW czy to w ogóle jest szybsze? Czy można to jakoś przyspieszyć? Bo mi się wydaje, że zmiany w liniach 1 i 2 mogłyby przyspieszyć. Jednak jaka funkcja jest szybsza ? A może ja sie do tego jakoś źle zabieram? Z góry dziękuję za odpowiedź EDIT. Spróbowałem jeszcze: Kod function getAddress($xpos, $ypos) { $ar = file($url = 'http://ws.geonames.org/findNearbyPlaceName?lat='.$ypos.'&lng='.$xpos.'&maxRows=1'); return $ar[3]; } Skorzystam z http://webmade.org/porady/czas-generowania-strony-php.php i spróbuję dojśc która jest najliżej tego, czego szukam. jakby ktoś chciał sie podzielić własnymi spostrzeżeniami. to się proszę nie krępować ![]() Ten post edytował yarpo 20.08.2007, 20:24:11 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Funkcja dziala wolno bo musi otworzyc zdalne polaczenie z serwerem zeby odczytac plik XML z danymi. Przeskoczyc sie tego nie da. Mozesz ewentualnie keszowac otrzymane pliki i nastepny raz jak ktos zapyta o te same koordynaty to nie bedziesz odpytywal zdalnego serwera tylko zaczytywal dane z lokalnego pliku, a to na pewno zwiekszy szybkosc.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 19.06.2007 Skąd: Gdańsk Ostrzeżenie: (10%) ![]() ![]() |
Dzięki za info...
Chyba jednak zrobię to inaczej. W przypadku większej niż 10 liczby rekordów zrobię to za pomocą AJAXA. [czas się go nauczyć ![]() Skrypt stworzy mi tablicę z posX i posY i już po wczytaniu strony będę kolejno zamieniał x,y na miejscowość. Myślę, że to będzie najrozsądniejse rozwiązanie. Dzięki za uwagę i pomoc ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:11 |