Connexions persistents: No gràcies!
17 Desembre 2007
I jo segueixo amb el meu problema: El sistema arriba a un punt que es queda “trabat”. Per què? No ho sé. Un dels altres paràmetres que a Condalis em van comentar és que tenia moltíssimes connexions concurrents a la base de dades “i que no era normal”.
Mirant, em va comentar que a “Una mar de contes”, uso el Sphider com a cercador … Cercador que per defecte usa connexions persistents a la base de dades. Què és una connexió persistent? Doncs que cada vegada que el PHP ha de demanar alguna cosa a la base de dades s’intenta connectar a la base de dades a través d’alguna connexió que ja existís amb anterioritat, evitant haver de “reconnectar” cada cop. I deixant les connexions sense tancar.
Això és vàlid quan el servidor no és Apache … en aquest servidor les peticions ens distribueixen entre “fills”, i els “fills” no poden veure les connexions que tenen entre ells. Això vol dir que quan una connexió es crea, es queda activa esperant algú altre que la faci servir … cosa que no passa mai. Això “ocupa” entrades al servidor MySQL. Això alenteix el MySQL.
De fet, quan ho vàrem mirar, “Una mar de contes” ocupava vora 47 peticions, totes elles inactives … i Megajocs 3 executant-se en aquell moment.
Ahir a la nit vàrem desactivar aquesta opció directament al servidor, i vaig modificar el codi amb l’objectiu de carregarme tots els mysql_pconnect que facin servir 3ers. Comprobarem si ara funciona millor.
Adéu PHP 4!
16 Desembre 2007
Si, ho acabo de llegir. L’equip de PHP ha anunciat que a partir d’aquest 31 de desembre el PHP 4 està mort. Recomanen passar-se directament al PHP 5.2 i al proper PHP 6.
Veurem què passa amb tots els llocs com Arsys, que tenen una política de no-actualitzar els ordinadors. Han passat 3 anys des de l’aparició del PHP 5 i encara hi ha molts servidors que no han migrat a aquest sistema. I moltes webs que no s’hi han adaptat.
Tocarà renovar-se o morir … la vostra web funciona en PHP 5? Les meves si!
Augmentar el CTR fàcilment
13 Desembre 2007
Una de les formes que no se m’havia ocorregut per augmentar el CTR era “filtrant” els anuncis. Hi ha vàries empreses que paguen -molts- diners a Google per sortir en moltes paraules claus. Moltes no tenen res a veure amb la web, però s’hi fan relacionar per sortir molts cops: Paguen per clic quan el que busquen és, clarament, la impressió.
El problema és que aquesta publicitat acostuma a no interessar a la gent. En el meu cas, el més evident és (era) “hostalia”. La publicitat d’hostalia em sortia continuament, i tot i els meus intents (infructuosos) d’eliminar-la contextualitzant, no me n’havia sortit. Al final vaig optar per posar-la en els filtres de la competència. I … el meu CTR s’ha doblat! L’espai que ocupava Hostalia ara l’ocupen anuncis que si interessen a més gent.
Nois, noies, ara ja ho sabeu: Si veieu un anunci que es repeteix molt durant molt de temps i no desperta l’interés dels vostres usuaris, bloquejeu-lo.
Resum optimització de les webs
12 Desembre 2007a) 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!!!!
I’ve got it!
11 Desembre 2007
Diria que si més no hi estic força alavora. He habilitat a Megajocs l’extensió PEAR de “Cache_Lite”.
I el resultat ha estat, si més no, sorprenent, amb una reducció del temps de generació de la pàgina del 50%.
Tot i això, la portada em triga a carregar-se un 200% més que qualsevol altra llistat … per què? Misteri.
Seguim optimitzant
10 Desembre 2007Avui li ha tocat el torn a la feina. He posat un “cronòmetre” a la web per veure quan triga a generar una pàgina. Tot i que per la quantitat abismal de codi que hi ha el resultat ha estat prou bo, no ho és en números absoluts. Una pàgina triga de mitjana a generar-se 0,06 segons.
Això implica que, si hi ha 50 persones treballant a la vegada (fent peticions), el servidor triga al voltant de 3 segons en atendre-les totes ( sense comptar el temps que triga a enviar-les ). Imagineu-vos que ara arriben 200 peticions: L’ordinador trigaria 12 segons en processar-les totes. ( i faltaria “enviar” amb les imatges i continguts varis ).
Ara que he començat a entendre la importància de l’optimització i “per què no es pot tenir a una persona esperant 12 segons a que es generi la pàgina” … toca treballar per aconseguir reduir aquest temps.
Curs d’Excel/OpenOffice Calc (ii)
10 Desembre 2007Part 2: Les fórumles
La gràcia de l’excel no està precisament en posar textos, si no en treballar amb números. I aplicar-hi fórmules. Com vem dir en el capítol anterior, una fórmula és tot allò que s’escriu en una cel·la i comença amb un símbol “=”.
Així, si en un full escrivim en A1 “=10+10“, el programa ho avaluarà i en aquella cel·la ens mostrarà el resultat de l’operació (20). Però podem editar la fórmula en qualsevol moment en la barra superior ( o prement F2 ) .
Si en el full escrivim en A2 “=10+25*10″ possiblement no ens donarà el resultat que esperem … en operacions amb més de dos operands cal posar sempre parèntesi. Si no, normalment els programes acostumen a fer primer la multiplicació i després la suma. Així, si escrivim “=10+25*10″ el programa farà “=10+(25*10)” i ens donarà “260″ com a resultat. Però potser nosaltres volíem fer “=(10+25)*10″, amb un resultat de “350″. Per aquest motiu cal posar sempre els parèntesi, per evitar confusions. Escrivim en A2 “=(10+25)*10″ i, com en el cas anterior, ens mostrarà el resultat.
Això ens simplifica feina a la calculadora, però tampoc no té massa sentit, oi? La gràcia dels fulls de càlcul és la possibilitat d’operar amb les cel·les. Així, per exemple, podem dir que la cel·la A3 val “=A1+A2″. Això farà que A3 valgui sempre la suma d’aquestes dues caselles ( 370 ). Si canviem el valor de qualsevol de les dues cel·les (A1 o A2), també canviarà el valor d’A3.
Optimitzar la web
10 Desembre 2007
Ai! aquest cap de setmana llarg he estat programant molt … massa. I en un moment de distracció … “patam!” veig que la web de megajocs triga prop de 40 segons a respondre qualsevol petició. Una bajanada! Així que d’entre vàries coses, i ajudat pels de condalis, vam veure que Megajocs tenia un o dos problemes força seriosos d’optimització.
Així que he aplicat certes mesures d’optimització: He abolit uns quants “count” i també he simplificat les consultes ometent un “inner join” que es repetia força cops. Aquestes consultes s’executaven -a cada petició- i elevaven l’ús de CPU del mysql fins el 70% en els moments més crítics.
Ara, bé, si abans es quedava “penjat” quan hi havia uns 380-400 jugadors simultanis, ara s’hi queda quan n’hi ha 520-530 de connectats simultàniament (i triga 10-15 segons )… és un munt de jugadors! però cal que això no passi. I a més ara l’ús de CPU per part del MySQL no supera el 15%, tot i que normalment està al 8-9%. Intentare treure, a més, diferents “includes”.
En fi, hi ha coses que es van aprenent amb el temps
Curs d’Excel/OpenOffice Calc (i)
9 Desembre 2007L’Excel ( o l’OpenOffice Calc ) són dos programes de fulls de càlcul. És a dir, programes “per treballar amb números”. Amb l’excel podem fer des de complicats models matemàtics, fins a una factura. Aquest curs pretén arribar a aquest nivell més “bàsic”: Fer una mica de facturació amb l’excel/OpenOffice Calc.
Part 1: La cel·la.
Els programes de fulls de càlcul treballen amb “llibres”, i cada llibre té diferents “fulles”. Quan creem un llibre nou, el primer que veiem és un munt de cel·les i tres o quatre fulls ( a la part inferior, en forma de pestanyes ).
Aquí us he posat una petita miniatura amb la captura de com es veu un “llibre” nou amb una fulla completament buida.
El primer que crida l’atenció són les cel·les. Sí, cap full de càlcul està preparat per fer documents més o menys bonic, treballem sempre amb taules immenses. Cada cel·la té un nom: Serà com si juguéssim a la popular “guerra de vaixells” o al “hundir la flota”. A1 és la cel·la de la fila 1 i la columna A. C5 és la cel·la de la fila 5, columna C.
En cada cel·la hi podem escriure frases, números o fòrumles
- Per escriure una frase (text), podem escriure lliurement qualsevol cosa.
- Per escriure un número, hem d’escriure sempre un conjunt de números, sense cap lletra. I generalment hi ha problemes en posar decimals amb comes i punts.
- Per escriure una fórmula, cal que el primer caràcter sigui el símbol “=”.
Tot i que l’Excel tracta cada tipus de dades d’una forma diferent, podem fer que consideri que el contingut de la cel·la és sempre un text si -i només si- la començem amb un apòstrof. Així ‘123 serà tractat com una cadena de text, en comptes d’un número.

Publicat per elrohir
Publicat per elrohir
Publicat per elrohir
