a) Motivació
En webs que tenen moltes visites és imprescindible fer una bona optimització. La veritat és que sempre és necessari fer-ho, però no sempre es fa evident fins que no et trobes en la situació.
Si el PHP triga a generar una pàgina 0,4 segons, implica que trigarà 4 segons a resoldre 10 peticions, el que vol dir que les que les noves peticions que vagin entrant es quedaran “a la cua” fins un màxim d’aquest temps (segur que serà menys). Si ens trobem amb 100 peticions, la cua s’allarga fins a 40 segons. I si, com era el meu cas, podem tenir fins a 500 peticions, la cua s’allarga fins a 200 segons, com a màxim (la realitat eren fins a 60). Tenint en compte que un usuari no espera més de 15 segons a carregar una pàgina, el problema és evident.
b) Què optimitzar:
El primer és optimitzar el servidor, si això és possible. Res del que fem a d’altres nivells podrà igualar posar un processador més ràpid o posar més RAM.
El segon a optimitzar ( ara que ja sé què tocar ) és que -no és bo que totes les pàgines siguin dinàmiques-. Una pàgina estàtica és servida mil vegades més ràpid que una de dinàmica. Per això, podem fer ús extensiu de la memòria cau. En el meu cas he fet servir l’extensió PEAR::Cache_Lite , molt ràpida, i que dóna una caducitat a les webs d’1 minut. Cada minut s’obté una pàgina que triga 0,4 segons a ser processada. Però la resta de peticions processa la pàgina en 0,03 segons de mitja. Si veig que tot i així no és suficient, es pot ampliar a 2, 5, 10, 60 minuts o el que faci falta.
El tercer a optimitzar és el codi.
Primer començem pel MySQL: Consultes -senzilles-, evitant que es repeteixin i guardant les dades que s’hagin de tornar a usar en la mateixa execució en una variable del php ( $cache = new Array() ). Evitar els COUNT ( en SQL Server és lentissim, en MySQL … no tant ). Evitar els INNER JOIN ( comprovat en MySQL 5.0: les subconsultes són més ràpides que un INNER JOIN ), retornar els resultats “el més concrets possibles”. Definir correctament les claus primàries i els “INDEX”. Indexeu tot allò que consulteu en un WHERE de forma habitual.
Després continuem pel propi PHP. Si! Aquest és l’últim concepte a optimitzar. La majoria de servidors incorporen “compiladors” que deixen el codi PHP semicompilat a la memòria cau (si no, poseu-l’hi), el que fa que les optimitzacions del PHP, si el codi és una mica decent, siguin les menys importants. Reduïr el nombre d’includes, passar tots els arrays i objectes per referència, o un seguit de 60 optimitzacions com les que podeu llegir a Syntax Error.
[Update] I l’última cosa a optimitzar: El codi HTML!!! Un codi més petit triga MENYS a arribar a l’usuari. I un codi en que les mides siguin “fixes” ( la mida en píxels en comptes de % o de no indicar res ) donarà la sensació que es carrega més ràpid ( pot dibuixar la pàgina encara que li faltin alguns elements, com ara la publicitat externa ).
Us ha servit d’alguna cosa aquest consell? Esteu d’acord amb el que dic? No? … comenteu!!!!
Publicat per elrohir