Milan Kryl

Kryl Blog - RSS

PHP optimalizace

24. 05. 2004 - 00:15

Když se rozhodnete optimalizovat své stránky, tak nejen optimalizací HTML si můžete hodně pomoci. Dříve než se pustíte do ladění komprimace na serveru, odstraňování přebytečných mezer v kaskádových stylech a zkracování proměnných v javascriptu, zkuste se nejdřív podívat pod kapotu vašeho webu.

Pokud váš web nečítá tři statické stránky vytvořené pomocí MS Word, ale jedná se o něco trošku složitějšího, bude jej pohánět nějaký programovací jazyk. Jazyk, který umožní dynamické změny obsahu a nebo "jen" generování obsahu do nějakých předvytvořených šablon. Předpokládejme, že takovýmto jazykem je právě jazyk PHP.

Stránky se s rostoucí návštěvností stávají pomalejšími a pomalejšími. A je jen na vás, jak to budete řešit. Pokud máte mnoho peněz, můžete sáhnout po hardwarovém rozšíření systému (koupíte rychlejší procesor, více paměti nebo rychlejší disky). Ale nemusíte mít dostatek financí a nebo se dostanete již na hranici svých možností (pokud chcete běžet s webem jen na jednom serveru). Lepší cestou, kterou si můžete vybrat je optimalizace vašeho kódu. A optimalizace začíná v jádru aplikace.

V následujícím textu si probereme několik postřehů, na které byste si měli dávat pozor a nebo které vám mohou při optimalizaci pomoci.

Vyhněte se PHPčku

Pokud můžete, tak používejte statické stránky a žádné dynamicky generované stránky. Použití PHP vede ke zpomalení stránek při velkém nárůstu návštěvnosti. Pomalé stránky vedou ke snížení počtu návštěvníků. Méně návštěvníků pro vás znamená méně zisku z vašeho webu.

Nakolik musí být vaše stránky generované dynamicky? Nestačí, když budou statické a pouze jednou za určitou dobu budou pravidelně vygenerovány z nových dat? Zamyslete se nad tím a části, které nemusí být úplně aktuální zoptimalizujte do statické podoby.

Dynamický obsah

Když už není vyhnutí a musíte mít dynamicky generované stránky, tak dodržujte následující body:

  • opravdu nemůže být obsah statický (ani jeho část?)
  • dynamický obsah nechte cacheovat
  • optimalizujte algoritmy použité v kódu aplikace
  • používejte co nejméně dotazů do databáze

Pro cacheování můžete využít knihovnu Cache Lite z projektu PEAR. S jednoduchým tutorialem, jak ji používat.

Plusy

  • menší využití externích zdrojů

Mínusy

  • stránka je PHPčkem stále parsována
  • data nejsou aktuální, ale nějakou dobu stará

Předgenerovaný obsah

Pokud použijeme předgenerovaného obsahu, tak se zbavíme parsování celé stránky PHPčkem. PHP se použije jen pro vygenerování statické stránky. Nejsou zde ani problémy s exspirací a stránku necháme přegenerovat, když je potřeba. Narazíme jen na to, že při nějakých změnách na rozsáhlém webu je těžké určit, které části se mají přegenerovat. A dále je třeba více diskového prostoru pro uložení předgenerovaného obsahu (což není v dnešní době až tak velký problém).

Generování na požádání

Dalším vylepšením předgenerovaného obsahu je generování na požádání. Používáme předgenerovaný obsah, ale po nějaké době jej vymažeme z disku. (např. podle doby posledního přístupu) Stránka se následně vygeneruje, až je požadována. Díky ošetření 404 skriptem, který danou stránku vygeneruje a přesměruje uživatele na ni. Neplýtvá se diskovým prostorem a není zde problém se zastaralým obsahem. Tento případ nemá žádné negativní stránky. (snad je to, že musíte mít přístup k nastavení serveru)

Další externí nástroje

  • bytecode cache - (APC - Alternative PHP Cache, SHM caches, ionCube Accelerator, Zend Cache)
  • cache obsahu - (squid)
  • SRM: scripting running machine
  • lingerd - optimalizace Apache, aby uzavíral korektně otevřená spojení, když je již nepotřebuje.

Používejte přiměřené funkce

Pokud jde něco udělat za pomoci jednoduchých funkcí, tak na to nepoužívejte kanon na vrabce. (např. použití ereg místo strpos) Když nepotřebujete sílu nějaké funkce, poohlédněte se po nějaké slabší, se kterou to půjde udělat taky a rychleji.

Pokud nemusíte, tak často nepoužívejte odkazy do pole (např. volání téže položky asociativního pole v nějakém cyklu). Za každým přístupem do pole se skrývá hashování indexu a hledání požadované hodnoty. To zabere o něco více času.

  • Optimalizujte dotazy do databáze.
  • Nepoužívejte FULLTEXT indexy nebo LIKE operátor na přístup k položkám. (ideální je číselný index)
  • Používejte LIMIT pro omezení výsledků jen na ty, které potřebujete.
  • Ještě horší než použití operátoru LIKE je jeho simulace v PHP skriptu.

Pokračování: PHP optimalizace 2, PHP optimalizace 3

Prameny: Dick Rethans - Talks

 

Tip: Krátké zprávy a zajímavosti (rychlý přístup https://kryl.info/kratce)