Refresh - načítání z DB – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Refresh - načítání z DB – JavaScript, AJAX, jQuery – Fórum – Programujte.comRefresh - načítání z DB – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
RePRO0
Super člen
12. 8. 2011   #1
-
0
-

Zdravím,

vypisuji údaje z DB. Problém je, pokud už mám hodně výpisů vypsaných, tak to zpomaluje jako prase. Potřebuju poradit, aby to vždy vypsalo jen poslední ID (to co je nového -- aby to nevypisovalo to, co už jsem viděl). A zbytek nějak hešovat. Rychlost je rychlost... 

Snad mě chápete. Pokud ano, pište kódy (samples) + užitečné links. A beru i rady (ale hodně užitečné). 

Díky, RePRO.

Nahlásit jako SPAM
IP: 95.82.164.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
Reklama
Reklama
Curo
~ Šéfredaktor
+8
Hero
12. 8. 2011   #2
-
0
-

#1 RePRO
Asi jsem moc dobře nepostřehl problém - pokud chceš vypsat jen poslední (nová) data, tak je vypiš např. dle timestampu poslední návštěvy, ne?

Možná bych mohl poradit více, ale nemůžu vyšpekulovat problém, který tě trápí :-).

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
RePRO0
Super člen
12. 8. 2011   #3
-
0
-

#2 Curo
Čau čau. :-) Jinak chválím za tento web - skvěle dynamickej... Nějaký spešl framework? ;-)

Mám klasický chat, kde mám na zdi nějaké texty a pořád je přidávám. Zeď se mi každé 4 sekundy refreshuje. To znamená, že se mi to pořád načítá z DB a dost to zpomaluje...

A to, co se mi refreshlo už nepotřebuji znovu načítat z databáze... Chápeš mě? Chci jen to nové načítat (last ID) aby to nezpomalovalo. ;-)

Nahlásit jako SPAM
IP: 95.82.164.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
Curo
~ Šéfredaktor
+8
Hero
12. 8. 2011   #4
-
0
-

#3 RePRO
Díky  . Vše dělnická práce! :-)

Tak možností je několik:

  • do databáze (nebo cookies) na každý refresh uložíš ID posledního příspěvku, při refreshi vytáhneš pouze příspěvky vyšší jak toto ID
  • pokud refreshuješ pomocí JS, jakože asi jo, pak můžeš předávar dotazu (do DB) datum, kdy vybereš příspěvky s datem vyšší, než poslané datum. A při vykreslování těchto příspěvků z DB rovnou vyplivneš i aktuální datum, které se zase pošle za další 4 s... (a tím vykreslí ty za poslední 4s)
  • obě metody však vrátí nulový počet výsledků, pokud za dané 4s nebylo nic vloženo

Osobně bych asi vždy vytahoval X posledních příspěvků a je, tak i klasický chat vždy funguje... Metody výše zmíněné bych použil pro signalizaci, který příspěvek je nový od posledního refreshe.

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
RePRO0
Super člen
12. 8. 2011   #5
-
0
-

Vlastní tvorba? Tak to obdivuji. Dost se mi to líbí (včetně grafiky - jak to děláš? :D) a muselo to dát plno práce. Na druhou stranu pokud člověk umí skvěle použít jQuery (jedinečná knihovna) - je všechno tak jednoduché... Pár řádků kódů a ta funkčnost (dynamičnost) včetně zabezpečení. 

Chápu to -- jak to myslíš, že při každém refreshi budu vytahovat jenom příspěvky, které mají třeba isSee = 0. Ale co s těma ostatníma? Já chci vidět i ty ostatní, kde máš isSee = 1. Ale nechci je tahat z DB... v tom je problém.

BTW: Jak si mi napsal, zkusil jsem tedy LIMIT, a pomáhá to samozřejmě... ale ještě bych to rád optimalizoval tou metodou výše. Když to nepůjde - nepůjde.

Jenže teď jsem si vzpomněl, texty jsou texty - tam dáš třeba LIMIT 10 a jsi v cajku, ale co výpis online users? Tam je nemůžeš zkrouhnout limitem - vždy musíš vypsat všechny online usery. Tam pak je na místě ta metoda.

Díky.

Nahlásit jako SPAM
IP: 95.82.185.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
Curo
~ Šéfredaktor
+8
Hero
12. 8. 2011   #6
-
0
-

#5 RePRO
Máme skvělý redakční tým, s ním je vše jednoduché :-).

Pokud chceš vypsat online uživatele, tak pokud na to nemáš spešl tabulku, tak vyber autory příspěvků např. za posledních 10 minut a ty označ za online. Dotazem by to vypadalo "vyber vše from příspěvky datum<(now()-10min)" + odstranění duplicit (GROUP BY ... HAVING COUNT(*)>1).

Tak pokud chceš ty viděné příspěvky uchovávat lokálně, pak moc možností asi nemáš. Do cookies to dávat je nesmysl, takže jedině storage v prohlížeči. Tím docílíš znovuvypsání již viděných příspěvků i po refreshi.

No a pokud chceš mít stránku a tam mít zobrazené viděné přísěvky jen do doby refreshe stránky (kdy se načte vše znovu), pak musíš data tahat ajaxem:

  • uživatel přijde na stránku, kde se mu vypíšou poslední příspěvky, třeba posledních 20
  • po načtení stránky (layoutu) v události onload zavoláš f-ci vykresli()
  • f-ce vykresli() bude volat druhou f-ci zavolej() která bude volána (první funkcí) každých 10s (pomocí SetInterval()
  • no a funkce zavolej() se bude dotazovat na DB na nové příspěvky (novější než poslední vypsaný příspěvek) a pokud nějaký je, přidej ho na začátek již vypsaných příspěvků (jQuery -> prepend)

Vypadá to složitě, ale v zásadě jen každých 10 s zavoláš nad DB dotaz na nové příspěvky, které přidáš... :-)

Nahlásit jako SPAM
IP: 109.164.4.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

FF - refresh — založil bbtrash

REFRESH V FF — založil leon

Refresh formu — založil Eversmann

Refresh iframu — založil otzi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý