Jump to content
php.lv forumi

Lapas ielāde


ohmygod

Recommended Posts

Ir tā, ka ir tiek palaists ljooti ilgs process uz php, taa progress tiek atteelots ar flashu (manupraat visvieglaakais un smukaakais veids, kaa to dariit).

Bet ir probleema taada, ka ja neko neoutputo, tad to flashu nemaz neraada, liidz pat procesa beigaam. Ja outputoju uz katru kaadu noteiktu darbiibu kaut vai  , tad peec laika paraadaas un straadaa OK. Var aruu outputot garaakus outputus, tad paraadaas aatraak.

Kas ir tas, kas liek lapu ielaadeet? Kaa vareetu to izdariit ar vienu, neredzamu, outputu pirms process veel saacies? Lai pie 50K darbiibaam nav 50K  _ jaasuuta laukā.

Link to comment
Share on other sites

Hmm.. man kaut kā likās, ka outputs browserim reāli tiks nosūtīts tikai tad, kad, kad skripts savu darbību būs pabeidzis.

 

Varbūt tagad es sarežģīšu potenciāli vienkāršāk izdarāmu lietu, bet es būtu darījis šādi:

 

1) Izveido parastu html (kaut vai php, bet doma tāda, ka tas nesatur to tavu php kodu) failu.

2) Šajā failā iekļauj to flash animāciju.

3) Izveido atsevišķu php failu tām ilgajām darbībām.

4) No html faila ar javasctipt xmlhttprequest (xhr) objekta palīdzību izsauc to php skriptu.

5) Kad xmlhttprequest statuss ir 4 (php fails ir beidzis darbu un atgriezis kaut kādu outputu), tad izvāc to flash animāciju (ar JS DOM fjām).

 

Bet šis variants būtu nedaudz tāds overkill priekš tik vienkāršas lietas :). Un vispār nezinu arī cik ilgi xhr objekts būs gatavs gaidīt atbildi no servera.

 

PS. Kā arī, atkarībā no auditorijas, vajadzētu kaut kādu graceful degradation izveidot (http://en.wikipedia.org/wiki/Graceful_degradation). Priekš tiem, kam nav JS, vai arī neatbalsta xhr objektu.

Edited by andrisp
Link to comment
Share on other sites

Vienkāršāka, bet līdzīga metode:

 

1) Izveido html failu ar redirektu (html meta redirektu) uz to ilgo php failu.

2) Šajā html failā ievieto to flash animāciju.

 

Arī šajā variantā jāpēta kā browseri uzvedas, ja fails uz ko redirektē, ilgi neatbild.

Edited by andrisp
Link to comment
Share on other sites

Nu, man ir faili ar paari pa 50k ierakstu, kas ik pa laikam jaasaliidzina ar DB. Saliidzinaashanu palaizh manuaali.

Iekš db ir jaasaliidzina ar 6 tabulaam + tabulas jaasaliidzina savaa starpaa. Katrs ieraksts.

Process velkas ap stundu, bik vairaak. Viss ir maksimaali, iespeejami indekseets.

Vajag redzeet progresu. Var jau, protams, vinju raadiit popupaa, bet tas nav iisti smuki.

Edited by ohmygod
Link to comment
Share on other sites

Tākš - bez mysq pārbaudes un inserta visam pasākumam iziet cauri nu ļoooti ātri. Ar katras darbības ielogošanu un XML (priekš flaša) veidošanu biš virs minūtes.

Tiklīdz ir pliks inserts, bet jebkādām pārbaudēm - aptuveni 2x ātrāk, kā iepriekš (minūtes ~40 varētu būt, līdz galam nelaidu).

Ar pārbaudēm jau iet pilnu laiku.

 

Tātad bremze ir jau uz mysql queriju, kā tādu. Pat uz visparastāko insertu parastā tabulā ar id, name un vēl 4 parametriem, kas visi jau tiek iedoti gatavi.

Link to comment
Share on other sites

nafig tev kautr kas ir jārāda... Uztaisi batch job... ieliec iekš `queue`, un lai backgroundā vārās savā sulā...

Tekošo statusu var ierakstīt kādā lock-failā. Un viss. Nevajag tenekādus progress-bar-us

Edited by Delfins
Link to comment
Share on other sites

nu principā neviens tev palīdzēt nevarēs, kamēr nebūsi izstāstījis ko vēlies panākt ar to savu sistēmu un pēc kāda algoritma tas viss tagad strādā. man tas reāli izklausās pēc kreisas db struktūras + līkiem algoritmiem.

 

tev tur gadījumā nav inserts uz fulltext indexiem?! :)

Link to comment
Share on other sites

mazliet offtopic

 

Kā jau bieži vien šajā forumā gadās, diskusija no "" pāriet uz "kāpēc", bet ja precīzāk, tad uz "a nafig vajag".

 

Protams bieži vien problēma ir tajā, ka cilvēks nespēj izklāstīt lielo/sarežģito domu rakstiski pāris teikumu postā, tapēc paskaidrojumu noreducē līdz pamatproblēmai, neiedziļinoties iemeslos.

Un galu galā kāda starpība, cik tas liekas [ir]racionāli vienam vai otram, svarīgi ir tas, ka cilvēks ir ar to gatavs čakarēties līdz sliktai dūšai un tapēc šeit interesējas kā atrisināt konkrēto paša radīto problēmu kaut mazliet nesāpīgāk.

 

Lai tik kāds mēģina man iestāstīt, ka nekad pats nav mēģinājis izveidot kaut ko nestandarta, lai arī tas būtu sarežģītāk, bet "glaunāk"...

 

Daudzmaz mēģinājis atbildēt ir andrisp, pārējie kā jau parasti bīda demagoģiju...

Link to comment
Share on other sites

Exzo, vai tu arii pretosies "pieredzejusho zinaashanaam"?

Taadus skriptus neviens nelaizh (protams, iznjemot dazhus "gudriishus") zem Apache procesa un turklat nekarina virsuu Flash progress-baru....

 

Maksimaalais ko te var atljauties ir:

- batch skripts raksta failaa tekosho progresu

- flash/ajax savaac no servera to failu un atteelo....

 

Uzreiz tiek atrisinaatas vairakas problemas:

- gjemorojs ar izvadi (nav user interactiviti, protams, iznjemot kill -9 $proc_id :) )

- gjemorojs ar apache uzkarinashanu un iespejams nokrashoshanu

- gjemorojs ar time/memory-limitiem

Link to comment
Share on other sites

tur jau tā fiška, ka php kods ir skripts nevis serviss vai vēl sazin kas - skripts izpildās no nultās līdz n-tajai rindiņai un viss. un defaultajos php settingos max runtaims ir 30sec, kas manuprāt ir jau diezgan daudz. galu galā webiskām lietām manuprāt uz servera ir jāizpildās krietni zem 1sec. ja izpildās stundu(!!!!) tad vajag domāt par lietām, ko jau es pieminēju agrāk.

 

un par demagoģiju - tas ir aptuveni tā, ka ja viens cilvēks brauc ar mašīnu visu laiku pirmajā pārnesumā nepārslēdzot augstāku, tad pieredzējušākie parādīs, ka ir jāpārslēdz nākamais pārnesums, bet andrisp parādīs ka pirmais pārnesums nemaz nav slikts un vēl mācīs gāzēt vairāk :) (nekas personisks andrisp :) )

Link to comment
Share on other sites

×
×
  • Create New...