Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Opóźnienie ładowania strony przy wczytywaniu kodu ze zdalnej lokalizacji
Forum PHP.pl > Forum > Przedszkole
fiasko
Mam problem z ładowaniem się strony internetowej, która ze względu na to, iż generuje zapytanie $_GET do zdalnej lokalizacji opóźnia swoje ładowanie w przypadku gdy zdalny serwer ulega awarii.
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. <script type="text/javascript">
  3. var pkBaseURL = (("https:" == document.location.protocol) ? "https://zdalna-domena.pl/" : "http://zdalna-domena.pl/");
  4. document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
  5. </script><script type="text/javascript">
  6. try {
  7. var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
  8. piwikTracker.trackPageView();
  9. piwikTracker.enableLinkTracking();
  10. } catch( err ) {}
  11. </script>
[JAVASCRIPT] pobierz, plaintext


W przypadku gdy zdalny serwer zwraca błąd 404 - to instrukcja try dostaje informację o tym, aby zakończyć wczytywanie zdalnej zwartości i problem nie występuje.
W przypadku gdy zdalny serwer jest wyłączony to skrypt w przeglądarce firefox przez 40 sekund próbuje wczytać zdalną zawartość zanim zaprzestanie ją ładować.

Jak rozwiązać ten problem ?

Macie pomysł jak obsługiwać w kodzie js awarie serwerów zewnętrznych ?
zegarek84
choć po części wiem o co chodzi i widzę, że odświeżyłeś temat (choć tego nie widać - jedynie po postach i po dacie), to jedynie mogę Cię nakierować na rozwiązanie i hasło "JSONP"... przy okazji, z fusów nikt nie wróży, choć akurat wiem o co na 99% chodzi to nie pokazałeś kodu komunikacji... i jeszcze poczytaj o AJAX'ie bo to na tej samej niemal zasadzie się opiera...
abort
Cytat(fiasko @ 11.11.2012, 16:50:27 ) *
W przypadku gdy zdalny serwer zwraca błąd 404 - to instrukcja try dostaje informację o tym, aby zakończyć wczytywanie zdalnej zwartości i problem nie występuje.

Bo dostaje odpowiedź od serwera natychmiast i umie sobie z tym fantem poradzić.

Cytat(fiasko @ 11.11.2012, 16:50:27 ) *
W przypadku gdy zdalny serwer jest wyłączony to skrypt w przeglądarce firefox przez 40 sekund próbuje wczytać zdalną zawartość zanim zaprzestanie ją ładować.

Wydaje mi się, że musisz znaleźć w JS (nie znam JS na tyle by Ci pomóc) odpowiednik pehapowej funkcji stream_set_timeout i ustawić sobie na jakąś rozsądną dla Ciebie wartość (2-3 sekundy byłby dobrym wyborem na początek)
fiasko
Cytat
Wydaje mi się, że musisz znaleźć w JS (nie znam JS na tyle by Ci pomóc) odpowiednik pehapowej funkcji stream_set_timeout i ustawić sobie na jakąś rozsądną dla Ciebie wartość (2-3 sekundy byłby dobrym wyborem na początek)


No tylko problem w tym, że połączenie jest inicjowane z przeglądarki i nie sposób określić time out dla każdego użytkownika, gdyż każdy ma inną prędkość łącza. Gdybym tak zrobił to nie miałbym pewności, że część użytkowników wczytała do końca callback w js.

Cytat
choć po części wiem o co chodzi i widzę, że odświeżyłeś temat (choć tego nie widać - jedynie po postach i po dacie), to jedynie mogę Cię nakierować na rozwiązanie i hasło "JSONP"... przy okazji, z fusów nikt nie wróży, choć akurat wiem o co na 99% chodzi to nie pokazałeś kodu komunikacji... i jeszcze poczytaj o AJAX'ie bo to na tej samej niemal zasadzie się opiera...


Znam Ajax i jsonp smile.gif

Wydaje mi się , że chyba jednak nie do końca wiesz o co chodzi smile.gif

Tworząc zapytanie do zdalnego serwera przeglądarka oczekuje na odpowiedź i tak jak tu kolega napisał oczekuje na jej nadejście. Jeśli nadejdzie odpowiedź ze statusem 404 to przerywa żądanie, jeśli dostanie kod 200 to procesuje żądanie, jeśli nie dostanie to oczekuje na odpowiedź zgodnie z domyślnym czasem przeglądarki użytkownika.

Jak rozwiązuje się takie problemy ?
zegarek84
Cytat(fiasko @ 12.11.2012, 23:40:43 ) *
Wydaje mi się , że chyba jednak nie do końca wiesz o co chodzi smile.gif

lakonicznie opisałeś problem i nie napisałeś, że problem jest w miejscu document.write ;p - rozumiem już o co chodzi - problemem tutaj jest maksymalna liczba otwartych połączeń przez przeglądarkę na którą nie możesz wpłynąć, ale raczej możesz zaradzić...

wszystko zależy od tego do czego Ci to potrzebne i najważniejsze DOM to będziesz miał nad nimi większą kontrolę (tym bardziej, że piszesz, iż znasz JSONP ;p)

pierwsze z rozwiązań, to inicjuj wszystko po załadowaniu strony, po załadowaniu wszystkich elementów drzewa dom, a dodatkowo zapewne jest problem z obrazkami z Twojego serwera, więc wszystko inicjuj po zdarzeniu na stronie .onload bez elementów zewnętrznych, dopiero po tym dołącz elementy zewnętrzne...

jeszcze mógłbyś spróbować (mi się nie chce sprawdzać czy zadziała) dołączając skrypt zewnętrzny przez DOM po przekroczeniu czasu usuń ten skrypt z drzewa DOM - być może żądanie zostanie przerwane, nie wiem, nie sprawdzałem tego ;]...

... ta, ale jasne, potrzebujesz wiedzieć kiedy jest dostępna zewnętrzna biblioteka chyba - tak wnioskuję patrząc na fragment kodu i jego strukturalne/liniowe wykonanie, ale zaraz, przecież znasz technikę JSONP więc nie muszę Ci pisać jak wykryć, czy zewnętrzny skrypt/biblioteka się załadował ;] (no bo w końcu nic nie wiem ^^)
[JavaScript]Załączanie prototype poprzez js
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.