Content extract
Webalkalmazások fejlesztése PHP és Java nyelven Ivánfi Zoltán 2003 Tartalomjegyzék 1. A PHP és a Java összehasonlítása 1.1 A PHP kialakulása 1.2 A Java kialakulása 1.3 Technikai jellemzők 1.4 Előnyök és hátrányok 1.5 Alkalmazási területek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 6 7 8 2. Egy webalkalmazás implementálása PHP és Java nyelven 2.1 A webalkalmazás specifikációja 2.2 Az adatbázis megtervezése és létrehozása 2.3 A könyvtárszerkezet és a fejlesztési folyamat 2.4 Az implementációk
2.5 Teljesítményvizsgálat 2.6 Tapasztalatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 12 13 15 15 17 Irodalomjegyzék . 19 A függelék: Rövidítések jegyzéke . 21 B függelék: Az adatbázis-táblák létrehozására szolgáló SQL utasítások . 23 C függelék: A Java fejlesztési folyamatot automatizáló Ant feladatok . 25 Tárgymutató . 27 3 1. fejezet A PHP és a Java összehasonlítása Akárcsak a hagyományos programok fejlesztésekor, webalkalmazások implementálásához is több programozási nyelv közül választhatunk. Ez a tanulmány két olyan nyelvet vizsgál meg és hasonlít össze, mely alkalmas
webalkalmazások készítésére. Ebben a fejezetben kialakulásuk történetét és főbb tulajdonságaikat ismerhetjük meg. 1.1 A PHP kialakulása Rasmus Lerdorf 1995-ben alkotta meg a PHP/FI1 nyelvet web-oldala forgalmának számlálására. A nyelv célja később dinamikus weboldalak létrehozása lett A PHP/FI 1997-ben elkészült 2.0 verziója gyorsan népszerűvé vált Az 1998-ban elkészült 30 verzió PHP2 néven jelent meg. A fejlesztők a rövidítés megváltoztatásával szerették volna jelezni, hogy a nyelv felhasználása már nem korlátozódott személyes célokra. 1998-ban jelent meg a PHP 4, ami rendkívüli népszerűségre tett szert. 1.2 A Java kialakulása A Sun 1991-ben indított projektet a számítástechnika következő hullámának azonosítására. A „Green Project” csapata az interaktív televíziózásban látta a jövőt A fejlesztőknek egy bináris platformfüggetlenséget nyújtó nyelvre volt szükségük a prototípus
megalkotásához. Így született meg – mintegy a projekt melléktermékeként – az Oak nyelv. A projekt azonban nem keltette fel a kábeltelevízió-szolgáltatók érdeklődését, így a csapat az Internet felé fordult Az új jövőkép az interaktív Internet lett. A fejlesztők a Mosaic böngészőprogram átalakításával látványosan mutatták be az új platform lehetőségeit. A nyelvet 1995. május 23-án jelentették be hivatalosan Java néven A futtatókörnyezet hamarosan bekerült a Netscape Navigator böngészőprogramba és forradalmasította az Internetet 1. Personal Home Page / Forms Interpreter 2. PHP: Hypertext Preprocessor 5 6 1. A PHP és a Java összehasonlítása A Java mára számos alkalmazási területen nyert teret. A kliens-oldali programozás (J2SE3 ) mellett betört a mobil készülékek (J2ME4 ), és az elosztott rendszerek (J2EE5 ) piacára is. 1.3 Technikai jellemzők A PHP programok végrehajtása értelmezővel történik,
vagyis a forráskód végrehajtáskor kerül feldolgozásra. Ez gyors fejlesztési folyamatot tesz lehetővé (nincs szükség fordításra), viszont a hibák csak az érintett programrészek lefutásakor észlelhetők. A PHP nyelv változói értékadással jönnek létre, nem szükséges deklarálni őket. Típusukat a hozzájuk rendelt érték határozza meg, újabb értékadással azonban ez bármikor megváltoztatható. Emiatt a PHP ún gyengén típusos nyelv Ez az egyszerűség azonban csökkenti a programok áttekinthetőségét és karbantarthatóságát, továbbá hibák forrása lehet. A gyengén típusos, értelmezett végrehajtású nyelveket parancsnyelveknek vagy szkript-nyelveknek nevezzük. A PHP tehát parancsnyelv A Java ezzel szemben erősen típusos nyelv, azaz a változókat használat előtt deklarálni kell, és típusuk ezt követően nem változhat. A Java forráskód fordításkor kerül feldolgozásra. Ez alól kivételt képeznek a
megjelenítésért felelős JSP6 oldalak, melyek az első futtatás alkalmával fordulnak le. A PHP API7 függvényeket tartalmaz, míg a Java API osztályokat. A PHP nyelv kifejezetten dinamikus weboldalak létrehozására szolgál. A Java ezzel szemben általános célú programnyelv, mely felhasználható webalkalmazások készítésére is. A szerver-oldali alkalmazások felépítése alapvetően eltérő a két nyelv esetén. Egy PHP alapú honlap független szkriptekből épül fel. Az oldalak nincsenek alkalmazásokba szervezve, különálló programrészek, melyek összedolgozhatnak Ez a megközelítés alkalmassá teszi a PHP-t olyan weboldalak létrehozására, melyek nem adatok megjelenítésére és változtatására szolgálnak, hanem tényleges tartalmat hordoznak és maguk is változhatnak. Ilyen feladat például egy honlap oldalai közti navigáció biztosítása vagy az oldalak választható stílusú megjelenítése Az ilyen tartalom valójában statikus, hiszen
nem változó adatok megjelenítésére szolgál. A honlap maga természetesen változhat, ami szükségessé teszi a navigáció megváltoztatását az összes többi oldalon, illetve minden oldal elkészítését az összes választható stílus szerint. Ennek automatizálására szolgál a PHP alkalmazása, a tartalom azonban két ilyen módosítás között nem változik. A PHP-vel ellentétben a Java nyelvű programozás az alkalmazás fogalma köré épül. Az előző bekezdésben említett feladat megvalósítására a Java nem optimális 3. Java 2 Platform, Standard Edition 4. Java 2 Platform, Mobile Edition 5. Java 2 Platform, Enterprise Edition 6. JavaServer Pages 7. Application Programming Interface 1.4 Előnyök és hátrányok 7 választás. A Java erőssége a webalkalmazások készítése Ezek maguk ritkán változnak, a dinamizmus az általuk megjelenített és módosított adatokban jelentkezik Eltérő az alkalmazások adminisztrációja is. A PHP
alkalmazások konfigurálása a programban történik, az alkalmazást kell illeszteni a környezetéhez. Ez feladat alkalmazásonként eltérő, ezért programozói segítséget vagy képességeket igényel A Java alkalmazások konfigurálása egységes, központi adminisztráción keresztül történik: az adminisztrátor testre szabott környezetet biztosít az alkalmazásnak. Az alkalmazások párhuzamos futtatása teszi lehetővé egy időben több kérés kiszolgálását. Ez PHP alkalmazásoknál folyamatokkal, míg a Java esetében szálakkal valósul meg. A folyamatokkal történő párhuzamosítás több szempontból is hátrányos [7] A folyamatok erőforrásigényesek, mivel függetlenek egymástól Minden kiszolgáló folyamat saját memóriaterülettel és perzisztens adatbázis-kapcsolatokkal rendelkezik. A HTTP8 szabvány 11 verziója ráadásul lehetővé teszi a kapcsolatok életben tartását két kérés között, ami miatt a párhuzamosan kiszolgálandó
kérések számánál jóval több folyamatra van szükség. Szálak alkalmazása esetén a fenti hátrányok nem jelentkeznek. Mivel a szálak közös erőforrásokat használhatnak, nincs többszörös memória-használat, nincsenek megnyitott, de nem használható adatbázis-kapcsolatok, sem kérésekre várakozó szálak. Megszűnik azonban a független folyamatok által nyújtott biztonság is, egy szál leállása az egész folyamatot magával ránthatja. A fent ismertetett különbségek összefoglalása az 1.1 táblázatban található Jellemző PHP Java Nyelv típusa Végrehajtás Típusosság API jellege Alkalmazási terület parancsnyelv értelmezővel gyenge függvénykönyvtár weboldalak létrehozása programnyelv fordítást követően erős osztálykönyvtár általános célú Tartalom szervezése különálló szkriptek Adminisztráció alkalmazás-függő Párhuzamosság biztosítása folyamatokkal alkalmazások egységes szálakkal 1.1 táblázat A
PHP és a Java általános és szerver-oldali jellemzői 1.4 Előnyök és hátrányok Mindkét nyelv rendelkezik kedvező tulajdonságokkal. A PHP legfőbb előnye egyszerűsége, könnyű elsajátíthatósága A Java nyelv megtanulása sokkal nehezebb feladat és ennek megfelelően több időt is vesz igénybe A PHP és a Java is hordozható, bár apróbb inkompatibilitásokkal mindkét oldalon találkozhatunk. 8. Hypertext Transfer Protocol 8 1. A PHP és a Java összehasonlítása Mindkét nyelv alkalmazható szerver oldalon. A Java kliens oldali programozáshoz is elterjedt eszköz, a PHP ilyen célú felhasználása lehetséges ugyan, de nem jellemző. Mindkét nyelven lehet ugyan objektum-orientáltan programozni, a PHP ezen a területen azonban még nem elég kiforrott. Az objektum-orientáltság nyelvi támogatása a PHP-ban meglehetősen szegényes: hiányzik az egységbe zárás, nincsenek kivételek, az API sem objektum-orientált. A PHP API másik
hibája az inkonzisztencia. A függvények elnevezése nem egységes, pl a tömbökkel kapcsolatos függvények egy része array kezdetű, más része nem Egységes adatbáziskezelés helyett minden adatbáziskezelő eléréséhez más függvényeket kell használnunk. A Java API többnyire konzisztens, jól átgondolt. Megalkotása tervezési minták felhasználásával történt, s a programozót is ezek alkalmazására ösztönzi. Támogatást nyújt a többnyelvű alkalmazások készítéséhez is. A Java nyelvű fejlesztés megkönnyítésére számos IDE9 közül választhatunk, a PHP nyelvű programozáshoz nem áll rendelkezésre kiforrott fejlesztői környezet. Szerver-oldali alkalmazások készítésekor a Java előnyös tulajdonsága az enterprise szolgáltatások (perzisztencia, elosztott tranzakciók, biztonság stb.) elérhetősége (J2EE) Kiforrottabb és általánosabb fejlesztői könyvtárak érhetők el, mint PHP alatt. PHP alkalmazásokhoz könnyen
található hosting szolgáltatás, azaz sok cég biztosít lehetőséget szerverén PHP alkalmazások futtatására. Java alkalmazások telepítésére nem sok helyen van lehetőség, és speciális programszervezés szükséges a központi adminisztráció megkerüléséhez. Java webalkalmazásaik futtatásához így a cégeknek általában saját szervert kell üzemeltetniük. A PHP értelmező ingyenes program. A Java alkalmazás-szerverek közt található ingyenes és kereskedelmi szoftver is. Az előnyök összefoglalása az 1.2 táblázatban található 1.5 Alkalmazási területek A két platform lehetőségeit és korlátait jól mutatják a nyelvek jellegzetességei és a rendelkezésre álló API-k és külső könyvtárak. Java-ban tetszőleges webalkalmazást megvalósíthatunk az egészen egyszerűektől a komplex, elosztott rendszerekig PHP-ban ezzel szemben különálló szkriptekről beszélhetünk, melyek kisebb alkalmazásként összedolgozhatnak. A két
platform alkalmazási területei az 13 táblázatban láthatók. Java fejlesztéseknél az alkalmazás fogalmát nélkülöző dinamikusság, a kis, független web-oldalak kezelése okoz nehézséget, míg PHP-ban nagyobb webalkalmazások valósíthatók meg nehezen. Ilyen rendszerek esetén könnyedén kiválaszthatjuk a feladatra alkalmasabb platformot. 9. Interactive Development Environment 1.5 Alkalmazási területek 9 Tulajdonság PHP Java Gyors elsajátíthatóság Hordozhatóság Szerver oldali alkalmazhatóság Kliens oldali alkalmazhatóság Objektum-orientáltság Egyszerű hibakezelés API konzisztencia Tervezési minták az API-ban Többnyelvűség támogatása IDE * * – – – – – – Enterprise szolgáltatások Kész komponensek Hosting Ingyenesség – * * * igen – nem * részben 1.2 táblázat A PHP és a Java kedvező tulajdonságai általában és a szerver-oldalon Alkalmazási terület PHP Java
Független weboldalak Egyszerű alkalmazások Összetett alkalmazások igen – – – nem 1.3 táblázat A két platform lehetőségei 2. fejezet Egy webalkalmazás implementálása PHP és Java nyelven Kisebb webalkalmazások fejlesztésére mindkét technológia alkalmazható, így felmerül a kérdés, hogy melyik alkalmasabb a feladatra. Az általános vélemény szerint ilyen alkalmazásokhoz a PHP a jobb választás, mivel a fejlesztés gyorsabb, és mert a Java implementációk jóval lassabbak. Egyes források szerint a Java alkalmazások válaszideje 5–20-szorosa a PHP változatokénak [2]. A fejezet témája egy egyszerű webalkalmazás elkészítése és vizsgálata a két platformon, mely alapján megkísérelhetünk választani közülük, illetve megbizonyosodhatunk az általánosan elterjedt vélemény helyességéről, vagy megcáfolhatjuk azt. 2.1 A webalkalmazás specifikációja A megvalósítandó alkalmazás feladata webes
közvéleménykutatás végzése. A webalkalmazás két oldalból áll Az összefoglaló oldalon (21 ábra) táblázatos formában tekinthetők meg a közvéleménykutatásban részt vevő kérdések és a leadott szavazatok száma. 2.1 ábra A kérdések listája 11 12 2. Egy webalkalmazás implementálása PHP és Java nyelven Az áttekintő oldal minden kérdéséhez tartozik egy részletes oldal (2.2 ábra), mely a kérdésre adható válaszokat tartalmazza a szavazás aktuális állásának számszerű és grafikonos feltüntetése mellett. Ugyancsak ezen az oldalon lehet leadni a szavazatokat az egyes válaszokra. 2.2 ábra Egy kérdés és a rá adható válaszok A szavazatok leadását követően a részletes oldal frissített változata jelenik meg. A szavazó által használt számítógép IP1 címét rögzíti a rendszer, hogy megakadályozza a többszöri szavazást. Az összes szavazó IP címének eltárolása hosszabb távon nagyon erőforrásigényes
lenne, miközben a módszer egyébként is csak rövid távon megbízható. Ennek oka az, hogy több, független szavazónak is lehet azonos IP címe Ehhez elegendő, ha többen ugyanazt a számítógépet használják, de külön számítógépek esetén is előfordulhat bizonyos technológiák alkalmazásakor (pl. dinamikus címkiosztás, NAT2 ). Ezért a kizárások egy idő elteltével érvényüket vesztik, a rögzített IP címek törlésre kerülnek a rendszerből. A kizárások természetesen az egyes kérdésekhez kötöttek, másik kérdésre szavazhat a kizárt személy Amennyiben a rendszer többszörös szavazást észlel, egyszerűen figyelmen kívül hagyja a szavazatot. Az alkalmazás implementációjával szemben támasztott követelmények az áttekinthetőség, a bővíthetőség és az adatbáziskezelő-függetlenség. 2.2 Az adatbázis megtervezése és létrehozása Az adatbázis három táblából áll (2.3 ábra) A kérdések (questions) tábla
tartalmazza a kérdések azonosítóját (id) és szövegét (body) A választási lehetőségek (choices) tábla tartalmaz egy idegen kulcsot (question id), ami a kérdéseket kapcsolja össze a hozzájuk tartozó válaszokkal, továbbá a válaszok felsorolásban elfoglalt helyét (place), a válasz szövegét (body) és a szavazatok számát (votes). A kizárások (exclusions) táblában nyilvántartott adatok a szavazó (voter), a kérdés azonosítója (question id) és a kizárás megszűnésének ideje (expiration). 1. Internet Protocol 2. Network Address Translation 2.3 A könyvtárszerkezet és a fejlesztési folyamat 13 choices PK, FK1 PK question id place body votes exclusions questions PK id body PK PK, FK1 voter question id I1 expiration 2.3 ábra Az adatbázis sémája A táblák létrehozására szolgáló SQL3 utasítások megtalálhatók a B függelékben. 2.3 A könyvtárszerkezet és a fejlesztési folyamat PHP fejlesztés esetén a különböző
feladatokat végző programrészek elkülönítésére nincs követelmény, sem ajánlott mód vagy bevett szokás. Az MVC4 architektúra alkalmazása azonban jelentősen növeli a program áttekinthetőségét és karbantarthatóságát, a készülő alkalmazást ezért a a 2.4 ábrán látható könyvtárszerkezetbe szerveztem. php import include 2.4 ábra A PHP alkalmazás könyvtárszerkezete Az alkalmazás könyvtára a statikus elemeket a programszervezéstől független, tematikus szervezésben tartalmazza, például HTML5 file-okat a gyökérben, képeket az images könyvtárban, CSS6 file-okat a style könyvtárban. Ugyancsak az alkalmazás gyökerében kapnak helyet a kívülről elérhető PHP oldalak. Ezek vezérlik a felhasználói kérések végrehajtását, vagyis az MVC minta szerint controller típusú elemek Az import könyvtár tartalmazza a alkalmazás modelljét reprezentáló programrészeket, vagyis az MVC minta model típusú elemeit. A könyvtárban
található PHP oldalak a nevükkel megegyező változókat vagy osztályokat definiálnak, kimenetük nincs. Ezeket az oldalakat jellemzően az include once (vagy require once) utasítással érjük el Az include könyvtárban találhatók a tényleges megjelenítést végző oldalak. Ezek kimenete a korábban definiált változók függvényében változhat. Az MVC minta view elemeit valósítják meg. Ezeket az oldalakat jellemzően az include (vagy require) utasítással érjük el. Az import és az include könyvtárak tartalma közvetlenül nem érhető el a weben keresztül. 3. Structured Query Language 4. Model–View–Controller 5. Hypertext Markup Language 6. Cascading Style Sheets 14 2. Egy webalkalmazás implementálása PHP és Java nyelven A PHP fejlesztés nem igényel fordítást vagy telepítést, a PHP oldalak webes felülete azonnal elérhető egy böngészőprogram segítségével. A fordítási és a futási hibákról is az adott oldal elérésekor
értesülünk. Egy Java web-alkalmazás elkészítése jóval bonyolultabb könyvtárszerkezetet és fejlesztési folyamatot igényel. A Java változat könyvtárszerkezete a 25 ábrán látható a PHP változatéval összevetve. java src classes web WEB-INF include thirdparty lib tld build classes web WEB-INF classes lib tld include war php import include 2.5 ábra A Java alkalmazás könyvtárszerkezete a PHP változatéval összevetve Az src könyvtár tartalmazza az alkalmazás forráskódját. A Java megköveteli a fordítást igénylő osztályok és a közvetlenül felhasználható tartalom elkülönítését. Az src/classes könyvtárba kerülnek az osztályok csomagokba szervezve. Külön csomagban kapnak helyet az MVC minta szerinti controller és model osztályok Az src/web könyvtár tartalmazza a statikus elemeket a PHP változatnál ismertetett szervezésben. Az src/web/include könyvtárban találhatók az MVC minta view elemeit megvalósító, megjelenítésért
felelős JSP oldalak. Az src/web/WEB-INF könyvtárban konfigurációs file-ok találhatók. A thirdparty könyvtár külső kiegészítéseket tartalmaz. Az alkalmazás felépítése a build könyvtárban történik. Ennek első lépéseként az src/classes könyvtárban található osztályokat lefordítjuk a build/classes könyvtárba. A build/web könyvtárban állítjuk össze a webalkalmazás részeit. Ez a könyvtár az src/web könyvtár másolata, melynek WEB-INF alkönyvtárához hozzáadjuk a build/ classes könyvtárat és a thirdparty könyvtár tartalmát. A „futtatható” változatot egyetlen file-ba csomagolhatjuk a build/war könyvtárba, vagy közvetlenül telepíthetjük a szerverre, amennyiben az támogatja ezt. Mint látható, a Java webalkalmazás fejlesztési folyamata jóval bonyolultabb. A lépések természetesen automatizálhatók, ennek legcélszerűbb módja az Apache Ant 2.4 Az implementációk 15 program használata. A fenti lépéseket
megvalósító Ant feladatokat a C függelék tartalmazza 2.4 Az implementációk Az alkalmazás különböző változatainak elkészítése során megmértem az implementáláshoz szükséges időráfordítást. Mivel a megjelenítendő oldalak megegyeznek mindkét platformon, azok statikus változatait előzőleg elkészítettem, így a ráfordított idő ezt a lépést nem tartalmazza. A szükséges SQL parancsokat is előre kidolgoztam A PHP változat elkészítése 4 órát vett igénybe. A PHP API eltérő függvényeket tartalmaz a különböző adatbáziskezelők eléréséhez; nem teszi lehetővé az adatbáziskezelő-független programozást. Ezt a problémát az ingyenes ADOdb7 osztálykönyvtár használatával oldottam meg, ami lehetővé teszi a különböző adatbáziskezelők egységes kezelését. Sajnos az alkalmazás későbbi vizsgálatakor kiderült, hogy az elég rossz teljesítményt nyújt. A PHP alkalmazást ezért elkészítettem még egy
változatban, saját adatbáziskezeléssel Ehhez MySQL és PostgreSQL meghajtókat készítettem; természetesen további meghajtók is készíthetők A bővítés fél órát vett igénybe, és megoldotta a teljesítmény-problémát. A Java változat mérete kétszerese a PHP változaténak és elkészítése 5 óráig tartott. A JDBC8 által biztosított absztrakció elegendőnek bizonyult az alkalmazás adatbáziskezelő-független elkészítéséhez A három implementáció adatai megtalálhatók a 2.1 táblázatban Implementáció PHP ADOdb-vel PHP ADOdb nélkül Java Méret (byte) Sorok száma Időráfordítás (perc) 7 034 8 872 15 768 196 275 556 240 270 300 2.1 táblázat A különböző implementációk összehasonlítása 2.5 Teljesítményvizsgálat Az elkészült implementációk teljesítményének vizsgálatához az Apache JMeter programot használtam. A teszt több szálon fut, minden szál egy felhasználót jelképez. A vizsgálathoz feltételeztem, hogy
a felhasználók átlagosan 20 kérdést tekintenek meg, melyek közül 5-re szavaznak is. A tesztben ennek megfelelően 4 megtekintést 1 szavazás követ, amit minden szál 5-ször ismétel meg. A megtekintett kérdések és a leadott szavazatok véletlenszerűek Minden kérést fél másodperces várakozás követ 7. Active Data Objects Data Base 8. Java Database Connectivity 16 2. Egy webalkalmazás implementálása PHP és Java nyelven Mivel a tesztelés során az egyes felhasználókat megszemélyesítő szálaknak nincs saját IP címük, a webalkalmazások kizárási mechanizmusát cookie-alapúra változtattam. A cookie-k kliens oldalon módosíthatók, de a tesztelés folyamán ez nem okoz gondot. A PHP változat maximális teljesítményének eléréséhez az APC9 technológiát használtam. Ez a PHP oldalakat a JSP oldalakhoz hasonlóan első eléréskor lefordítja, majd a továbbiakban a lefordított változatot használja. Ezzel kiküszöbölhető az
értelmezett végrehajtásból adódó lassulás A tesztelést a következő eszközökkel végeztem: – – – – – – – – – – – – AMD Duron 1 GHz processzor 512 MB memória Debian GNU/Linux 3.0 (operációs rendszer) Linux kernel 2.418 (operációs rendszer mag) Apache 1.326 (HTTP szerver) PHP 4.12 (PHP értelmező) APC 1.10 (PHP gyorsító) ADOdb 3.80 (adatbáziskezelő osztálykönyvtár PHP-hoz) Blackdown Java 1.31-02b-FCS (Java futtatókörnyezet) Apache Tomcat 4.1 (servlet/JSP tároló) MySQL 3.2349 (adatbáziskezelő) Apache JMeter 1.81 (teljesítmény-elemző) A terhelési tesztet mindhárom implementáción tizenegy változatban végeztem el, különböző terhelési szintek mellett. Az eredményeket grafikonon ábrázoltam (26 és 2.7 ábra) kiszolgált kérések száma percenként 500 400 300 200 100 PHP ADOdb-vel PHP ADOdb nélkül Java szálak száma 0 0 2
4 6 8 10 12 14 16 18 2.6 ábra A kiszolgált kérések száma percenként 9. Alternative PHP Cache 20 2.6 Tapasztalatok 17 válaszidő (ezredmásodperc) 800 700 600 500 400 300 200 100 0 0 2 4 PHP ADOdb-vel PHP ADOdb nélkül Java szálak száma 6 8 10 12 14 16 18 20 2.7 ábra Válaszidők 2.6 Tapasztalatok Az üzleti logika elkészítésére a Java alkalmasabbnak bizonyult, a webes felület megalkotása viszont PHP-ban volt könnyebb. A Java API-ból hiányzik néhány alapvető szolgáltatás, amire webes fejlesztéseknél szükség lehet, pl a HTML-ben vagy az URL10 -ekben speciális jelentéssel bíró karakterek kezelése, szövegek kitöltése adott karakterrel adott hosszig stb. A PHP API rendelkezik ilyen függvényekkel A PHP talán legzavaróbb szolgáltatása az idézőjelek automatikus átalakítása. Ennek használata a PHP konfigurációs
állományában állítható be, ami lehetetlenné teszi változtatás nélkül hordozható programok készítését. Inkompatibiltás forrása lehet a relatív útvonalak változatonként eltérő kezelése is – a beillesztett oldalak aktuális könyvtára bizonyos rendszereken saját könyvtáruk, máshol a rájuk hivatkozó oldal könyvtára. Az alkalmazás implementálása PHP nyelven kevesebb időt vett igénybe, de kevésbé áttekinthető és bővíthető kódot eredményezett. Az ADOdb használata jelentősen hordozhatóbb, ám alacsonyabb teljesítményű alkalmazást eredményezett Az ADOdb-t nem használó PHP változat és Java alkalmazás teljesítménye megközelítőleg megegyezett – a Java alkalmazások válaszideje tehát az általánosan elterjedt véleménytől eltérően nem többszöröse a PHP változatokénak. 10. Uniform Resource Locator Irodalomjegyzék [1] Stig Sæther Bakken – Alexander Aulbach – Egon Schmid – Jim Winstead – Lars
Torben Wilson – Rasmus Lerdorf – Andrei Zmievski – Jouni Ahto: PHP Manual http://www.phpnet/manual/en/ The PHP Documentation Group, 2003. [2] Al Dev (Alavoor Vasudevan): PHP HOW-TO 2002. [3] The Java Tutorial http://java.suncom/docs/books/tutorial/ Sun Microsystems, Inc., 2003 [4] Eric Armstrong – Jennifer Ball – Stephanie Bodoff – Debbie Carson – Ian Evans – Maydene Fisher – Dale Green – Kim Haase – Eric Jendrock: The J2EE 1.4 Tutorial http://java.suncom/j2ee/14/docs/tutorial/doc/ Sun Microsystems, Inc., 2003 [5] Jon Byous: Java Technology: The Early Years http://java.suncom/features/1998/05/birthdayhtml Sun Microsystems, Inc., 1998 [6] PHP vs. Java - which is better? http://raibledesigns.com/comments/rd/sunsets/php vs java which is Raible Designs, 2003. [7] Brian Neal: Building a Better Webserver in the 21st Century http://www.aceshardwarecom/readjsp?id=45000240 Ace’s Hardware, 2001. [8] Free On-line Dictionary of Computing http://www.foldocorg/ 2003. 19
A függelék Rövidítések jegyzéke ADOdb Active Data Objects Data Base. Adatbáziskezelő-függetlenséget biztosító osztálykönyvtár PHP-hoz. APC Alternative PHP Cache. A PHP alkalmazások teljesítményét növelő technológia A PHP oldalakat a JSP oldalakhoz hasonlóan első eléréskor lefordítja, majd a továbbiakban a lefordított változatot használja Ezzel kiküszöbölhető az értelmezett végrehajtásból adódó lassulás API Application Programming Interface, alkalmazás programozói felület. Az API bizonyos feladatok végrehajtására és alsóbb szintű szolgáltatások elérésére biztosít lehetőséget az alkalmazás számára, miközben elfedi a tényleges implementáció részleteit. CSS Cascading Style Sheets kaszkádolható stílus-lapok. HTML oldalak megjelenését (stílus, színek, betűtípusok, méretek) szabályozó leíró nyelv IDE Interactive Development Environment, interaktív fejlesztői környezet. A programírás
folyamatának támogatására szolgáló rendszer J2EE Java 2 Platform, Enterprise Edition. A Java platform elosztott rendszerek piacára szánt kiadása. J2ME Java 2 Platform, Mobile Edition. A Java platform mobil-készülékek piacára szánt kiadása. J2SE Java 2 Platform, Standard Edition. A Java platform általános kiadása JDBC Java Database Connectivity, Java adatbázis-elérés. Egységes adatbáziskezelést nyújtó Java API JSP JavaServer Pages. A Java platform HTML-be ágyazott technológiája dinamikus weboldalak létrehozására A hagyományos osztályoktól eltérően a JSP oldalak az első futtatás alkalmával fordulnak le. HTML Hypertext Markup Language, hipertext jelölő nyelv. Dokumentumok közötti navigálást lehetővé tevő leíró nyelv. 21 22 A függelék: Rövidítések jegyzéke HTTP Hypertext Transfer Protocol, hipertext átviteli protokoll. HTML oldalak átvitelére szolgáló protokoll IP Internet Protocol, internet protokoll.
Az Interneten használt hálózati réteg protokoll. MVC Model–View–Controller, modell–megjelenítés–vezérlés. Az alkalmazások áttekinthetőségét és karbantarthatóságát növelő tervezési minta. NAT Network Address Translation, hálózati cím fordítás. Hálózati technológia, mely több gép Internetre csatlakozását teszi lehetővé azonos IP-címmel. PHP PHP: Hypertext Preprocessor, PHP: hipertext előfeldolgozó. HTML-be ágyazott szerver-oldali parancsnyelv dinamikus web-oldalak létrehozására PHP/FI Personal Home Page / Forms Interpreter, személyes honlap / űrlap-értelmező. A PHP nyelv elődje SQL Structured Query Language, strukturált lekérdező nyelv. Relációs adatbázisok lekérdezését és módosítására szolgáló szabványos nyelv URL Uniform Resource Locator. Egységes címzés, melyen keresztül egy, az Interneten található erőforrás elérhető C függelék A Java fejlesztési folyamatot automatizáló
Ant feladatok 8 9 10 11 build.xml <target name="compile"> <mkdir dir="build/classes" /> <javac srcdir="src/classes" destdir="build/classes" /> </target> 12 13 14 15 16 17 18 19 20 21 22 23 24 <target name="webapp" depends="compile"> <mkdir dir="build/web" /> <copy todir="build/web"> <fileset dir="src/web" /> </copy> <copy todir="build/web/WEB-INF"> <fileset dir="thirdparty" /> </copy> <copy todir="build/web/WEB-INF/classes"> <fileset dir="build/classes" /> </copy> </target> 25 26 27 28 29 <target name="war" depends="webapp"> <mkdir dir="build/war" /> <jar jarfile="build/war/${ant.projectname}war" basedir="build/web" /> </target> . 25 Tárgymutató könyvtár fejlesztői, 7, 8, 15,
16, 21 file-rendszerben, 13, 14, 17 karbantarthatóság, 6, 13, 17, 22 adatbázis kapcsolat, 7 -kezelő, 8, 15, 16 -függetlenség, 8, 12, 15, 21 séma, 13 tábla, 12, 13, 23 adminisztráció, 7, 8 ADOdb, 15–17, 21 Ant, lásd Apache Ant Apache, 16 Apache Ant, 14, 25 Apache JMeter, 15, 16 Apache Tomcat, 16 APC, 16, 21 API, 6–9, 15, 17, 21 MVC, 13, 14, 22 NAT, 12, 22 objektum-orientáltság, 8, 9 osztály, 6, 7, 13–15 parancsnyelv, 6, 7, 22 PHP/FI, 5, 22 SQL, 13, 15, 22, 23 szál, 7, 16, 17 bővíthetőség, lásd karbantarthatóság CSS, 13, 21 típusosság, 6, 7 teljesítmény, 15–17, 21 tervezési minták, 8, 9 Tomcat, lásd Apache Tomcat függvény, 6–8, 15, 17 fejlesztési folyamat, 6, 14, 25 folyamat, 7 fordítás, 6, 7, 14, 16, 21 URL, 17, 22 HTML, 13, 17, 21, 22 HTTP, 7, 16, 22 válaszidő, 11, 17 IDE, 8, 9, 21 IP, 12, 16, 22 J2EE, 6, 8, 21 J2ME, 6, 21 J2SE, 6, 21 JDBC, 15, 21 JMeter, lásd Apache JMeter JSP, 6, 14, 16, 21 27