Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP-koodin optimointi ja testaus

Sivun loppuun

jannu82 [01.03.2007 17:59:42]

#

tiedättekö jotain oppaita tai ohjeita miten pystyy optimoimaan php koodia niin että siitä tulisi "nopeampaa"? ja
tiedättekö jotain latausajan testausohjelmistoja? myös mysql kannan kyselyjen nopeuden testausohjelmistoja?

kayttaja-2791 [01.03.2007 21:24:51]

#

MySql:ssä kannattaa tutustua EXPLAINiin:
http://dev.mysql.com/doc/refman/5.0/en/explain.html

PHP:ssä on toki tapoja tehdä asiat nopeasti, sekä hitaasti... Kun tehdään mahdollisimman vähän, niin suoritusajatekin luonnollisesti ovat pienemmät. Mitään hirveän yleispätöistä ei voine sanoa, pitää ymmärtää vähän sitä mitä pinnan alla tapahtuu.

Eli jos vaikka haluamme tulostaa viisi viimeistä merkintää taulukosta, niin hidas tapa on ensin kääntää taulukko käänteiseen järjestykseen array_reversellä (klassinen putkaesimerkki), ja sitten tulostaa viisi ensimmäistä solua. Nopeampaa on vaikka forilla laskea taaksepäin taulukon solujen lukumäärästä, ja hakea suoraan ne viisi viimeistä solua, eikä tehdä itse taulukolle mitään.

ajv [01.03.2007 22:37:44]

#

Itellä pätee seuraavanaliset säännöt, kun webbisoftaa suunnittelen:

- Optimoi ja normalisoi kantarakenne, tietokantakyselyt ja kyselyjen määrä (esim. kyselyjä suoritetaan silmukassa => jossain on optimoimisen varaa).
- Siirrä mahdollisimman paljon toiminnallisuutta kantaan, jolloin PHP-koodeista tulee luonnollisesti optimaalisia.
- Hae kannasta vain se data, mitä tarvitset.

Tuosta tietokantarakenteen optimoinnista löytyy varmaan niin paljon tietoa, että siitä on varmaan tähän turha jaaritella.

Testausohjelmistoja... Ite oon tehnyt omat testausohjelmistot. Tietokantayhteys hanskataan oman luokan kautta, joka laskee kyselyiden määrät, niihin kuluneet ajat ja tarvittaessa logittaa kantaan. Sivumoottori taas laskee sivun header-, runko- ja footer osien suoritusajan ja logittaa ne tarvittaessa kantaan. Logitus pariks viikoks päälle, muutama SQL-lause ja exceliin vähän käppyrää, ni jo löytyy pullonkaulat :)

Antti Laaksonen [02.03.2007 00:21:37]

#

Yksi helppo konsti nopeuttaa sivujen toimintaa on tallentaa skriptin tuottama sivu tiedostoon, josta sen voi näyttää seuraavilla kerroilla suoraan, jos tiedot eivät ole muuttuneet. Tämä on hyödyksi erityisesti sivuilla, joita katsellaan usein mutta jotka eivät muutu läheskään joka kerta. Esim. Ohjelmointiputkan keskustelun etusivu muodostetaan uudestaan vain silloin, kun keskusteluun on tullut uusi viesti.

jannu82 [02.03.2007 09:57:44]

#

ok! kiitos näisä vastauksista. rupeankin miettimään tota testauskoodin tekoa....

ajv [02.03.2007 10:03:03]

#

Antti Laaksonen kirjoitti:

Esim. Ohjelmointiputkan keskustelun etusivu muodostetaan uudestaan vain silloin, kun keskusteluun on tullut uusi viesti.

Mutta ei silloin kuin poistetaan viesti tai jotain muuta odottamatonta tapahtuu? Tai ainakin monesti tuo keskustelun etusivu on näyttänyt vääriä tietoja. Minusta tuo on purkka-ratkaisu, mutta tämä on tietysti vain minun mielipide.

Antti Laaksonen [02.03.2007 10:52:57]

#

Nykyään viestit haetaan uudestaan, jos viestien määrä on muuttunut, eli joskus harvoin etusivulla on vanhaa tietoa (tarkistuksen välillä on sekä tullut että poistunut viesti). Tämän asian voisi kuitenkin helposti korjata merkitsemällä jokaisen lisäyksen ja poiston jälkeen, että tiedot täytyy hakea uudestaan. Yleisesti välimuistin käytössä ei ole mitään vikaa, vaan se nopeuttaa usein asioita todella merkittävästi. Jopa tietokoneen sisällä on oma välimuisti, jonka ansiosta samoja tietoja ei tarvitse hakea jatkuvasti hitaasta keskusmuistista.

ajv [02.03.2007 11:07:31]

#

Antti Laaksonen kirjoitti:

Jopa tietokoneen sisällä on oma välimuisti, jonka ansiosta samoja tietoja ei tarvitse hakea jatkuvasti hitaasta keskusmuistista.

Näin on, mutta eikö olisi järkevämpää hoitaa cachetus jo tietokannan puolella? Ja kyllä MySQL huolehtii tuosta jo jollain tasolla automaattisesti itsekkin.

Antti Laaksonen [02.03.2007 11:36:29]

#

Tunnen tietokantoja vähän huonosti, mutta jos saman pystyy tekemään jotenkin tietokannassa, tämä voisi tosiaan olla siistimpi ratkaisu. Puolustan kuitenkin omaa toteutustani vielä sen verran, että siinä tietokantaa ei tarvitse välttämättä vaivata ollenkaan, välimuisti toimii tietokannan ominaisuuksista ja asetuksista riippumatta ja samaa tekniikkaa voi käyttää, jos tietoja ei haetakaan tietokannasta vaan aikaa kuluu muuhun käsittelyyn ja laskentaan.

Sami [02.03.2007 12:42:05]

#

MySQL pistää oletuksena viimeisimmät tietokantahaut ja niiden tulokset välimuistiin, jonka oletuskoko on 1 MB. Jos tietokanta ei ole muuttunut ja sama kysely tehdään myöhemmin uudelleen, niin tulos haetaan suoraan välimuistista, eikä tietokantaa tarvitse rasittaa ollenkaan.
Tarkempaa tietoa välimuistin säätämisestä löytyy manuaalin osista 5.13.3. (Query Cache Configuration) ja 5.13.4. (Query Cache Status and Maintenance).

Lähde:
MySQL 5.1 manuaali http://www.mysql.org/doc/refman/5.1/en/query-cache.html


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta