Autor | Zpráva | ||
---|---|---|---|
Ricky4852 Profil |
Dobrý deň,
začal som používať JQuery, ale narazil som na menší problém, pri používaní funkcie $("#div").load('url'), totiž používam ho pri načítaní správv "chate". Funkcia s týmto skriptom sa mi opakuje cez setTimeout(), každých 200 milisekund, a obsah zo stránky url sa mi načíta do divu. Problém je v tom, že ak som si cez správcu úloh pozrel Pamäť využívajúcu prehliadač, stúpla behom minúty z 60 000 na 400 000, a stále sa zvyšovala. V Google Chrome mi to po chvíli vyplo stránku... function loadChat() { $("#div").load('chat.php', function(resp) {}); setTimeout("loadChat()",200); } delete resp; $('#div').empty(); ale nič z toho nepomohlo, pamäť sa naďalej zmenšovala, dúfam že mi s tým bude niekto vedieť pomôcť, ďakujem... |
||
joe Profil |
#2 · Zasláno: 19. 2. 2012, 13:42:52
1. Zkoušel jsi používat AJAX bez jQuery a jak se to projevovalo?
2. K čemu je dobré načítat nové zprávy 5x za vteřinu? 3. V metodě jako je setTimeout se nepoužívá string, ale odkaz na referenci, tedy jen setTimeout(loadChat, 200);
4. Jseš si jistý, že kód dělá to, co popisuješ a chceš? Pokud chceš volání akce opakovat, pak je pro tebe lepší setInterval |
||
Ricky4852 Profil |
#3 · Zasláno: 19. 2. 2012, 13:51:50 · Upravil/a: Ricky4852
1. Skúšal som, išlo to v pohode a pamäť sa nezväčšovala, lebo sa stále nahrádzala novou, avšak potrebujem použiť JQuery, pretože je rýchlejší a dovoľuje spúšťať načítané skripty
2. Chcem aby bol ten chat dynamický, a aby človek vedel čo napísal, inak by sa mu správy objavovali dosť pomaly a nevedel by či správu poslal alebo nie 3. Je to možné, funguje to aj mojim spôsobom, skúsim či to pôjde aj tak ako píšeš 4. Kód je správny a robí to čo chcem, skúsim aj ten setInterval, neviem či to však vyrieši môj problém čo som spomínal na začiatku Tak som skúsil ten setInterval, výsledok je rovnaký ako s použitím setTimeout |
||
joe Profil |
#4 · Zasláno: 19. 2. 2012, 14:00:05
Ricky4852:
Ukážeš nám i ten kód, který předtím fungoval? |
||
shaggy Profil |
#5 · Zasláno: 19. 2. 2012, 14:01:21
Ricky4852:
„JQuery, pretože je rýchlejší a dovoľuje spúšťať načítané skripty“ Ty vôbec rozumieš tomu, čo píšeš? Ja nie som javascript nazi ako napríklad Chamurappi a nemám nič proti JS frameworkom, ale už len z princípu nemôže byť akýkoľvek framework postavený na nejakom jazyku rýchlejší ako vstavané funkcie jazyka. jQuery je "pohodlné", rieši za teba dosť vecí, ale nemýľ si to s rýchlosťou. „Chcem aby bol ten chat dynamický“ Tak to by si mal načítať ten obsah 25x za sekundu, aby sa menil s každým mojim žmurknutím. |
||
Keeehi Profil |
#6 · Zasláno: 19. 2. 2012, 14:23:22
Ricky4852:
1) „Skúšal som, išlo to v pohode a pamäť sa nezväčšovala“ No vidíš, problém vyřešen. 2) Nemusíš to načítat 5x za vteřinu. Jsou i jiné metody jak mít obsah aktuální, avšak pokud se nic neděje, posílat na server požadavek jen třeba jednou za 30 sekund. Hledej "long pooling". 3) Ano, funguje to, ale ... |
||
Ricky4852 Profil |
#7 · Zasláno: 19. 2. 2012, 14:45:56
No, problém stále nie je vyriešený, robil som to pôvodne cez skripty ako
window.XMLHttpRequest, xmlhttp.open, xmlhttp.send atd... ale stránka ktorú som sa pokúšal načítať mala zároveň spúšťať aj skripty, ( <script>alert('blabla');</script> ), čo už však nešlo, preto mi kamarát odporúčil JQuery, ktorý mi zázračne načítal obsah zo stránky do divu a spustil aj ten skript. Takže som prešiel na JQuery, ale v poriadku, aj keby som stránku načítaval raz za 10 sekúnd, tak by sa mi pamäť zahltila tak či tak, netrvalo by to 30 sekúnd ale možno 5 minút... Tomu sa však chcem vyvarovať, predsa niekde sa musia "tie" dáta ukladať do pamäte, len neviem ktoré to sú a ako ich vyčistiť... :( |
||
joe Profil |
#8 · Zasláno: 19. 2. 2012, 15:09:18
Ricky4852:
> robil som to pôvodne cez skripty ako > window.XMLHttpRequest, xmlhttp.open, xmlhttp.send A myslíš, že jQuery to uvnitř řeší jinak? Jak napsal Keeehi, jde to i jiným způsobem. Co kontrolovat nové zprávy cca. jednou za 15 vteřin + po odeslání zprávy? To by ti mělo bohatě stačit. Ten tvůj kód by měl být spíš function loadChat() { $("#div").load('chat.php', function(resp) {}); } setInterval(loadChat, 1000); „stránka ktorú som sa pokúšal načítať mala zároveň spúšťať aj skripty“ K čemu to je dobré? |
||
Chamurappi Profil |
#9 · Zasláno: 19. 2. 2012, 15:14:51
Reaguji na Rickyho4852:
„stránka ktorú som sa pokúšal načítať mala zároveň spúšťať aj skripty, ( <script>alert('blabla');</script> ), čo už však nešlo“ Proč potřebuješ, aby se spouštěl dotahovaný skript? Je v něm něco, co nemůže být v mateřské stránce? „ktorý mi zázračne načítal obsah zo stránky do divu a spustil aj ten skript“ Za zázraky se platí. Za ty ohavné se někdy platí únikem paměti. Je jen jedna možnost, jak <script> přiřazovaný do innerHTML spustit.
„keby som stránku načítaval raz za 10 sekúnd, tak by sa mi pamäť zahltila tak či tak, netrvalo by to 30 sekúnd ale možno 5 minút“ Pětsetkrát vyšší interval pětsetkrát protáhne dobu zahlcení, takže by to trvalo přes 4 hodiny. „2. Chcem aby bol ten chat dynamický“ Člověk si ale stejně nestihne přečíst pět nových zpráv za sekundu. „aby človek vedel čo napísal, inak by sa mu správy objavovali dosť pomaly a nevedel by či správu poslal alebo nie“ Proč by to nevěděl? To při odeslání zprávy nestahuješ zároveň aktuální stav? Celé mi to připadá nějaké divně vymyšlené. |
||
Ricky4852 Profil |
#10 · Zasláno: 19. 2. 2012, 15:20:17
„A myslíš, že jQuery to uvnitř řeší jinak?“
No asi áno, keď mi to skripty spúšťa, pôvodne mi ich všetky ignorovalo, lebo načítalo len jeho html obsah, toto zrejme načíta stránku ako celok... „K čemu to je dobré?“ Jednoducho s nimi potrebujem pracovať, aby chat fungoval, celý funguje len na základe ajaxu. Ten kód ktorý si mi poslal funguje tiež, ale nevyrieši to stále môj problém. Skúsil som funkciu $("div").remove();, div mi to však vymazalo, ale pamäť sa naďalej už nezmenšovala, možno by to šlo týmto spôsobom, potom by som ho ale potreboval znovu vytvoriť |
||
Amunak Profil |
Ricky4852:
Můžeš taky každou sekundu posílat jen dotaz, jestli je v chatu něco nového, a až když je, načíst to. Není třeba vždy vytahovat celý obsah chatu. Určitě to ocení i lidé s pomalejším připojením, kterým stejně zahltíš linku, pokud budeš každých dvěstě milisekund stahovat pár tisíc bajtů. |
||
Nox Profil |
shaggy:
„Ty vôbec rozumieš tomu, čo píšeš? Ja nie som javascript nazi ako napríklad Chamurappi a nemám nič proti JS frameworkom, ale už len z princípu nemôže byť akýkoľvek framework postavený na nejakom jazyku rýchlejší ako vstavané funkcie jazyka. jQuery je "pohodlné", rieši za teba dosť vecí, ale nemýľ si to s rýchlosťou.“ V přesném slova smyslu ne, ale v určitém praktickém úhlu pohledu to být možné může a to tak, když framework obsahuje mnoho optimalizací doplněné mnoha lidmi ... kde jeden člověk většinou všechny nezná a k tomu nemá třeba čas všechny v projektu aplikovat ... a vzhledem k tomu že určitý úkon může být často realizován v jazyku mnoha způsoby, může být ve frameworku třeba ta sice složitější (nebo méně čitelná), ale rychlejší Ricky4852: Nevim co přesně tam skriptuješ, každopádně je rozhodně možné to udělat bez toho a to i kdyby ten skript byl generovaný přes PHP. Možná využiješ jQuery metodu .live(), pokud je to generované, tak místo toho můžeš použít třeba data-* atributy. Ale líp se bude odpovídat když budem vědět, o co jde |
||
Chamurappi Profil |
#13 · Zasláno: 19. 2. 2012, 22:31:09
Reaguji na Rickyho4852:
„Jednoducho s nimi potrebujem pracovať, aby chat fungoval“ Nepotřebuješ. „ale pamäť sa naďalej už nezmenšovala“ Garbage collector uklízí, až když si myslí, že je vhodné uklízet. I kdyby se ti povedlo uvolnit paměť, nemusí se to projevit. Reaguji na Noxe: „když framework obsahuje mnoho optimalizací“ Zrovna na AJAXu ale není co optimalizovat. „tak místo toho můžeš použít třeba data-* atributy“ Není důvod prohánět informaci přes DOM. |
||
Nox Profil |
#14 · Zasláno: 20. 2. 2012, 09:03:34
Možná, nevim co chce těma skriptama dělat ... no nebo to celé poslat jako JSON, bez markupů, jen data
|
||
_es Profil |
#15 · Zasláno: 20. 2. 2012, 09:42:53
Ricky4852:
Dôvody ti boli vysvetlené, sprav to nejako normálne, aby neboli vo vrátených dátach elementy <script> - na uvedený účel nie sú treba.
|
||
Ricky4852 Profil |
#16 · Zasláno: 20. 2. 2012, 15:56:57
OK, ďakujem všetkým za pomoc
|
||
Witiko Profil |
shaggy:
„Chamurappi ... javascript nazi“ Tady je teď koukám ještě větší zábava, než když jsem tu byl stálým hostem. :-) Ricky4852: Data předávej pomocí JSON a na HTML si je přetvářej až javascriptem samotným. Jinak místo tupého updatu každých 5 sekund můžeš zkusit nějakou formu tzv. HTTP pushe, kdy dostaneš nové zprávy jakmile na serveru jsou bez nutnosti neustálých update. Ale je to jak implementačně náročnější, tak vyžadující nízkoúrovňovější přístup k serveru, než nabízí většina free hostingů. |
||
Časová prodleva: 11 let
|
0