Vergleich von Java und PHP für Webanwendungen

3 Kommentare

Keine andere Sprache sorgt seit langer Zeit für so kontroverse Diskussionen wie PHP. Als auf Java spezialisierte Firma erreichen die codecentric GmbH auch Anfragen zur Migration von PHP Anwendungen.

Dabei geht die Frage, ob Java besser als PHP sei, an dem Hauptproblem vorbei. Sowohl in Java als auch in PHP gibt es Frameworks, welche speziell das Erstellen von Web Anwendungen unterstützen. Frameworks können natürlich Nachteile von Sprachen ausgleichen, aber auch Vorteile von Sprachen negieren.

Um den Vergleich von Java und PHP zu verstehen muss man in der Zeit bis etwa in das Jahr 2000 zurückgehen. Java bot damals mit Servlets und Struts erste Konzepte für Web Anwendungen, aber diese zu erstellen, zu konfigurieren und zu deployen war sehr kompliziert. Durch den Boom des Internets entstand eine neue Entwicklergemeinschaft welche schnell HTML lernte. Doch reines HTML begrenzt die Möglichkeit an Interaktion und CGI-Perl Skripte waren umständlich und schwierig. PHP bot hingegen eine elegante und einfache Möglichkeit, wollte man ein Datum in einer Webseite ausgeben, so nannte man die Webseite nicht „.html“ sondern „.php“ und baute an der gewünschten Stelle ein <?php echo date() ?> ein. Auf dem Webserver Apache, welcher bereits für PHP vorbereitet war, lief die neue Datei sofort.

Zwar gab es auch in JavaServer Pages die Möglichkeit Scriptlets zu verwenden, doch dies war als unsauber verpönt. Stattdessen propagierte die Java Community die Verwendung von Komponenten. Meiner Meinung nach, ein entscheidender Faktor für die Kategorisierung von Java als „Enterprise“.

Für Internetanwendungen ist ein schönes Design wichtiger als ein Funktionales, da es mehr Kunden anzieht. Während ein in Dreamweaver oder Frontpage vom Designer gebautes HTML von PHP Entwicklern einfach mit dynamischer Funktionalität erweiterbar war, konnten komponentenbasierte Java Frameworks nicht viel damit anfangen. PHP konnte Designs mit Funktionalität ausstatten. In Java musste man jedoch die Funktionalität verschönern.

Doch in den vergangenen Jahren entstand Einsicht auf beiden Seiten. Java reduzierte die Komplexität, Frameworks wie Tapestry oder GWT, erlaubten von Designern erstellte Templates. PHP erlernte mit Version 5 brauchbare Objektorientierung und Frameworks wie Zend oder symfony brachten den PHP Entwicklern Designkonzepte bei. Auch die ergänzenden Bibliotheken von Java fanden Entsprechungen auf PHP Seite. So gibt es zum Beispiel in PHP die ORMs Propel und Doctrine.

Vom heutigen Standpunkt aus betrachtet bieten also Java und PHP ähnliche Funktionalität. Dennoch bleiben weitere Aspekte zu betrachten:

  • Stabilität
    PHP hat hier meiner Meinung nach deutliche Schwächen. Die prozedurale Abwärtskompatibilität, kein echter Deprecationmechanismus, ein undurchschaubarer Wirrwarr an halboffiziellen Bibliotheken und plattformabhängiger Funktionalität sind nur einige der Problempunkte die PHP hat. PHP mangelt es an einem sauberen Schnitt, den das PHP Team mit Version 6 geplant hat.
    Java hingegen hat eine saubere Platformunabhängigkeit und eine recht klar definierte Anzahl an Kernbibliotheken mit entsprechenden Qualitätsstandards.
  • Performance
    Wurde früher Java oft als langsam bezeichnet, so sind heute die JVMs hochoptimiert, wohingegen die Skriptsprachen, auch PHP noch damit kämpfen. So gibt es erst in PHP 5.3 einen brauchbaren Garbage Collector. Auch andere Optimierungen fanden nur sehr zögerlich Einzug in die PHP Runtimes. Dies mag wohl daran liegen, daß PHP im Gegensatz zu Java nach jedem Request die VM neu startet, was weitere Performanceprobleme bedingt. So muss bei jedem Request die Session von Platte gelesen werden. Zwar gibt es dort auch Lösungen im PHP Bereich (MemCache, APC), jedoch sind diese zum Einen selten eingesetzt, zum Anderen auch noch stark in der Entwicklung.
    Interessanterweise macht dieser Nachteil die Skalierung von PHP Anwendungen recht einfach. Da Requests völlig separat verarbeitet werden können, wirkt sich zusätzliche Hardware relativ linear auf die Kapazitäten des Servers aus. Im Web liegt der Fokus auch eher auf der Anzahl der Requests, nicht direkt auf der genauen Dauer eines einzelnen Requests.
  • Auswahl
    Idealerweise erfindet man das Rad nicht neu. Selbst wenn man es noch runder machen könnte steht der Aufwand auf einer holperigen Straße nicht in Relation zum Nutzen. Von daher ist es sinnvoll bereits existierenden Lösungen zu verwenden. Sowohl in PHP, als auch in Java existiert viel modularer Software, teils mit freien, teils mit unfreien Lizenzen. Allerdings haben PHP Module wesentlich mehr Probleme als in Java geschriebene. So haben einige PHP Modulentwickler sich eigene Konzepte einfallen lassen (z.B. Zend nutzt Zend Loader als Ersatz für Packages) oder die Module sind nur auf ein Framework optimiert (symfony Plug-In).
    Java ist als Sprache, gerade durch die „komplizierten Konzepte“ wie z.b. Classloading und Packages, besser auf Modularisierung vorbereitet. Auch durch die bessere Toolunterstützung (Ant/Maven, Javadoc, JUnit) besitzen Java Frameworks leichter zu installierende, besser dokumentierte und getestete Artefakte. Allerdings verbreiten sich PHP Tools für diese Aufgaben (pake/phing, PHPDocumentor, PHPUnit/lime).
  • Integration
    Integration ist sicherlich die Stärke von Java. Zum einen ist Java selbst fast „Industry Standard“, zum anderen gibt es für viele Standards Implementierungen in Java. Soll eine PHP Webanwendung auf einem bestimmten Protokoll kommunizieren ist die Auswahl in PHP relativ dünn. Selbst größere Implementierungen sind z.B. von Zend sind teilweise nur sehr rudimentär implementiert (z.B. OpenID). Dies mag aber auch daran liegen, daß Integrationen von PHP Anwendungen oft über Datenbanken laufen.
  • Entwickler Know-How
    Schon vor 20 Jahren hat Frederic Brooks nach der „Silver Bullet“ gesucht und sie nicht gefunden. In seinem Artikel kommt er zu dem Schluss, daß Softwaredesign, Problemformulierung und die Fähigkeiten der Entwickler wesentlich wichtiger sind als die verwandten Tools oder Sprachen. Von daher ist es sicherlich sinnvoller bei der Umsetzung einer Webpräsenz durch einen Designer mit PHP Kenntnissen ein aktuelles PHP Framework einzusetzen. Soll nur das Web-Frontend für ein Java EE Backend entwickelt werden ist sicherlich Java die näherliegende Wahl.
    Allerdings sollte das Entwicklerknowledge nicht primär im Fokus stehen. Gewisse Technologische Hürden lassen sich nur mit bestimmten anderen Technologien und Sprachen sinnvoll lösen, und es ist mitunter sinnvoller einen Experten mit spezifischen Fähigkeiten einzukaufen als es mit ungeeigneten Tools selbst zu versuchen.

Als Fazit bleibt mir der Schluss, daß Java weiterhin die bessere Wahl für viele Projekte ist. Für kleinere isolierte Projekte können aber Scriptsprachen schneller zum Ziel führen. Als Kompromiss vielleicht Groovy mit Grails?

Fabian Lange ist Lead Agent Engineer bei Instana und bei der codecentric als Performance Geek bekannt. Er baut leidenschaftlich gerne schnelle Software und hilft anderen dabei, das Gleiche zu tun.
Er kennt die Java Virtual Machine bis in die letzte Ecke und beherrscht verschiedenste Tools, die JVM, den JIT oder den GC zu verstehen.
Er ist beliebter Vortragender auf zahlreichen Konferenzen und wurde unter anderem mit dem JavaOne Rockstar Award ausgezeichnet.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • pcdinh

    10. Juli 2008 von pcdinh

    „Although there are solutions in PHP (MemCache, APC) these are rarely and partly still heavily in development.“

    You must be joking right? Java the same. Any software need evolution 😀 All you need is stable enough and actively developed program

    „However, PHP modules expose significantly more problems than those written in Java. For example, some PHP module developers invented own concepts (e.g. Zend Loader was created by Zend as a substitute for packages) or the modules are only optimized for a framework (like symfony plug-ins).“

    You seems to have little time with PHP so there are something you misunderstand. Zend_Loader is so extremely simple that even a newbie can understand. It is just a followup what has made PEAR. If you know PEAR then you can say: Zend_Loader is just like a coding convention in file naming. No more. The way Spring load Java classes is much more magic, right?

    Your comparison leads to nothing because it is too too basic and contains lot of misunderstanding. E.x: when you say Java has Maven, then you can think of its complexity. More tool, the better?. No. Steep learning curve, more engineers, more budget, more time, more bugs, more problems. That is why Java applications are so expensive and Java projects need a lot of engineers.

    PHP does not need tools like in Java because it is so powerful and simple that it does not require anything beyond PHP itself. Java needs more tools, even more and more advanced tool day by day because it creates more problems than what it can solve.

    „Java is still the better choice for many projects“ Yes, so true. I use Java for my own corporate messaging applications. Java is more more powerful than PHP in system programming. However, Groovy Grails and Java are still locked into JVM which is not friendly enough when deploying applications on multi-core servers. Meanwhile Java threads are not efficient as many people think. The statefullness of JVM can not balance the Java power in web applications in comparison to PHP ones, which are cheaper to write, cheaper to customize and deployed.

  • Belial

    6. Juni 2010 von Belial

    Ich sag‘ mal, egal wie stark sich das PHP-Team in die Weiterentwicklung von PHP rein hängt, egal wieviele Verbesserungen sie dort rein bingen, egal wieviele Sicherheitslücken sie Schliessen, PHP wird stets hinter Servlet-Containern und .NET-Frameworks herhinken, solange sich die Kollegen, welche dann in PHP entwickeln sich diese neuen Vorzüge nicht zu Nutze machen. Ich z.B. kenne keine einzige Web-Anwendung, bei welcher z.B. der „Safe-Mode“ eingeschaltet sein darf. Zum zweiten: „register-globals“ und ähnliche. Zwar halten sich inzwischen sehr viele professionelle Anwendungen an diese Konformität, jedoch gibt es immer noch zu viele unabhängige Modul-Enwickler für diese Anwendungen, die sich nicht dran halten, was das Wiedereinschalten von „register-globals“ erforderlich macht. Aber okay. PHP mag ja für „Hinz und Kunz“-Anwendungen genügen, was man unschwer an dessen Verbreitung erkennen kann. Aber von Professionalität ist PHP meines Erachtens noch sehr sehr weit entfernt. Warum sind denn wohl JSP/Servlets und ASP/ASPX nicht so verbreitet und warum sind diese Anwendungen um ein vielfaches teurer? Liegts vllt. an dieser simplen „Friss oder Stirb“-Mentalität, welche sich bei PHP-Entwicklern unmerklich einbürgert, weil PHP aufgrund seiner Simplizität diese schlicht zulässt?

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.