PHP és Java összehasonlítás
Konstantinusz Kft. © 2009
Tartalomjegyzék 1. Bevezető............................................................................................................................. 3 2. Téma felvetés...................................................................................................................... 4 3. Vizsgálat szempontjai.........................................................................................................5 3.1. Szükséges környezetek.............................................................................................................5 3.1.1. Operációs rendszer............................................................................................................5 3.1.2. Keret rendszer (futtató, értelmező, és egyéb segédrendszer)............................................5 3.2. Teljesítmény..............................................................................................................................6 3.3. Hiba keresés és kezelés.............................................................................................................6 3.4. Fejlesztés szervezése.................................................................................................................7 3.5. Rendszer szerűség.....................................................................................................................7 3.6. Fenntartás, frissítés, hibajavítás................................................................................................8 3.7. Biztonság..................................................................................................................................8 3.8. Kiegészítések............................................................................................................................8
4. Következtetések.................................................................................................................. 9 5. Összefoglalás.................................................................................................................... 10 6. Irodalomjegyzék...............................................................................................................11
1. Bevezető
Az alábbiakban két napjainkban igen elterjedt és széles körben használt programozási nyelvet fogok összehasonlítani több szempont alapján. Elsősorban nem technikai dolgokra (pl.: szintaxis) szeretnék koncentrálni, hanem a gyakorlatban való felhasználhatóságra és eladhatóságra. Az összehasonlítás alapja felhasználói programok, vállalati rendszerek megvalósítása lesz. Ezen belül is a kis és közép vállalatokra fektetve a hangsúlyt, hiszen nagyvállalatok általában nem készíttetnek egyedi rendszert.
Egy piacgazdaságban az dönt egy programozási nyelv sikerességéről és elterjedéséről, hogy a vele létrehozott dolgok mennyire sikeresek. Sikerességen nem csak azt kell érteni, hogy az ügyfél átveszi-e és hajlandó kifizetni, hanem azt is hogy a programozónak mennyi dolga van az elkészítéssel, utókezeléssel. Pontosabban fogalmazva a nyereség, hiszen egy cég csak akkor maradhat életben hosszútávon, ha hosszútávon nyereséges tud lenni.
Az összehasonlítás során egyéb költségeket is figyelembe fogok venni, mint az elindítás és a fenntartás költségei. Ide fogom sorolni a rendszerek módosításával, javításával kapcsolatos költségeket, és nehézségeket is.
2. Téma felvetés Első lépésként határozzuk meg, hogy egy vállalati rendszertől alapvetően mit vár el a megrendelő! Stabilitást? Gyorsaságot? Megbízhatóságot? Azt, hogy bárhonnan elérhesse? Biztonságot? Nos a válasz a legtöbb esetben az, hogy valószínűleg mindegyiket. Hiszen ki szeretne olyan rendszert ami rendszeresen leáll? Vagy amiben bárki illetéktelen beleláthat a cégének belső működésébe? És melyik cégvezető ne szeretné, hogy külföldi útja során megnézhesse, hogy hogyan működik a cég az ő távollétében? Az esettanulmányban arra keresem a választ, hogy két elterjedt és széles körben használt programozási nyelv közül, melyik milyen előnyökkel rendelkezik a másikhoz képest különböző szituációkban. Amennyiben rendszerfejlesztésre adjuk a fejünket ne felejtsük megfelelően átgondolni, hogy milyen nyelvet választunk, hiszen rengeteg múlhat rajta. A megfelelő nyelv kiválasztása hosszú távon fog számunkra megtérülni. Lehetséges, hogy a kezdetben kiválasztott nyelvben a rendszert nagyon hamar elkészítjük és olcsón „megússzuk”, de az is előfordulhat, hogy a nyelv sajátosságai miatt nem fogunk tudni megvalósítani bizonyos dolgokat a megrendelő számára. A gyakorlatban látunk olyan eseteket, amikor az ilyen problémákat úgy oldják meg, hogy egy projekten belül több programozási nyelvet használnak és mindegyikben azt valósítják meg ami abban könnyű. Én ezt a megoldást nem javaslom, ez meglátásom szerint később többszörösen megbosszulja magát, és az így készített programokat semmiképpen nem nevezném rendszernek.
3. Vizsgálat szempontjai 3.1. Szükséges környezetek 3.1.1. Operációs rendszer JAVA esetében egy projekten belül is változhat, hiszen a java egy futtató környezeten fut, aminek segítségével (az esetek nagy részében) minden operációs rendszer alatt futtatható. Itt vegyük figyelembe, hogy a JAVA-ban megírt rendszer esetében a felhasználó által használt felület is egy JAVA-ban írt program, amit futtatni kell egy számítógépen.
PHP esetében az operációs rendszer olyan szempontból mindegy, hogy a főbb operációs rendszerekhez le van fordítva az értelmező így kódunk bármilyen operációs rendszeren futhat. Ez sem minden esetben igaz, hiszen számos esetben előfordul, hogy a fájlrendszer annyira eltérhet különböző operációs rendszerek alatt, hogy az útvonalak módosítása nélkül nem lehet hordozni a kódot. Ebben az esetben figyelembe kell venni, hogy PHP esetében a felület általában egy HTML oldal, ami megkönnyíti azt, hogy operációs rendszertől függetlenül, egy böngészőben használjuk a rendszert.
3.1.2. Keret rendszer (futtató, értelmező, és egyéb segédrendszer) JAVA esetében ez a JAVA Runtime Enviroment (JRE), letöltjük, telepítjük és használható, bár több helyen a számítógép jelentős lassulását hozza magával a JRE telepítése. Ez főként a kisebb teljesítményű gépekre igaz.
PHP esetében csak a kiszolgáló (szerver) részéről szükségesek bizonyos egyéb segédprogramok, ezeket nem nevezném keret rendszernek, de mégis szükségesek a PHP működéséhez. Ilyen program az Apache nevű web kiszolgáló. (I2)
3.2. Teljesítmény JAVA esetében a fordító sokat segít a teljesítmény fokozásában hiszen úgynevezett byte kódra fordít és ezt a byte kódot futtatja a JRE. (I1) Ezzel szemben a gyakorlat azt mutatja, hogy a JAVA-ban megvalósított rendszerek többször nehézkesek és meglehetősen lassúnak bizonyulnak. A PHP-ban csak forráskód létezik, nincs byte kód, előre fordítás; csak a forráskód. Ez nagy rendszereknél azt jelenti, hogy minden oldal letöltésnél az interpreternek be kell járnia az egész kódot és értelmeznie. Itt úgy lehet optimalizálni, hogy bizonyos osztályokat tartalmazó kódokat csak akkor töltünk be, amikor arra szükség van, ezt „autoload”-nak nevezzük. Ezt a módszert nem szabad lebecsülni, rendkívül fellehet vele gyorsítani egy rendszert. Itt említeném meg, hogy a JAVA kliensek futtatása a kliens gépét terheli, míg a PHP csak a szerveren fut, a kliens gépek lehetnek gyengébb teljesítményű gépek.
3.3. Hiba keresés és kezelés JAVA-hoz léteznek különböző fejlesztői környezetek, ezek képesek futás közbeni debug-ra, úgynevezett „Breakpointok” segítségével.
Ami nagyban megkönnyíti a munkát, hiszen
megállítható a program futása és utasításonként lehet tovább léptetni, miközben a változók értékét is nyomon lehet követni. PHP esetében magunknak kell gondoskodni a változók kiírásáról, és a program futásának megszakításáról, és ha már megszakítottuk akkor nem folytathatjuk a program futását. Valamint, ha „autoload”-ot használunk, akkor akár az is előfordulhat, hogy bizonyos kódrészeken még a szintaktikai helyesség sincs meg, de a rendszer többnyire hibátlanul működik. Ez esetben csak az vezet megoldáshoz, ha minden funkciót egyesével letesztelünk tesztelünk, bár ez nyelvtől függetlenül erősen ajánlott.
3.4. Fejlesztés szervezése JAVA esetén a szisztéma egyszerű: gépünkön megnyitjuk a JAVA projektünket és módosítjuk, futtatjuk. Ha több emberrel szeretnénk mindezt megoldani, akkor külső programot (Subversion (SVN), Concurrent Versions System (CVS)) kell használnunk, ezek beállítása, és használata nem egyszerű feladat.
PHP esetében ez kézen fekvő, a fejlesztő programok többsége támogatja, hogy FTP-n bejelentkezünk a szerverre onnan letöltjük a fájlokat, módosítjuk, majd vissza töltjük. (Ebből a fejlesztő annyit érzékel, hogy belép, megnyitja a file-t szerkeszti és elmenti). Ez a módszer egyszerű és megkönnyíti a közös munkát hiszen, ha nem ugyanazt a file-t akarjuk többen módosítani, akkor egymástól teljesen függetlenül is dolgozhatunk ugyanazon a project-en.
3.5. Rendszer szerűség Mivel a JAVA szigorúan OOP nyelv, ezért megkövetel bizonyos fokú rendszer szerűséget. Mindenképpen kell használni objektumokat, bár a fordító nem tud arról dönteni, hogy az objektumokat csak mint valami függvénygyűjteményt használjuk-e vagy tényleg OOP szerint programozunk.
A PHP nem követel semmi rendszer szerűséget, ha akarjuk objektumok sőt függvények nélkül végig írhatjuk a rendszerünket, ezzel természetesen magunkkal tolunk ki. Mivel más PHP kódok beágyazhatóak (include) bárhol a kódban és az ott le is fut ezért, opensource projektekben láthatóak például olyan hajmeresztő megoldások, hogy beállít pár változót aztán include-al behoz egy másik forrás kódot, ami ott lefut és a globális térbe beállított változók alapján tudja, hogy mit is kell csinálnia. Ez esetben a fejlesztő jobban járt volna, ha a behozott fájl tartalmát egy függvénybe kiemelte volna.
3.6. Fenntartás, frissítés, hibajavítás
JAVA esetén ha olyan koncepciót követtünk, hogy van egy központi rendszer és ahhoz csatlakoznak kliensek, akkor le kell állítani a szerveren központilag futó folyamatot kicserélni az új file-ra majd újra indítani. Ha kliens frissítés is szükséges, akkor minden gépen ki kell cserélni a kliens programot is, itt az okozhat nagy problémát, hogy ha valahol marad egy más verziójú kliens akkor az gondokat okozhat, erről gondoskodni kell.
A PHP esetében nincs folyamatosan futó szerver folyamat, ezért a frissítések kivitelezése egyszerű, a legtöbb esetben ez leállás nélkül lehetséges (csak felül kell írni a megfelelő file-t). Nagyobb átalakítások esetén természetesen itt is célszerű leállítani a rendszert, mivel itt a „kliens” a böngésző annak cseréje általában nem szükséges.
3.7. Biztonság Alapvetően a nyelvek között nem találkoztam ilyen téren különbséggel, az esetek többségében a sebezhetőségek abból adódnak, hogy a szerver, amin fut rosszul van beállítva, vagy a programozó vétett súlyos hibát ami biztonsági rést okoz. Amennyiben olyan rendszert készítünk, ami nem csak egy szűk lokális hálózatból akarunk elérhetővé tenni (ez alatt fizikai korlátozást értek pl.: 5 gép van egy switch-el összekötve és nincs Internet, WiFi stb. a hálózatban.), akkor a biztonság a legfontosabb kérdés. Ezért fontos, hogy megismerkedjünk az adott nyelven elkövetett tipikus hibákkal. Gondoljunk arra, hogy mi történik ha rendszerünk olyan kérést vagy hálózati csomagot kap amit normális esetben nem kaphatna.
3.8. Kiegészítések A JAVA rengeteg beépített funkcionalitással rendelkezik, mint amilyen a grafikus felület előállítására alkalmas beépített osztályai, vagy a hálózati kommunikációt lehetővé tevő beépített osztályai.
A PHP viszonylag kevesebb beépített kiegészítővel rendelkezik, általában ha valami speciális funkciót szeretnénk amit beépítetten nem tud akkor ha rá keresünk szinte biztos, hogy találunk olyan példát, ami segít megoldani a legbonyolultabb feladatokat is.
4. Következtetések Alapvetően mind a két rendszer alkalmas arra, hogy rendszert készítsünk el a segítségével, ez leginkább a mi programozói képességünktől függ, hogy az elkészült rendszer mennyire lesz megbízható. Mivel komoly több felhasználós rendszerek esetében szükségünk lesz szerverre, fektessünk nagy hangsúlyt arra, hogy jó rendszergazdát válasszunk ki hiszen ez nagyban befolyásolja, hogy a rendszer mindig elérhető legyen, és biztonságos. Általában olyan rendszergazdát aki LAMP (Linux Apache MySQL PHP) környezetet be tud állítani könnyebben fogunk találni, mint olyat aki egy JAVA-s környezetet megfelelően be tud állítani. A sok beépített funkcionalitás segítségével JAVA környezetben nagyon gyorsan létrehozhatjuk a rendszerünket. A probléma az hogy az ilyen beépített keretrendszerek általában korlátot is jelentenek. A keretrendszerekkel kapcsolatban megemlíteném azt is hogy ezeket úgy készítik, hogy minél több speciális igényt ki tudjon elégíteni. Ez általában a sebesség rovására megy, hiszen olyan kód részeket tartalmaz amiket mi sosem fogunk használni. A közhiedelem szerint a PHP-t azok a programozók használják akik csak hobbiból programoznak, ez részben annak köszönhető, hogy könnyű a nyelv alapjait elsajátítani. A JAVA-ról azt tartják, hogy több szabványt tartalmaz. Én ezzel szemben azt állítom, hogy nem számít semmi csak, hogy mennyire eladható. Ez pedig inkább függ a programozótól, mint attól, hogy milyen nyelven írta.
5. Összefoglalás Az esettanulmány célja, hogy segítsek azoknak akik rendszer készítésre adják a fejüket eldönteni, hogy ki tudják választani a megfelelő programozási nyelvet. Nem célom azt állítani, akármelyikről, hogy csak is azt szabad választani. A tényleges döntést mindenkinek magának kell meghozni, próbáltam néhány támpontot adni, hogy mi alapján tudjuk ezt a döntést úgy meghozni, hogy később a projekt közben ne bánjuk meg döntésünket. A döntésnél vegyük figyelembe, hogy ahol használják majd az általunk készített rendszert ott milyen teljesítményű gépek állnak rendelkezésre, milyen operációs rendszert használnak. Hiszen ha ezeken akarunk változtatni annak akár akkora költsége is lehet a megrendelő számára mint a rendszer elkészítése. Az hogy a végső rendszer eléri-e a célját az jobban függ a programozótól mint a választott programozási nyelvtől. Ami nagyon fontos még, hogy a programon kívül a környezete is legyen stabil ehhez, meg kell találnunk a megfelelő rendszergazdát aki ebben tud segíteni. Nem célszerű egy projektnek olyan részeit is bevállalni amihez kevésbé értünk hiszen ez lesz a rendszer gyenge pontja inkább válasszunk olyat aki az adott területet jobban ismeri. Ez számunkra hosszú távon fog megtérülni. Az esettanulmányt eltérően diploma vagy szakdolgozatokban szokásos módszertől kevés irodalmi hivatkozást tartalmaz, főként saját tapasztalataimat próbáltam összegyűjteni, és nem mások által leírtakat megismételni.
6. Irodalomjegyzék Internetes hivatkozások: I1: http://hu.wikibooks.org/wiki/Java_Programoz%C3%A1s/A_Java_programoz%C3%A1si_k %C3%B6rnyezete I2: http://en.wikipedia.org/wiki/Php