Sprawdzenie poprawności załadowania strony oraz czas ładowania kodu [JS]

0

Witam serdeczenie!

Za pierwszym razem bardzo mi wasze forum pomogło, więc teraz też liczę na to samo.
Mam postawiony webserver na sterowniku siemens-a. Sęk w tym, że strona nie zawsze ładuje się poprawnie.
Przewiduje, że może być to spowodowane zbyt długim kodem (sterownik ma swój czas taktowania).
Chciałbym zapytać was:

  1. Czy istnieje możliwość sprawdzenie czasu z jakim załadowała się strona?
  2. Czy istnieje możliwość automatycznego sprawdzenia, czy strona została załadowana poprawnie i jeżeli nie ewentualnego automatycznego przeładowania strony (odświeżenia)?

Pozdrawiam serdeczenie!

0

pytanie klucz: co to znaczy "nie ładuje się poprawnie" - to hasło może mieć 1000 różnych efektów, więc doprecyzuj proszę, zanim zaczniemy coś dalej myśleć

0

Ok, przykładowo:
Wchodzisz na stronę i:

  • obrazek nie zostaje załadowany,
  • labele i buttonu są porozrzucane (niezgodnie z CSS),
  • nie wszystkie funkcje na stronie są dostępne lub nie zawsze działają prawidłowo (np. rysowanie wykresów, raz na kilka razy nie ma dostępnych wszystkich funkcji, przykładowo, wyłączenie danej linii trendu).
1

zbadaj narzędziami deweloperskimi (f12 w chrome, zakładka sieć) co dokładnie jest nie tak - czy serwer zwraca jakiś kod błędu (np. 500 Internal Server Error) ?

0

Jeżeli coś nie działa poprawnie zawsze pojawia się komunikat:

(failed)
net::ERR_EMPTY_RESPONSE

Oraz nawet jak wszystko działa spoko pojawia się: (ale to tylko przez !DOCTYPE)

Uncaught SyntaxError: Unexpected token <

Problem w tym, że dane otrzymywane z webservera muszą być odświeżane co 1 sekundę.
Tak sobie myślę, że pasowałoby napisać jakąś funkcję która najpierw wczyta wszystko co jest konieczne, a dopiero później załaduje się "document ready" i cała reszta.
Dobrze myślę?

EDIT następny:
Ok dołożenie setTimeout() na całość skryptu JS nic nie dało.
Czy można sprawdzić jakoś, czy zaistniała sytuacja z "net::ERR_EMPTY_RESPONSE"? I jeżeli zaistniała to automatycznie przeładować stronę?
Albo w jakiś sposób poczekać aby, otrzymał response od wszystkich i dopiero działać?

0

a nie mozesz ladowac strony, a same dane w kontenerze zaciagac ajaxem, tylko te w ktorych nastepuje aktualizacja, bo bez sensu jest slanie zadania o wygenerowanie calej strony co sekunde, jesli tylko zmieniaja sie dane np. w tablece.

0
szalonyfacet napisał(a):

a nie mozesz ladowac strony, a same dane w kontenerze zaciagac ajaxem, tylko te w ktorych nastepuje aktualizacja, bo bez sensu jest slanie zadania o wygenerowanie calej strony co sekunde, jesli tylko zmieniaja sie dane np. w tablece.

To wszystko jest zaciągane ajaxem (to jest wymagane). Więc strona ładuje się tylko raz i właśnie za tym pierwszym razem nie wszystkie pliki zostają załadowane, następnie dane odświeżają się cyklicznie "w tle" co jedną sekundę (tylko dane, nie cała strona). Dlatego chodzi mi o to, żeby strona przeładowywała się aż do skutku, póki nie załaduje się poprawnie i dopiero jak to nastąpi przejść do odświeżania danych.

0

Od złej strony do tego podchodzisz.
Pisanie wielkiej funkcji pilnującej wszystko od a do z jest możliwe (tylko musisz ją umieścić bezpośrednio w HTML, a funkcja będzie pilnować skryptów, obrazków, styli i innych elementów (część z nich trzeba będzie przebudować)) - ale pochłonie to sporo czasu, żeby pracowało 100% dobrze.

Twoim zadaniem powinno być wyeliminowanie pustych zwrotek od serwera.

Przewiduje, że może być to spowodowane zbyt długim kodem (sterownik ma swój czas taktowania).

Ale to co najwyżej kod HTML masz generowany, a obrazki czy css-y masz statycznie i raczej (choć to też jest możliwe) nie powinno jedno wpływać na drugie.

Co to konkretnie za sterownik? Jaki język serwerowy on obsługuje? Może jednak wystarczy przekonfigurować sterownik, a może jest wadliwy - dowiedz się ze wszystkich możliwych źródeł (wliczając kontakt z producentem).

Jakby Ci auto nie paliło od czasu do czasu, to nie kombinuj na zasadzie "załatwię sobie armię sąsiadów, żeby mnie pchali jakby nie ruszyło" tylko albo naprawiasz samochód sam (czyli nasza zmiana konfiguracji), albo pytasz mechanika/producenta jak to zrobić, albo po prostu wymieniasz samochód na taki niewadliwy.

I powiedz mi jeszcze? Czy nie możliwym by było hostowanie całej strony na jakimś innym urządzeniu w sieci, a ze sterownika pobierać tylko czyste dane?

0

Co to konkretnie za sterownik? Jaki język serwerowy on obsługuje? Może jednak wystarczy przekonfigurować sterownik, a może jest wadliwy - dowiedz się ze wszystkich możliwych źródeł (wliczając kontakt z producentem).

Sterownik s7-s1200 Siemens.

I powiedz mi jeszcze? Czy nie możliwym by było hostowanie całej strony na jakimś innym urządzeniu w sieci, a ze sterownika pobierać tylko czyste dane?

Nie ma zupełnie takiej możliwości.

Nie ukrywam, że problemy zaczęły się pojawiać gdy wygrzebałem bibliotekę do rysowania wykresów i ją zaimplementowałem do kodu, wcześniej wszystko śmigało aż miło. Zawsze zostaje mi możliwość zrezygnowania z trendów.

Słuszna uwaga skontaktuje się z producentem - mam nadzieję, że przewidzieli taki przypadek.

Generalnie mówisz, że istnieje możliwość sprawdzenie poprawności załadowania strony, bądź wystąpienia komunikatu "net::ERR_EMPTY_RESPONSE"?

0

No możesz do każdego pliku css dołączyć testową regułkę i sprawdzać w js czy została zastosowana. Do tego na każdym elemencie typu obrazek śledzić zdarzenie (on)error. Do tego do każdego zewnętrznego pliku js dołączyć zmienną globalną, której istnienie poświadcza, że plik został załadowany. A cały ten weryfikator umieścić razem z kodem HTML (bez którego nic innego się nie załaduje i tak).

Co to za biblioteka do rysowania wykresów? Jak będziesz generował wykresy po stronie klienta to nie powinno mieć to wpływu na pracę serwera - więc może tak zrób?

0

No możesz do każdego pliku css dołączyć testową regułkę i sprawdzać w js czy została zastosowana. Do tego na każdym elemencie typu obrazek śledzić zdarzenie (on)error. Do tego do każdego zewnętrznego pliku js dołączyć zmienną globalną, której istnienie poświadcza, że plik został załadowany. A cały ten weryfikator umieścić razem z kodem HTML (bez którego nic innego się nie załaduje i tak).

Chodzi o to, żeby dodać na końcu każdego pliku CSS zmienną która będzie zwracała jakąś wartość (dajmy na to 1 (prawda)), a później sprawdzać w kodzie głównym (tam gdzie html) czy suma tych zmiennych jest odpowiednia? Jak nie to przeładować stronę? Dobrze rozumiem?

Co to za biblioteka do rysowania wykresów?

Biblioteka do rysowania wykresów:
jquery.jqplot.min.js

Wygrzebałem ją tutaj:
http://www.jqplot.com/

Jak będziesz generował wykresy po stronie klienta to nie powinno mieć to wpływu na pracę serwera - więc może tak zrób?

Przepraszam może to durne pytanie, ale co mi pozostaje. Z JS mam doczynienia od niedawna. Cały czas byłem przekonany, że gdy wrzucam cos na sterownik, a później wchodzę na stronę używając do tego komputera, to czynności wykonują się po stronie klienta.

0

w css nie ma zmiennych.

to jest biblioteka po stronie klienta. jak to wywalisz to wszystko automagicznie zaczyna działać? sprawdź to, bo wątpię w taki stan rzeczy

0

Tak jest wszystko automagicznie zaczyna działać. Wrzuciłem na serwer wersję bez wykresów i wszystko śmiga aż miło, żadnych błędów w konsoli.

1

spróbuj dołączać bibliotekę z zewnętrznego CDN:
http://www.jsdelivr.com/#!jqplot

0

Niestety nic to nie daje.

Powiedz mi, jak możesz, na ile prawdopodobne jest to, że:

  • kod jest źle napisany, przez co program jest mało wydajny (można go ułatwić, ulepszyć, uprościć)
  • biblioteka która odpowiada za rysowanie zamula sterownik.
1

ale biblioteka nie ma nic wspólnego ze sterownikiem (szczególnie że zaciągasz ją z zewnątrz). nic z jej kodu nie wykonuje się na sterowniku. cały kod wykonuje się w przeglądarce użytkownika.

nie rozumiem w ogóle tego problemu i jego analiza zapewne wymagałaby fizycznego dostępu do sterownika. może ktoś Ci coś jeszcze podpowie, ja póki co nie mam więcej pomysłów

0

Czyli podsumowując:

  • przyczyny szukać w sterowniku,
    lub
  • zamulonego komputera?

BTW zauważyłem, że na firefoxie częściej się odpala poprawnie, niż na chromie np.

EDIT
Dziękuję ślicznie, jeszcze raz wszystkie biblioteki przeniosłem bezpośrednio z urządzenia na serwer zewnętrzny i śmiga o niebo lepiej!

1 użytkowników online, w tym zalogowanych: 0, gości: 1