Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zrobic postep wykonana skryptu?
Forum PHP.pl > Forum > PHP
raczkowski1
Witam
Mam skrypt, który ładuje listę towarów z pliku, porównuje je z bazą i aktualizuje ceny, ale taki proces zajmuje trochę czasu.
Mam pytanie czy da rade zrobić jakiś pasek postępu na stroonie?? jeśli nie to w jakim języku lepiej to zrobić (c++ lub java)questionmark.gif

pozdrawiam
zbig
Pierwszy pomysl jaki przyszedl mi do glowy to dwa uruchamiane jednym kliknieciem Ajaxy.
Generujesz na stronie glownej unikalny id ktory bedzie potrzebny do jakiejs komunikacji miedzy dwoma procesami
Pierwszy proces uruchamia w tle ladowanie listy towarow ( zeby przegladarka miala jakis kontakt ze swiatem smile.gif )
-najpierw zczytujesz counter twojej listy towarow
-uruchmiasz mechanizm kontrolujacy postep ladowania listy (np. memcache) w ktorym zapamietujesz unikalny id i counter
-podczas ladowania listy po wykonaniu kazdej petli inkrementujesz swoja informacje o postepie

Drugi proces (a wlasciwie procesy) lacza sie z memcache odczytujac staly counter i aktualna informacje o postepie (no wlasnie wtedy moze przydac sie unikalny id do szukania interesujacej cie pary counter - postep)
Te procesy uruchamiasz jakims setInterval
Opakowujesz jakos request z serwera ( np w XML czy JSON ) i liczysz sobie proporcje
onSuccess laczysz ze skrypcikiem malujacym twoj progres

Pierwszy proces konczysz po zaladowaniu calej listy jakims response
Drugiego ajaxa konczysz jezeli stosunek countera i postepu = 1
Czyscisz memcache

Idziesz na piwo smile.gif
krowal
Albo... robisz tak:
1. przetwarzasz sobie rekordy i np co piąty rekord (żeby nie obciążać zbytnio serwera) zapisujesz w jakimś miejscu, nazwijmy je TMP, może to być plik, lub baza danych, numer przerabianego rekordu a ostatni rekord oznaczasz w jakiś konkretny sposób żeby było wiadomo że już koniec. W tym samym czasie na stronie działa skrypt JS który za pomocą AJAX'a czyta Ci np co 1s. wartość TMP i wpisuje ją w element z odpowiednim id do póki nie przeczyta że to już koniec (dlatego musisz odpowiednio oznaczyć zakończenie) i...

Idziesz na piwo smile.gif
raczkowski1
wielkie dzięki, no to pora na naukę ajaxa smile.gif a wyniki z ajaxa ładuje w osobna ramkę czy jak? żeby mi w jednym miejscu na stronie wyświetlał info
Fixus
nie nie...ty ustalasz gdzie się wyświetla
robisz na stronie
Kod
<div id='myDivElement' />

potem w kodzie pliku *.js odwołujesz się bezpośrednio do myDivElement...teraz nie mogę sobie przypomnieć jak. Ale jak zagłebisz się w AJAX`a to się tego nauczysz smile.gif
raczkowski1
wielkie dzieki za pomoc, teraz mam problem z ajaxiem ale to juz inny dzial;)

pozdrawiam
franki01
Cytat(Fixus @ 7.09.2007, 18:54:52 ) *
nie nie...ty ustalasz gdzie się wyświetla
robisz na stronie
Kod
<div id='myDivElement' />

potem w kodzie pliku *.js odwołujesz się bezpośrednio do myDivElement...teraz nie mogę sobie przypomnieć jak. Ale jak zagłebisz się w AJAX`a to się tego nauczysz smile.gif



Kod
document.getElementById('myDivElement').innerHTML = text;


Takich rzeczy sie nie zapomina biggrin.gif
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.