Autor | Zpráva | ||
---|---|---|---|
Tom2234 Profil * |
#1 · Zasláno: 3. 9. 2009, 19:48:26
Preju hezky vecer :)
Mam takovy dotaz... mam stranku, kde casto pouzivam "mysql_query("SELECT * FROM........" a pote si hodnoty ukladam do promene a na dane strance s nimi pracuji... pote prejdu napr na jinou stranku (dejme tomu byl jsem na strance odkazy.php a nyni prejdu na stranku portfolio.php) a vyuzivam naprosto stejny select... je vhodne tento select ulozit do souboru napr "select1.php" a pote jej do kazde stranky kde s timto budu pracovat includovat? usetrim tak nekolik radku kodu, jelikoz na zacatku scriptu jej vzdycky zaplnim necim takovymto: $vypis = mysql_query("SELECT * FROM table ORDER BY id DESC LIMIT 0,1", $spojeni); while ($pole_s_hodnotou = mysql_fetch_array($vypis)) { $aa_logo = stripslashes(htmlspecialchars($pole_s_hodnotou['logo'])); $aa_kraj = stripslashes(htmlspecialchars($pole_s_hodnotou['kraj'])); $aa_adresa = stripslashes(htmlspecialchars($pole_s_hodnotou['adresa'])); $aa_psc = stripslashes(htmlspecialchars($pole_s_hodnotou['psc'])); } misto toho bych mel tedy jen kod <?php include "select1.php"; ?> popripade jak se takovato situace resi? abych je pokazde, kdyz potrebuju pracovat s daty z DB nemusel tahat z DB a usetril si nejake radky kodu a asi i zrychlil kod.. dekuju za odpovedi :) |
||
MCKAY Profil |
#2 · Zasláno: 3. 9. 2009, 20:21:40
Includuj to, vyplatí se to, když změníš později obsah databázových tabulek třeba, nebo přestaneš soubor potřebovat.
|
||
Tom2234 Profil * |
#3 · Zasláno: 3. 9. 2009, 20:39:35
jj pravda, pri zmene DB se to urcite hodi... jinak me ted napada, dejme tomu ze mam v DB 20 tabulek.. s kazdou tabulkou pracuji nejmene na 5ti strankach... je vhodne vytvorit tedy 20 php souboru, kde v kazdem bude vyber dat pro danou tabulku neboto vytvorit hromadne? v pripade ze hromadne tak to zase bude moc dotazu na DB a 19z toho zbytecnych ze? ale zase 20php souboru... no asi je lepsi jich mit 20 a nacitani rychlejsi nez 1 a nacitani pomale :)
|
||
Mastodont Profil |
#4 · Zasláno: 3. 9. 2009, 20:41:21
Tom2234
Podstatně si to můžeš urychlit pomocí keše (cache), v tom případě je dotaz spouštěn jen třeba jednou za hodinu nebo jen po změně dat v databázi. |
||
Tom2234 Profil * |
#5 · Zasláno: 3. 9. 2009, 20:52:27
Aha.. cache :o)... zkusim pohledat nekde na internetu jak by se to resilo, s tim jsem jeste nepracoval... jinak kdybyste nekdo mel po ruce odkaz na nejaky hezky tutorial, navod a nebo priklad, ze ktereho by se dala podobna situace vycist, budu jen rad kdyz se s nim podelite :o)
|
||
ondřej Profil * |
#6 · Zasláno: 3. 9. 2009, 20:57:18
„jj pravda, pri zmene DB se to urcite hodi... jinak me ted napada, dejme tomu ze mam v DB 20 tabulek.. s kazdou tabulkou pracuji nejmene na 5ti strankach... je vhodne vytv“
Já si myslím, že tady by bylo nejvýhodnější použí klasické f-ce. Na záčatku stránky by jsi includoval soubor s f-cemi, v něm by byla fce, kde by jsi měl např. ty selecty a když bys chtěl nějaký získat tak by sis ji jen zavolal a do paramatru dal buďto název tabulky nebo ID té query. |
||
SwimX Profil |
#7 · Zasláno: 3. 9. 2009, 20:57:42
|
||
Tom2234 Profil * |
#8 · Zasláno: 3. 9. 2009, 21:02:36
ondřej
JJ to je tak pravda... a ted co je nejvyhodnejsi a co se nejvice podepise na rychlosti nacitani stranky? SwimX Dekuju, hned si to jdu procist :) |
||
Mastodont Profil |
#9 · Zasláno: 3. 9. 2009, 21:03:01
SwimX
Ne, to je cache přímo v databázi, tu z PHP neovlivníš. |
||
Tom2234 Profil * |
#10 · Zasláno: 3. 9. 2009, 21:07:59
Mastodont
ja si prave rikam ze to je neco asi trosku jineho jak to tak ctu... ale to by asi take nebylo na skodu pouzit ne? |
||
Tom2234 Profil * |
#11 · Zasláno: 3. 9. 2009, 21:11:21
nasel jsem:
Pro cacheování můžete využít knihovnu Cache Lite z projektu PEAR. S jednoduchým tutorialem, jak ji používat. s odkazem Zde Chvilku jeste pockam na Vase nazory na tuto knihovnu a zda s ni jsou dobre zkusenosti tak si to proctu a zkusim si podle to podle toho navodu zprovoznit :) |
||
Mastodont Profil |
#12 · Zasláno: 3. 9. 2009, 21:11:53 · Upravil/a: Mastodont
Tom2234
Jistě že ne, ale tuhle cache ovládá administrátor databáze, ne ty z PHP aplikace. Cache Lite - ano, může být. |
||
SwimX Profil |
#13 · Zasláno: 3. 9. 2009, 21:14:02
Mastodont:
aha :) tak to jsem ani nevěděl, ale tak, taky to není špatné znát :) |
||
Tom2234 Profil * |
#14 · Zasláno: 3. 9. 2009, 21:18:16
Mastodont
ah tak... tak tim si az zas tak zatezovt hlavu neusim :)... uz ted mam pekny gulas z toho vseho cachovani :o) jeste jsem se chtel zeptat jak poznam rozdil, zda se stranka opravdu nacetla rychleji.. je mozne to pozorovat php skriptem, ktery mi vypise za jak douho byl web nacten? Toto asi neni zrovna idealni mereni predpokladam.. neco presnejsiho by nebylo? |
||
Tom2234 Profil * |
#15 · Zasláno: 3. 9. 2009, 22:37:42
tak jsem nasel velmi libili skript.. mozna by bylo vhodne jej pouzit... stranka se bude cachovat do souboru a pote se jen nacte dany soubor... jak rikam, s cachovanim jsem nikdy nepracoval a uz pres hodinu se snazim najit jak se pracuje s casem.. jde mi konkretne o toto:
potrebuju pomoci cache ulozit do souboru obsah webu (skript nize), ale take potrebuju, aby se chachovani opakovalo v pripade ze uplyne doba X minut nebo se upravi udaje (nebo vlozi nove) do databaze... neumel byste nekdo s timto poradit? nejaky navod nejlepe, uz bych si to sam nastudoval.. jinak skript, ktery takto cachuje do souboru je zde Odkaz: <?php //proměnná představující název souboru $cacheFile = "cache/cache.html"; //jestliže soubor existuje, ulož jeho obsah do proměnné $obsah a vypiš obsah souboru cache.html. if ( (file_exists($cacheFile))) { $obsah = file_get_contents($cacheFile); echo $obsah; } //pokud soubor neexistuje else { //otevřete přístup do mezipaměti ob_start(); //do mezipaměti se uloží text echo "<h1>Text obsažený v CACHE </h1>"; //Z mezipaměti vybereme uložený text a vložíme ho do proměnné $vypis_do_souboru $vypis_do_souboru = ob_get_contents(); //vyčistíme mezipaměť ob_end_clean(); //Text pocházející z proměnné $vypis_do_souboru do které jsme uložili obsah mezipaměti prostě vypíšeme do souboru cache.html file_put_contents($cacheFile,$vypis_do_souboru); // a také výsledně text uložený v z proměnné $vypis_do_souboru zobrazíme na obrazovce. echo $vypis_do_souboru; } ?> predem Vam dekuju ;) |
||
Tom2234 Profil * |
#16 · Zasláno: 3. 9. 2009, 22:55:52
nasel jsem neco dle mych predstav.... ovsem nejak mi nefunguje nastaveni casu po kterem by cache mela byt opet vytvorena...
radek 14 v kodu puvodne nebyl, tak jsem si jej pridal.. nastavil jsem promenou expiretime na hodnotu 2.. tedy po dvou sekundach by se cache mela znovu vytvorit... ovsem neni tomu tak a nechapu proc... pritom kdyz na radku 18 zmenim konec radku z: time() - $expireTime na time() - 2 tak se cache vytvari spravne po dvou sekundach... nevite nekdo kde je ve skriptu chybka? (bude to bud radek 14 nebo 18). <?php define ('CACHEDIR','cache/'); //ulozCache Zapíše data do souboru se zadaným označením function ulozCache ( $content , $cacheName ) { $fp = fopen(CACHEDIR. urlencode($cacheName).'.dat' , 'w' ); fwrite( $fp , $content ); fclose( $fp); } //ctiCache Se pokusí zjistit, zda soubor s určeným označením existuje. Pokud ano, podle stáří souboru vrátí obsah souboru. //V případě že je soubor příliš starý (porovná čas vytvoření s aktuálním časem minus povolené stáří souboru), tváří se, že neexistuje. $expireTime =2; function ctiCache ( $cacheName , $expireTime ) { $cacheFile= CACHEDIR.urlencode($cacheName).'.dat'; if ( file_exists ($cacheFile ) && filemtime ( $cacheFile ) >( time() - $expireTime ) ) { return file_get_contents( $cacheFile ); } return false; } ?> <html> <?php if ( !$cachedText = ctiCache( 'narocnyBlok' , 600 )) { ob_start(); // kešovaná oblast ?> <p>Zobrazen soubor a ulozeny v <? echo date("H:i:s"); ?>.</p> <?php //konec kešované oblasti $cachedText = ob_get_contents(); ob_clean(); ulozCache( $cachedText , 'narocnyBlok' ); } echo $cachedText; unset ($cachedText); ?> </body> </html> |
||
SwimX Profil |
#17 · Zasláno: 3. 9. 2009, 22:58:17
Tom2234:
„jeste jsem se chtel zeptat jak poznam rozdil, zda se stranka opravdu nacetla rychleji“ http://cz2.php.net/microtime <?php $time_start = microtime(true); //celá stránka $time_end = microtime(true); $time = $time_end - $time_start; echo time; ?> |
||
Tom2234 Profil * |
#18 · Zasláno: 3. 9. 2009, 23:11:50
SwimX
Dekuju, ted jsem to otestoval a bez cachovani je cas cca 5.96046447754E-6 a s cachovanim 1.4066696167E-5... takze az 5x rychleji se stranka nacte :o) to je parada :)... ted s uz jen vyresit nejak podminku at se cache vytvori novy pokud je aktualizovana databaze, nebo po urcite dobe a bude to OK... (s tim cachovanim po updatu nebo novem inertu do DB me napadlo pridat sloupec do DB, kde se bude ukladat nejnovejsi cas.. pote porovnat cas vytvoreneho cache souboru s casem v DB a pokud je v DB cas novejsi tak se cache vytvori nova.... ovsem tim bych musel pokazde volat dotaz na DB, cemuz se chci prave vyhnout.. nejde to vyresit lepsim zpusobem? abych nemusel voldat databazi?) |
||
SwimX Profil |
#19 · Zasláno: 3. 9. 2009, 23:19:32
Tom2234:
můžeš ho dát do souboru :) ae přijde mi lepší mít to v db, než řešit soubor. možná někoho napadne eště něco lepšího |
||
Tom2234 Profil * |
#20 · Zasláno: 3. 9. 2009, 23:24:17
SwimX
premyslim a hledam na internetu ale zatim zadna jina idea nez mit cas v te db me nenapada... jeste ty jsi poznamenal ze je moznost jej ulozit do souboru, ale to ai bude opravdu lepsi jej mit v db, jelikoz kdyz bych takovych souboru s casem mel mit X tak se v tom pote ztratim co k cemu patri :)... asi ten dotaz na db kvuli casu budu muset prekousnout... :o) uz ted jsem vlastne chod stranky urychlil 5x tak jeden dotaz do db tomu nepritizi :).... jinak nejde mi stale do hlavy ten problem z dotazu #16, kdy se snazim ulozit do promene cas, po kterem by se cache mela vytvorit znova... =o/ |
||
SwimX Profil |
#21 · Zasláno: 3. 9. 2009, 23:38:35
na udělání ukonu za nějaký čas to bude chtít spustin na srvru démona, třeba CRONa. nastavit mu, aby každou hodinu spustil soubor refreshcache.php a v němm bude napsán skript na vytvoření nové cache...
|
||
SwimX Profil |
#22 · Zasláno: 3. 9. 2009, 23:40:38
na udělání ukonu za nějaký čas to bude chtít spustin na srvru démona, třeba CRONa. nastavit mu, aby každou hodinu spustil soubor refreshcache.php a v němm bude napsán skript na vytvoření nové cache...
|
||
Tom2234 Profil * |
#23 · Zasláno: 3. 9. 2009, 23:49:21
jj i to je reseni, ale to jak jsem psal v dotazu #16 by so take... tam vlastne vytvorim soubor html ve slozce cache a porovnavam datum vytvoreni souboru s datem na servru minus povolena prodleva (treba ta hodina)... v pripade ze je soubor html starsi nez nynejsi datum minus hodina tak se vytvori novy... toto se ovsem deje jen v pripade, ze na stranku prijde uzivatel... coz ovsem zas takoy problem neni, nepotrebuju CRONa, jelikoz nepotrebju aktualizovat html cache soubory, kdyz na strance nikdo neni.. kdyz nekdo prijde tak e aktualizuji :)....
i kdyz ted mi docvaklo, ze kdyz pouziju to co jsem psal, tak aspon jeden uzivatel, ktereho takto "vyuziju" pro vytvoreni cache souboru vlastne bude mit nacitani dane stranky zpomalene.... pri vyuziti CRONu to udela skript takze uzivatele budou stale pracovat s aktualni cache... :o) dobry napad :) za ten dekuju ;o) a jeste posledni dotaz a pote to zde cele uz asi ukoncim... nikde jsem se nedocetl co je vhodne cachovat (napr do tech externich souboru ulozenych na webu)... nejspise nejake slozite operace, tedy kdyz ve krptu hodne pracuju s DB a cele to je casove narocne tak je vyhodne to cachovat... ale co takove komentare k clankum? je vhodne ukladat do souboru i je? v pripade ze aktualizace cache comentaru budu provadet prave porovnavanim casu v db..?? je vhodne cachovat cely obsah webu nebo jen "narocnejsi skripty"? |
||
Časová prodleva: 15 let
|
0