PHP osztályok egységtesztelése
A weblabor oldalán találtam a következő cikksorozatot, ami szerintem igen hasznos. A PHP osztályok egységteszteléséről szól. Ez egy fontos és kicsit elhanyagolt témakör, így gondoltam megosztom itt is. Hátha sokkal jobban elterjed.
A cikket nem írom le újra, mert jelenleg semmivel sem tudnám kibővíteni az írást. Így most csak meghivatkozom a leírásokat, remélve, hogy a weblaborral nem történik semmi és a cikk megmarad nagyon sokáig a jelenlegi helyén.
Adatbázis optimalizálása
Azok akik elég nagy táblákkal dolgoznak, sokszor megesik, hogy optimalizálniuk kell az adatbázisukat. Erre most mutatok egy nagyon egyszerű lehetőséget, melyet akár a programba is ágyazhatunk, és magától futhat cron segítségével. vagy egy kézzel készített poor-man-cron megoldással:
function optimize_database($DATABASE_LINK)
{
$result = mysql_query('SHOW TABLES',$DATABASE_LINK)
or die('Cannot get tables');
while($table = mysql_fetch_row($result)) {
mysql_query('OPTIMIZE TABLE '.$table[0],$DATABASE_LINK)
or die('Cannot optimize '.$table[0]);
}
}
Értelmi szerzője: David Walsh
xHTML kimenet tömörítése
Mostanában sokat foglalkoztam honlapok optimalizációjával, nem csak SEO értelemben. Így futottam bele az YSlow FrieBug kiegészítése. Nézegettem az ajánlásait, s ezen új szemlélet megismerése kapcsán írok majd néhány scriptet. Nem tudom észrevettétek-e de már voltak hasonló gondolatok itt, csak azok átkerültek az Érdekes oldalak alá. Ott megtalálhatjátok, a JavaScript és CSS kompresszorokat.
Az első nem más, mint hogy hogyan érhetjük el nagyon egyszerűen, hogy a kimeneten fölösleges (whitespace) karakterek ne legyenek. Ezzel "tömörítve" az xHTML kódunkat. A most következő PHP kódunk lényege az, hogy egy kimeneti pufferbe begyűjti a teljes weblapot, majd amikor a kimenetet kiküldi, előtte meghív rá egy függvényt, ami a fölösleges karaktereket eltünteti.
Mivel ez a drágalátos WordPress nem enged mindenféle kódot beleírni egy postba, ezért a megoldást kénytelen vagyok linkelni... Az eredeti cikk ahonnan a forrás jött:
http://davidwalsh.name/compress-xhtml-page-output-php-output-buffers
Ajax és a SEO – Avagy ellenségből barát
Ebben a postomban Verő Boglárka és David Walsh irományát párosítom össze, a magam szájíze szerint.
A kiindulási koncepció ugye az, hogy egy normális tartalmat a kereső robotok minden gond nélkül látják, és fel is tudnak dolgozni. Viszont mi van abban esetben, ha lapunk tele van AJAX kérésekkel? Gondolom sokan tudjátok, hogy a keresők nagy száma nem is törődik a javascriptekkel. Gyakorlatilag figyelmen kívül hagyja, észre sem veszi. Nem hogy lefuttassa őket. (De ebbe most bővebben nem mennék bele részletesebben, mert a Google néhány speciális esetben képes javascriptbe-be ágyazott linkek követésére. Állításom forrása megtalálható Longhard egyik cikkében.) Tehát azon lapok, vagy postok, hozzászólások, vagy képek de végül is legyen bármi, ami AJAX-al töltődik be a botok számára nem is léteznek. De mit tudunk olyan esetben tenni, ha nekünk mégis szükségünk van arra hogy az így betöltött tartalom is elérhető legyen a keresők, és robotok számára? Nem kell hosszasan gondolkozni! Csak nem a beidegződéseket kell követni, hanem kicsit robot fejjel gondolkodni.
Egy hagyományos AJAX request, melyet nem tud értelmezni a keresőrobot:
<a href="javascript:q(2);"> További hozzászólások megmutatása </a>
És ennek módosítása mellyel már elboldogul:
<a onclick="javascript:q(2); return false;" href="forum.php?q=2"> További hozzászólások megmutatása </a>
Elemezzük is ki, mi ennek az oka. Mint mondottam, a javascriptet figyelmen kívül hagyják. De a második esetben, a href tagot tudja követni a robot, mert az egy számára is értelmezhető url, mely indexelhető tartalmat fog neki adni. De a felhasználó is megkapja a neki szánt élményt, mert at onclick esemény lefut, így meghívódik az AJAX request, de a return false biztosítja majd számunkra, hogy a "normális link" ne működjön. Különben ezzel a megoldással két legyet üt egyszerre a webmester mert nem csak a kereső számára lesz olvasható a tartalom, hanem azon látogatóknak is, akiknek nincs, vagy éppen letiltották a javascript futtatását.
Ezen módosítás után nekünk fejlesztőknek nincs más dolgunk mint megfelelő választ adni az AJAX és normál (GET) kéréseknek. Hiszen egy AJAX kérésnek elég csak kommenteket átadnunk, míg normál kérés esetén a teljes weblapot újra elő kell állítanunk.
Lehet az egyszerű megoldás használni, (a példában használt) forum.php feldolgozza a normál kéréseket, míg a forum.ajax.php kezeli az AJAX kéréseket, ahogy egy jóbarátomtól tanultam. Bár ez a módszer azért nem nyerte el a tetszésemet, mert ha sok-sok AJAX kérés lesz, akkor minden fájlból 2 verzió lesz, és egy idő után már összefolynak a fájlnevek az FTP-n.
Vagy egy paramétert felhasználni csak azért hogy a kérés AJAX-e vagy sem, de így mindig egy változót kell átadni, melyre figyelni kell hogy nehogy elfelejtsük használni. Így ez még mindig nem nyerte el a tetszésemet.
A legjobb megoldás szerintem amit ez a David Walsh gyerek kitalált. A következő PHP kóddal szerveroldalon detektálni lehet hogy AJAX kérés futott-e le vagy normál request.
$ajax = $_SERVER['HTTP_X_REQUESTED_WITH'];
if( !empty($ajax) && strtolower($ajax) == 'xmlhttprequest') {
//AJAX kérés futott le
} else {
//normál kérés futott le
}
Hiába nekem ez tetszik a legjobban, ennek is van hátulütője. Nem minden szerver támogatja, így ha használja valaki előbb ellenőrizze, hogy a $_SERVER['HTTP_X_REQUESTED_WITH'] változó számára elérhető-e!