Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml / geocode reverse] Skrypt działa zbyt wolno, Jakby go podrasować
yarpo
post 20.08.2007, 20:08:24
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 19.06.2007
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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ć smile.gif

Ten post edytował yarpo 20.08.2007, 20:24:11
Go to the top of the page
+Quote Post
NoiseMc
post 20.08.2007, 20:40:07
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.


--------------------
Go to the top of the page
+Quote Post
yarpo
post 20.08.2007, 20:50:52
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 19.06.2007
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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ć tongue.gif ]
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 smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:11