Kuidas teha koodi lyhemaks ja kiiremaks?

Sõltub suuresti olemasolevast koodist. Kuid üldiselt:

  1. korduvad koodijupid liiguta funktsioonidesse
  2. pikemad ja sarnased funktsioonid voib paigutada eraldi failidesse ning klassidesse
  3. märgatavalt lihtsustab koodi keelekonstruktsioonide for ning foreach kasutamine koos massiividega

Kohe kõigest pikemalt ;-) 1. Kasutajafunktsioonidest on pikemalt juttu eraldi lehel. Nagu öeldud tuleb jälgida, et loodavad funktsioonid ei kordaks PHP-s juba olemasolevaid funktsioone.

2. Objektideks on tavaliselt eraldi failidesse paigutatud sarnased funktsioonid, mis kasutavad omi muutujaid.

3. Korduseid saab luhendada kasutades nt foreach keelekonstruktsiooni ning massiivi. Selleasemel, et uhtejarge lukkida 17 insert paringut voib need 17 id-d lisada massiivi ning selle foreach tsuklis labijalutada ning iga id juures sooritada lisamiseks paring. Kumb jatab parema mulje?

a)

mysql_query("update tabel set values vali1='a' where id=1");
mysql_query("update tabel set values vali1='b' where id=2");
mysql_query("update tabel set values vali1='c' where id=3");
mysql_query("update tabel set values vali1='d' where id=4");
mysql_query("update tabel set values vali1='e' where id=5");

versus b)

$asjad = array(1=>'a','b','c','d','e');
foreach($asjad as $id=>$vaartus)
  mysql_query('update tabel set values vali1="'.mysql_real_escape_string($vaartus).'" where id='.$id);

Andmeedastus

Andmeedastuse vähendamiseks võib osa staatilistest failidest tõsta kuhugi teise serverisse ja sealt saab siis (i)framedega lehe põhisaiti haakida.

Võimalus on ka kasutada kasutajale saadetava lehe gzippimist, mille brauser jooksult lahtipakib.

Seda saab teha lisades faili algusesse:

ob_start("ob_gzhandler");

Cachemine

Cachemine kujutab endast ajutiste html failide tekitamist, mida kasutatakse selle asemel et igakord sooritada andmebaasi paringuid - see voib oluliselt kiirendada lehe tood. Vajalike klasse leiab peari lehelt, http://pear.php.net/packages.php?catpid=3&catname=Caching olemas ka memcache nimeline extension mis voimaldab koormust mitme serveri vahel jagada.

Andmebaaside optimeerimine

Andmebaaside juures tuleb jälgida, et andmed ei oleks dubleeritud ning kasutataks õigeid andmetüüpe. Kasutajanime pole mõtekas lisada TEXT tüüpi välja vaid VARCHAR pikkusega nt 15 märki.

Andmebaaside juures tuleks kindlasti uurida, et võimaluse korral saaks kasutada indekseid. Indeks on nagu kartoteek, mis lihtsustab andmete leidmist. See teeb andmebaasi küll väheke suuremaks, kuid kiirendab oluliselt päringuid.

Nt MySQLis on mitut tüüpi indekseid, vaikimisi on indekseeritud PRIMARY KEY väljad, lisaks on olemas UNIQUE, INDEX ning FULLTEXT indeksid. FULLTEXT võimaldab otsingus kasutada teatud metamärke nagu _*? jms. Indekseerida tuleks sellised väljad, mida sagedasti kasutatakse nt where päringus.

Olgu nt tabel kasutajad:

SELECT * FROM kasutajad WHERE kasutajanimi="keegi"

siis sellise päringu kiirendamiseks aitab, kui indekseerida kasutajanime väli ning otsida selle järgi:

CREATE INDEX kasutaja_idx ON kasutajad (kasutajanimi)

PHP-l ja ka Mysql-il on suurepärased manuaalid - kasutades uusi või miks mitte ka vanemaid funktsioone ja võimalusi võib tutvuda käsiraamatu vastavate lehekülgede ning kommentaaridega: php.net/manual ja http://dev.mysql.com/doc/

NB! PHP käsiraamatu kohta veel selline vihje, et kiireks abiinfo leidmiseks võib kasutada aadressi php.net/funktsiooni_nimi, kus funktsiooninimeks on vastava funktsiooni nimetus, nt fclose või parse_ini_file.

 
optimiseerimine.txt · Viimati muutnud: 2008/12/24 01:29 persoon laurik
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki