Autor Zpráva
Tom2234
Profil *
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
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 *
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
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 *
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 *
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
query-cache: http://dev.mysql.com/doc/refman/5.0/en/query-cache-operation.html
Tom2234
Profil *
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
SwimX
Ne, to je cache přímo v databázi, tu z PHP neovlivníš.
Tom2234
Profil *
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 *
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
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
Mastodont:
aha :) tak to jsem ani nevěděl, ale tak, taky to není špatné znát :)
Tom2234
Profil *
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 *
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 *
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
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 *
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
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 *
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
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
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 *
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"?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: