PDT 3.0./3.1 unter Eclipse 4.2 “Juno” langsam

Im Zuge eines neuen PHP-Projektes habe ich mal die neue Eclipse-Version 4.2 Juno zusammen mit den verfügbaren PDT-Modulen ausprobiert.

Sowohl mit dem alten PDT-Modul, das für Indigo bereitsgestellt wurde, als auch mit einer “Nightly Build”-Variante in der Version 3.1.X. Siehe http://wiki.eclipse.org/PDT/Installation_3.1.x. Leider gibt es ja im Moment noch keine offizielle neue PDT-Version für Juno (obwohl laut Release-Plan eigentlich vorgesehen). Daran arbeitet wohl noch das ZEND-Team.

Ich habe bei dem Experiment mit Juno meine PHP-Projekte nicht neu aufgebaut, sondern den entsprechenden Workspace statt unter Indigo einfach unter Juno geöffnet. Das führte erwartungsgemäß zu einem vollständigen Neuaufbau des Workspace sowie einer vollständigen Neuvalidierung aller Projekte.

Beim Arbeiten in der “PHP-Perspective” sind mir dann vor allem zwei Dinge aufgefallen:

1) Träge Reaktionen der Oberfläche beim Arbeiten mit Reitern: Die Reaktionen des Eclipse-UI auf Tab/Reiter-basierte Aktionen zu Dateien, die im PHP-Editor geöffnet wurden, sind im Vergleich zu Indigo sehr langsam. Dies gilt im Besonderen dann, wenn man bereits mehrere Sub-Windows für die gleichzeitige Ansicht mehrerer Dateien geöffnet hat. Auch der Aufbau neuer Subfenster ist trotz der nun farbigen Anzeige der Umrisse während der Aktion viel zu träge.

2) Extrem langsame PHP-Editor-Reaktionen bei gleichzeitig geöffnetem “Outline-View”: Vor allem aber gibt es unakzeptabel große Zeitverzüge, wenn man Zeilen in einer Datei markiert, für die gleichzeitig der Outline-View geöffnet ist. Beim Arbeiten mit Dateien zu Klassen, die viele Methoden aufweisen, ist das eine Standard-Situation. Irgendwie fühlt sich das Arbeiten mit der Eclipse-GUI dann jedoch leider so an, als ob Eclipse beim Markieren jeder Zeile eine vollständige Validierung der gesamten Datei vornimmt. Es dauert ewig, bis der Editor der Mausbewegung folgt.

Trotz vieler schöner Dinge scheint mir Eclipse Juno mit den aktuellen PDT-Varianten also noch nicht für die tägliche Entwicklungsarbeit einsetzbar.

Ich entwickle jetzt übergangsweise wieder mit Eclipse Indigo – und nach der Erfahrung mit Juno kommt mir die “alte” Umgebung wirklich wie ein Schnellzug vor.

Aber ich bin optimistisch und warte ein wenig ab – sicher sehe ich mir Eclipse Juno bald wieder mal an, sobald PDT in einer neuen Version bereitsteht.

PHP-Unterstützung unter Eclipse Indigo

Da es z.Z. kein Paket gibt, dass einem eine direkte Installation einer PHP-Entwicklungsumgebung unter dem neuen Eclipse “Indigo” ermöglichen würde, ist ein wenig Handarbeit erforderlich.

Ich beziehe mich nachfolgend auf die Hinweise von “aaronbonner” auf der Webseite http://aaronbonner.tumblr.com/post/6035060125/installing-pdt-3-on-eclipse-3-7-indigo.

Die aktuelle Eclipse-Indigo-Version holt man sich von http://www.eclipse.org/downloads/.

Dort lädt man sich das Paket “Eclipse Classic 3.7” (in meinem Fall für 64Bit Linux) herunter und “installiert” das Paket in seinem Wunschverzeichnis durch entsprechendes Expandieren des Tar-Balls (z.B. mit ark).

Nun gilt es zunächst, Eclipse die erforderlichen Update-Sites bekannt zu machen. Wir wechseln daher über den Menüpunkt

“Help >> Install New Software … ”

auf die Seite “Available Software”. Hier klicken wir auf den Link “Available Software Sites” und fügen folgende Repository-Sites hinzu:

  • Indigo >> “http://download.eclipse.org/releases/indigo”
  • The Eclipse Project Updates >> “The Eclipse Project Updates”
  • PDT 3.0 Update Site >> “http://download.eclipse.org/tools/pdt/updates/3.0/milestones”
  • Subversive Site >> “http://community.polarion.com/projects/subversive/download/eclipse/2.0/indigo-site/”
  • Subversive Update Site >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • Subversive Integrations >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • Subversive SVN Connectors >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • WTP-Patches >> “http://download.eclipse.org/webtools/patches/drops/R3.1.2/P-3.1.2-20100413200422/repository/wtp-patches312-tests”

Wie man die Sites benennt, ist dabei jedem selber überlassen. Hauptsache die http-Adressen stimmen.

Danach installiert man sich die benötigten Pakete – in meinem Fall :

  • Eclipse Web Developer Tools
  • Eclipse XML Editors and Tools
  • Eclipse XSL Developer Tools
  • JavaScript Development Tools
  • JAX-WS DOM Tools
  • JAX-WS Tools
  • Native JavaHL 1.5 Implementation
  • Native JavaHL 1.6 Implementation
  • PHP Development Tools (PDT) Runtime Feature
  • PHP Development Tools (PDT) All-In-One SDK
  • PHP Development Tools (PDT) SDK Feature
  • PHP Development Tools (PDT) Source Feature
  • Remote System Explorer End-User Runtime
  • Subversion Revision graph
  • Subversive SVN Connectors
  • Subversive SVN JDT Ignoe Extensions
  • Subversive SVN Team Provider
  • Subversive SVN Team Provider Connectors Sources
  • SVNKit 1.2.2
  • SVNKit 1.3.3
  • SVNKit 1.3.5
  • Web Page Editor
  • WST Server Adapters
  • Axis2-Tools
  • Dynamic Languages Toolkit – Mylyn Integration
  • JST Server Adapters
  • JST Server UI
  • Mylyn Commons
  • Mylyn Context Connector: Eclipse IDE
  • Mylyn SDK
  • Mylyn Task List
  • Mylyn Task-Focused Interface
  • PDT Mylyn Feature
  • Subversive SVN Integration for the Mylyn Project
  • Target Management Terminal

Am wichtigsten sind hier natürlich die PDT-Pakete. Für die SVN-Anbindung
sind die Subversion-Pakete und Konnektoren wichtig. Wer Task-orientiert arbeiten will, sollte auf die Mylyn-Pakete zurückgreifen.

Viel Spass dann mit Eclipse Indigo und der zugehörigen PHP-Unterstützung !

Eclipse – zu langsam bei großen Dateien?

Muss nach einer längeren Pause mal wieder intensiv mit PHP entwickeln. Bei dieser Gelegenheit habe ich mich wirklich über einen größeren Bug in Eclipse Helios geärgert.

Das Problem unter Eclipse Helios

Dieser Bug betrifft das Editieren großer Dateien und gliedert sich eigentlich in 2 Teile:

  • Die Reaktionsgeschwindigkeit des Editors beim Tippen nimmt mit zunehmender Größe der Dateien immer schneller ab. Die getippten Buchstaben erscheinen nur erheblich verzögert am Schirm. Oberhalb 5000 Zeilen pro Datei ist der Eclipse eigene PHP Editor nicht mehr zu gebrauchen.
  • Parallel zum Tippen beginnt Eclipse offenbar den gesamten Code des Files auf potentielle Fehler zu untersuchen. Die CPU-Belastung ist hierbei enorm.

Leider kann man sich nicht immer aussuchen, wie groß die Dateien sind, mit denen man arbeiten muss. Und dann wird der Eclipse Editor unter Helios wirklich zu einer Arbeitsbehinderung.

Siehe hierzu auch https://bugs.eclipse.org/bugs/show_bug.cgi?id=326261. In den Beiträgen zum Bug wird als Zwischenlösung empfohlen, das Syntaxcoloring abzuschalten. Ferner gibt es einen etwas schwierig einzuspielenden Patch.

Lösung 1: Wechsel zu Eclipse Indigo

Ich habe gestern auf meinem Laptop die neue Eclipse Version Indigo installiert. Nach einem Tag intensiver Arbeit kann ich diesen Schritt jedem empfehlen, der von dem beschriebenen Problem betroffen ist. Unter Indigo ist der erste der beiden Punkte tatsächlich behoben. Man kann auch bei relativ großen Dateien wieder fließend tippen.

Allerdings folgt auf das Editieren weiterhin eine längere Orgie der Dateianalyse mit sehr hoher CPU-Belastung. Wohl dem, der hier mehrere CPU-Cores zur Verfügung hat.

Wie ich von Helios zu Indigo übergegangen bin, beschreibe ich in einem nachfolgenden Artikel.

Lösung 2: Kompaktere Codes – kompaktere Klassen

Ein Gutes hat der “Bug” ja vielleicht: Um die Code-Dateien zu verkleinern, beginnt man immer öfter, über den Aufbau und die Struktur der eigenen Klassen nachzudenken.

Ich habe jedenfalls bei meinen eigenen Klassen, in denen sich über die Jahre hinweg immer mehr Methoden angesammelt haben, begonnen, bestimmte Variablen bzw. Methoden besser zu gruppieren, in separate Repräsentations- und Funktionalklassen zu bündeln und dann auszulagern. Bei Bedarf instanziiert die ursprüngliche Klasse dann entsprechende Objekte. Hierzu gibt es je nach Situation mehrere brauchbare Entwurfsmuster.

Eine einfache Variante, die die Struktur der wachsenden Klassen weitgehend aufrechterhält, ist die Delegation der Aufgabe in der Form, dass man die bisherige Methode in der Hauptklasse belässt, aber die Aufgabe selbst auf den Aufruf eines Funktionalklassen-Objekts und dessen entsprechende Methode verschiebt. Die zu manipulierenden Variablen werden dabei ggf. von der ursprünglichen Hauptklasse selbst wiederum als Objekt übergeben. Da diese Übergabe immer “by reference” geschieht, wird der Bedarf an Speicher nicht wesentlich erhöht. Die Klassen-Codes werden bei einem solchen Vorgehen i.d.R. sehr viel kompakter.

Denen, die sich mit Entwurfsmustern intensiv beschäftigen möchten, sei bei dieser Gelegenheit übrigens das Buch “PHP Design Patterns” von Stephan Schmidt (http://www.phpdesignpatterns.de/auflage-2/#buch) allerwärmstens empfohlen. Ich jedenfalls entdecke immer wieder neue “Offenbarungen” in diesem Buch.

Ein anderer Weg zu überschaubaren Dateien führt ggf. über eine klarere Unterteilung der Vererbungshierarchie.

Content Assistance bei verteiltem Code

In beiden Fällen ist es bzgl. der Unterstützung (Content Assistance) beim Coding sinnvoll, sich im Editor auch Variable aus anderen Dateien vorschlagen zu lassen. Hierzu muss amn den entsprechenden Haken unter dem Menüpunkt

"Window >> Preferences >> PHP >> Editor >> Content Assist >> Show Variables from other files"

setzen.

.