DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   Sporo učitavanje dinamički generisanog javascripta (http://www.devprotalk.com/showthread.php?t=3291)

jablan 02. 08. 2007. 09:22

Sporo učitavanje dinamički generisanog javascripta
 
Dinamički generišem javascript snippet koji treba da prikaže parče html-a u nekoj stranici.

Drugim rečima, korisniku šaljem <script src="nešto.php"> tag koji on može da postavi na neko mesto u svojoj stranici i na tom mestu očekuje da mu se pojavi neki sadržaj koji ja generišem.

Dosad sam radio tako što u toj skripti imam document.write() i to lepo radi, ali postoji problem:

Ako generisanje "nešto.php" traje malo duže ili postoji neki problem koji produžava njegovo izvršavanje, u korisnikovom browseru stranica stoji učitana do mesta gde treba da dođe to moje parče i onda pravi pauzu dok se nešto.php smisli, i tek onda nastavlja da renderuje ostatak stranice.

Hoću da izbegnem mogućnost ovog zastoja.

Da li je neko od prisutnih imao sličan problem i kako ga je rešio?

Mislite li da je IFRAME bolje rešenje za ovo? IFRAME mi se ne dopada zato što se odvojeno stilizuje od stranice u kojoj se nalazi.

noviKorisnik 02. 08. 2007. 10:31

Recimo da na poziciju gde hoće da ubaci to tvoje postavi samo kontejner...
Kôd:

<div id="nesto_php"></div>
... a da skript postavi na dno dokumenta, da se učitava i izvršava na kraju. Onda ti otpada document.write, ali može document.getElementById ('nesto_php').innerHTML = ':-)';

jablan 02. 08. 2007. 10:39

To je jedno moguće rešenje, ali malo usložnjava instalaciju i povećava mogućnost greške - korisnik mora da uređuje svoju stranicu na dva mesta, a ovako mu samo kažem "umnoži ovo parče koda i nalepi tamo gde hoćeš".

Br@nkoR 02. 08. 2007. 11:44

Možda ti pomogne defer atribut script elementa, ali to radi samo u IE, a za ostale bi moglo da dodaš da na event DOMContentLoaded štampa taj script element.

kodi 02. 08. 2007. 12:28

hmmm...a da tim prvim document.write-om generises div koji poziva funkciju koja ceka window.onload a onda povlaci snipet sa servera ajax-om

ovo bi (valjda) bilo ekvivalentno predlogu sa divom tamo gde treba - script tagom iznad </body>

(apsolutno nisam siguran dal' ovo uopste moze da se izvede :D )

misk0 02. 08. 2007. 13:07

Jesi pokusao taj nesto.php da zamjenis sa obicnim nesto.js fixnog sadrzaja pa da vidis je'l problem u generisanju tog PHP fajla ili je problem 'uvlacenje' fajla sa drugog sajta /servera...?

jablan 02. 08. 2007. 14:06

@BrankoR: Probao sam defer, kao što kažeš nema nikakvog efekta u FF, stranica čeka dok se js izgeneriše.

@kodi: Tako nešto je i meni palo na pamet, verovatno ću baš to prvo da probam.

@misko: Da, kad je statički JS u pitanju to radi kako treba. Ali hoću da se osiguram da mi generisanje, koje iz različitih razloga može da potraje, ne zaustavlja učitavanje ostatka stranice.

bluesman 02. 08. 2007. 14:22

Zavisi i kakv ti je sadrzaj tu. Ja sam skoro imao problem sa sajtom koji (iz nekog razloga) ima preko 600 kategorija (od kojih su 90% prazne) do 5 nivoa i sve se ucitavaju na svakoj strani kao stablo. Resio sam tako sto sam iz PHP-a kada god se nesto promeni u kategoriji, generisao js file, nesto kao cache, koji onda include-ujem u frontend na standardan nacin <script src=... >. To je radilo ok i nije bilo nikakvih zastoja, osim samog generisanja stabla, ali to ne moze brze jer ima previse kategorija a i ne zavisi od php.

jablan 02. 08. 2007. 14:59

Upravo sam probao ovo kodijevo rešenje, izgleda da radi baš kako mi treba.

Koristio sam XmlHttpRequest kod odavde:

http://www.quirksmode.org/js/xmlhttp.html

i nK-ov event attach:

http://www.devprotalk.com/showthread.php?t=1478

Hvala svima. Ako nekom treba kôd, okačiću.

noviKorisnik 07. 08. 2007. 12:29

Upravo sam naišao na zanimljivu varijaciju - nešto otprilike ovako ...
Kôd:

<div id="insertPoint" style="display: inline;"></div>
<div id="insertScriptPoint" style="display: none;"></div>
<script>
var insertScriptURL = "http://yourserver.co.yu/yourscript.js?tmstmp=" + new Date ().getTime ();
var insertScript = document.createElement ("script");
insertScript.type = "text/javascript";
setTimeout ("insertScript.src = insertScriptURL; document.getElementById ('insertScriptPoint').appendChild (insertScript);", 1);
</script>

Moguće da ovaj mali setTimeout oslobađa muke koju si inicijalno imao.


Vreme je GMT +2. Trenutno vreme je 14:42.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.