20060705

Java vs. PHP

A continuació poso una llista de coses desitjables i/o necessàries d'un llenguatge a l'hora de fer aplicacions web.
---------------

Bug finding:
php, interpretat i no compilat --> pot portar a errors xorra de sintaxis facin petar tota l'aplicacio
java, interpretat pero compilat, arregles els problemes de sintaxis abans de deployar

Deployment:
php, canvi en calent
java, war, upload, reload del aplication context

Includes:
Java, cada class importa nomes els class que necesita
PHP, model guarro en general, es fan includes de pagina, per aixo es mes recomenable fer la base amb orientacio a objectes abans de montar un caos de includes de pagines important.

Runtime:
Java - corre sobre Tomcat, es inestable en entorns de molta carrega, sempre obliga a reiniciar periodicament
PHP - mes estable, no necesita servidor apart, es un modul d'apache

Potencia del llenguatge:
php funcionalitat d'arrays brutal sintaxi mes rapida
java, model d'objectes massa rigit i amb molta complexitat

Llibreries de cerca:
Java, millor en cercadors, Lucene

Entorns de desenvolupament:
Java, entorns de desenvolupaments evolucionats (Eclipse, JDeveloper)
PHP, tambe es pot fer servir eclipse, pero es tendeix a eines mes simples PHPEditor, Notepad++ o UltraEdit

XML/XSL Support:
PHP, Llibreries de XML/XSL que funcionin, nomes a partir de la versio 5 (en 4, fer servir sablotron)
Java, millor en parsing de XML (si fem servir JDOM, el soport estandard DOM etc no serveix per res)

Servlets:
PHP, algo menys potent amb la gestio de sessions, i a més tot son pagines, no existeix el concepte de servlet
Funcionalitats similars en els dos entorns

Model - View - Controller:
Igual java que php, pero en php no es el model habitual, s'ha de forçar la cultura dels developers cap al nou paradigma

Sintaxi:
PHP - Sintaxi guarra, tipus perl, en versio 5 es pot fer servir orientacio a objectes
Java - Sintaxi elegant, tipus C, pero molt mes complexe (sintaxi farragosa per errors en el disseny de classes basiques (String, FileOutputStream, etc.)

Proves unitaries:
PHP - facil de fer testing amb un fitxer dummy, notepad o vi oriented
Java - amb els IDEs es perd força capacitat de fer testings xorres


WebServices:

Java - ampli suport
PHP - ampli suport

Microcalls:
Java - ampli suport (inclos getTransformedContent)
PHP - ampli suport (inclos getTransformedContent a partir de php5)


Execució de comandes de sistema operatiu:

Java - no es simple, tenim una llibreria que ho fa, existeixen una serie de pitfalls al standard que no permeten agafar be la sortida del proces en certs casos.
PHP - trivial

Upload de fitxers:
PHP - trivial
Java - No existeix una llibreria standard que funcioni correctament, ni tant sols les de jakarta-commons, al final tothom es fa el seu upload, basat normalment en una classe de O'Reilly (PATETIIIIIIIIC)

MultiThreading:
Java - molt potent
PHP - hi ha llibreries pero en general no ficaria la ma al foc

Llibreries:
Java - Menys llibreries pero amb base d'usuaris mes amplia en general (jakarta, jdom, etc)
PHP - Milions de llibreries, algunes tambe amb molta base d'usuaris (Pear)

------------------------

Recomanació final:

La meva recomanació per futurs desenvolupaments sería:
BD - Oracle amb PL/SQL i Microcalls
MiddleWare - PHP + Microcalls (a no ser que necesitem multithreading o per cercadors)
Presentacio - XHTML + CSS + AJAX (i evaluar puntualment OpenLazlo)

Tampoc cal ser talibà i tot aixo es combinable i movible o sigui que poden haver altres bases de dades en MySQL o SQLServer i Tomcats que corrin Java Web Applications, pero la base hauria de ser l'anterior.

2 comentarios:

Anónimo dijo...

Només un comentari respecte la teva recomenació final: l'OpenLaszlo jo el destinaria únicament a aplicacions en entornts tancats. Sobretot tenint en compte que:

- La versió DHTML de Laszlo no està massa developed encara.
- El Flash, generat per Laszlo o per qualsevol altra, serà bloquejat als navegadors i els usuaris hauran d'activar-lo.

A banda d'això tots sabem la manca d'accessibilitat del flash o la dificultat de posicionar-lo.

Unknown dijo...

Sobre la sintaxi he de fer un apunt, aportant uns quants exemples:

PHP <?php echo "Hello World<p>"; ?>
Java <% out.print("Hello World<p>"); %>

PHP <?php echo $_SERVER["HTTP_USER_AGENT"];?>
Java <%=request.getHeader("User-Agent"); %>

PHP <?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
echo "You are using Internet Explorer<br/>";
} ?>
Java <%
if (request.getHeader("User-Agent").indexOf("MSIE")>-1) {
out.print("You are using Internet Explorer<br/>");
} %>

PHP <?php if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) { ?>
<h3>strstr must have returned true</h3>
<center><b>You are using Internet Explorer</b></center>
<?php } else { ?>
<h3>strstr must have returned false</h3>
<center><b>You are not using Internet Explorer</b></center>
<?php } ?>
Java <% if (request.getHeader("User-Agent").indexOf("MSIE")>=0) { %>
<h3>indexOf must have returned >=0 </h3>
<center><b>You are using Internet Explorer</b></center>
<% } else { %>
<h3>indexOf must have returned -1</h3>
<center><b>You are not using Internet Explorer</b></center>
<% } %>

Particularment, jo no hi veig tantes diferències...

Pel tema dels entorns de desenvolupament recomano el Activestate Komodo, el que faig servir jo per programar en perl, perquè es força potent i suporta PHP i permet debugar!!!! (no ens cal implementar un "holita framework")