Facebook
Twitter
Google+
Kommentare
18

PHP/JavaScript Effizienz – eine kleine Revolution

Ich schreibe heute morgen nachdem ich nach einer – für mich – wichtigen Entdeckung noch eine Nacht drüber schlafen musste um nicht vollends auszuflippen.

Bevor ich gleich alles verrate beginne ich mal ganz vorne und arbeite mich dann auf das Ziel hin. Ich beginne mit dem Wort Effizienz. Beim Programmieren steht das für mich für:

  • Mehr Code in weniger Zeit
  • Viel Code mit wenig Fehlern

Diese beiden Ziele erreicht mal hauptsächlich dadurch, dass man

  1. Erfahrung hat
    Mit Erfahrung mache ich weniger Fehler, mit Erfahrung kenne ich die Standard-Codestrukturen die es vielfältig gibt, mit Erfahrung hab ich v.a. die Standard-Funktionen im Kopf die man dauernd braucht ohne alle naslang ins Manual zu schauen.
  2. konstant an einem Thema arbeitet und nicht zwischen lauter Kleinigkeiten springt
    Ein blödes Thema. Speziell bei Web 2.0 Programmierung ist das eigentlich ein großes Problem, weil es kaum mehr „große“ Scripte gibt sondern lauter Mini-Aktionen, d.h. man wird eigentlich dauernd aus dem Programmierfluss gerissen.
  3. Eine Sprache benutzt
    Das ist für mich ein wichtiger Punkt. Natürlich ist es toll wenn man mehrere Sprachen kann, aber wenn man nur eine richtig gut kann (oder ausschließlich eine) ist man auf jeden Fall deutlich effizienter, speziell weil man viel mehr Erfahrung hat. Allerdings ist das ein echt nice-to-have Thema. Business-Logik in PHP, DB-Abfragen in SQL, Oberflächen in HTML und CSS, client-side Aktionen in JavaScript. Der moderne Web-Programmierer muss also schon 5 Sprachen können (ohne streiten zu wollen was man als „Sprache“ ansieht).

Ein Beispiel: Ich wollte gestern Abend einfach ein str_pad in Javascript haben (also eigentlich ein sprintf, aber ich dachte ein str_pad wäre leichter). In PHP kein Problem, da weiß ich aufgrund meiner jahrelangen Erfahrung dass ich str_pad brauche und die Syntax hab ich auch im Kopf. Und jetzt brauch ich das in JS. Also angefangen zu coden. Aber das frisst wieder Zeit, denn eigentlich will ich ja die Logik programmieren und nicht erstmal alle benötigten Funktionen. Egal, weiter. Aber man gemerkt: hm, eigentlich könnte ich ein str_repeat auch gleich brauchen und warum heißt das in JS immer string.length und nicht wie in PHP strlen(string)?

Das Problem ist schlicht: Sobald ich Logik in JS programmiere muss ich umdenken. Zum einen liegt es natürlich daran dass ich mit HTML-Objekten arbeite, aber auch schon so banale Dinge wie ein str_repeat, ein sprintf und ein date mit all seinen wunderbaren Parametern gehen mir total ab. Ich komm mir vor wie nach Jahren PHP wieder Standard-C programmieren müssen. Grausame Vorstellung, die eignet sich ja schon zur Folter… Da durch dass ich meine gewohnten Funktionen nicht habe, sie aber brauche, muss ich ständig mühsam drumrum programmieren oder nachprogrammieren und das kostet Zeit und damit (siehe) oben Effizienz. Schließlich ist mein Code sicher nicht perfekt, er ist voller Bugs, läuft langsam und vor lauter Hilfs-Funktionen schreiben komm ich mit der Business-Logik nicht voran die ich eigentlich schreiben wollte.

Und so kam es wie es kommen muss, die Lösung ist ja meist nur einen Google-Hupf (Hupf=Sprung in Österreich) entfernt und so gibt man nach und sucht online nach Hilfe. Und schon stoße ich auf die coolste Sache seit Langem (und da schließe ich AIR mit ein): Es gibt tatsächlich ein Projekt das sich bemüht sämtliche nützlichen PHP-Funktionen in JavaScript nachzubauen: PHP.JS Die Liste der nachgebauten Funktionen ist schon ziemlich lang (140!) und umfasst zu meinem Erstaunen auch Dinge wie require und file_get_contents (auch wenn diese „nur“ auf HTTP-Basis arbeiten)

Als ich das gesehen hab hatte ich erstmal echt Gänsehaut. Denn was bedeutet das denn? Im Prinzip ist es damit möglich, dass ich alle PHP-Funktionen die ich kenne einfach in JS benutzen (sogar mit gleichen Parametern) und ich damit auch dort von meiner Erfahrung in PHP profitieren kann, d.h. die Effizienz steigt massiv weil ich mich wieder um die wesentlichen Dinge kümmern kann. Im Prinzip ist der einzige Unterschied nur noch wie ich mit Objekten umgehe, Klassen schreibe und Variablen benenne (wobei: könnte JS auch $-Zeichen vor dem Variablennamen?).

Die zweite Revolution für mich ist PHP.JS zusammen mit AIR. Ich war von der AdobeOnAIR Roadshow sehr beeindruckt, speziell von der Möglichkeit alles mittels JavaScript zu machen. Der einzige Haken den ich damals und nach ersten Versuchen gesehen habe: manche Dinge, die in PHP sehr einfach sind, machen in JS Probleme, einfach weil es die entsprechenden Funktionen entweder gar nicht gibt oder sie anders heißen und eine andere Parameterstruktur haben. Wie immer: die Effizienz leidet wenn ich die ganze Zeit umdenken muss. Along comes PHP.JS, mit der ich jetzt auch AIR-Applikationen größtenteils wie PHP-Scripte schreiben kann.

Lange Rede kurzer Unsinn: Ich bin absolut begeistert von diesem Projekt und finde es auch Klasse dass man auch nur einzelne Funktionen einbinden kann ohne gleich die große 50+ KB Datei einbinden zu müssen (alle Funktionen braucht man ja dann auch nicht). Für mich ist das ein riesiger Sprung in Richtung mehr Effizienz in der JS-Programmierung und wird mir v.a. in Richtung AIR (wenn ich mal wieder mehr Zeit dafür hab) viel Freude bereiten, wobei man dann einige Funktionen (speziell die File-Befehle) nochmal speziell auf AIR anpassen müsste. Eine entsprechende Anfrage an den Projektleiter ist schon draußen und wer weiß: vielleicht würde Adobe das sogar monetär unterstützen, schließlich ist die Hürde für PHP-Programmierer damit viel niedriger.

Zum Schluss noch der Link auf den ihr alle gewartet habt: http://phpjs.org/

Über den Autor

Michael Haszprunar

Kommentare

18 Comments

  1. Mhm. Da weiß ich erstmal gar nicht, was ich davon halten soll. Hat sich oo-javascript-programmierung endlich begonnen durchzusetzen, könnte das erstmal einen sprung zurück in das finstere mittelalter von php bedeuten … Nur eben für js.

    Mir kommt da grad eine ganz andere idee … Das muss ich aber erstmal ausarbeiten … 😉

    Reply
  2. Und selbst wenn man die php.js nicht direkt als solche verwenden will: Ruft man die Funktionen in der Doku („Functions“) der Seite direkt auf, so bekommt man den js-Code zur jeweiligen Funktion und kann diesen dann alleine verwenden. Coole Sache!

    Reply
  3. ein wichtiger aspekt für mich ist auch ästhetik. und die ist bei javascript viel eher gegeben als bei php. ich hätte gerne den umgekehrten weg: ein ausgereiftes, fastCGI fähiges serverseitiges javascript und ich wäre der erste, der switchen würde ;-).

    mit punkt 3 deiner liste bin ich nicht einverstanden. ich denke, dass man überall dort die sprache verwenden sollte, die für den jeweiligen zweck am sinnvollsten ist.

    beispiel: SQL. prinzipiell kommst du ja über ein ORM auch komplett ohne SQL aus. kein ORM dieser welt kann nach derzeitigem stand jedoch den schatz einer bestimmten datenbank voll ausschöpfen (z.b. MySQL). naturgemäss kann man eine datenbank über SQL auch effizienter programmieren. ich mache z.b. viel über stored procedures, weil es einfach ein wahnsinniger overhead wäre erst alle daten nach PHP zu schaufeln, dort zu verarbeiten um sie um sie anschliessend wieder zurückzuschaufeln.

    beispiel: javascript. ich habe nie verstanden, warum so viele leute klassenbasiertes OOP auf javascript umsetzen wollen und dafür javascript extra einen „layer“ überstülpen. warum? weil das prototyp-basierte OOP konzept von javascript ausgereift ist und wunderbar funktioniert. insofern weiss ich auch nicht, was ich von den 140 PHP funktionen für javascript halten soll. die sind ja nichtmal bei PHP durchgängig konsistent. einmal ist der „heystack“ der 1. parameter, einmal der 2. — einmal werden parameter bei referenz übergeben, ein andermal nicht. einmal liefert eine funktion ein return value zum weiterarbeiten, ein andermal nicht. wenn diese javascript lib tatsächlich 100% an PHP angelehnt ist, muss sie ja all diese kinderkrankheiten auch mitbringen.

    beispiel: html. viele frameworks (einschliesslich Zend) bringen funktionen mit, mit denen du über PHP komplette HTML seiten aufbauen kannst ohne auch nur eine zeile HTML zu schreiben. warum das wenig sinnvoll ist, muss ich hoffentlich nicht ausführen.

    die sprache, die alles erschlagen kann, gibt es in meinen augen nicht und ich kann mir auch nicht vorstellen, wie eine solche sprache aussehen sollte.

    Reply
  4. Selten so etwas bescheuertes gehört – sorry, aber das muss ich so hart sagen.
    JavaScript (eigentlich ECMAScript) ist anders; komplett anders. Programme sollen nicht 1:1 übernommen werden, das ist nur in den seltensten Fällen sinnvoll.

    JavaScript ist eine eigene Programmiersprache mit völlig anderen Effizienzkriterien. JavaScript Programme sind leichtgewichtiger, wesentlich weniger monolithisch, eher „fluffy“, wenn sie richtig sind.

    Nachbau von Strukturen aus anderen, compilierten Sprachen mag für den Anfang zu funktionierenden Programmen führen. Aber Effizienz ist etwas anderes.

    Reply
  5. Gegen Punkt 3 muss ich definitiv widersprechen. Eine Sprache ist nicht das Optimum.
    Nachdem ich mich im Studium mit Sachen wie Prolog oder Scheme auseinandergesetzt habe sowie hobbymäßig ein wenig Ruby kann gehe ich an manche Sachen ganz anders ran und löse sie effizienter als zuvor.
    Man kann seinen Horizont gar nicht weit genug ausbauen!

    Reply
  6. Hallo Leute,

    Danke für die vielfältigen Kommentare. Ein paar Erklärungen von mir:
    Ich sehe PHP.JS wie eine Bibliothek mit vielen nützlichen Funktionen für JavaScript. Ich will hier NICHT einen PHP-Layer auf JavaScript haben udn alels wie in PHP schreiben, da würden viel zu viele gute Eigenschaften von JS auf der Strecke bleiben. Ich hätte – genau wie harald – übrigens auch nix gegen serverseitiges Javascript.
    Ich will einfach Funktionen verwenden um Standardprobleme zu lösen (statt sie selbst schreiben zu müssen) und wenn ich dafür Funktionen (samt Syntax) aus einer Sprache verwenden kann die ich gut kenne, dann umso besser. Natürlich wäre es (funktionell) das gleiche wenn die Funktion statt str_pad() z.b. word_padding() heißen würde, aber ich müsste wieder umdenken und das kostet Zeit die unnötig ausgegeben ist.

    Weil zu Punkt 3 Kritik aufkam: Ich will keineswegs ein SQL oder JavaScript abschaffen. Ich verwende selbst lieber pures SQL statt ORM-Layer. Aber meine persönliche Meinung ist, dass man sich auf eine Programmiersprache (pro Fach wenn ihr so wollt) konzentrieren sollte, d.h. entweder Perl oder PHP oder Java und nicht alels auf einmal. Mein grund: Wenn ich alles kenne komme ich mir selbst ständig in die Quere, weil ich aus Perl gewohnt bin das so zu machen, das in PHP aber dann nicht geht und schon fängt der Stress an. Außerdem teile ich meine Arbeitszeit (und damit Erfahrungs-Zeit) nicht auf mehrere untershciedliche Teile auf sondern ich konzentriere sie auf einen Fokuspunkt und dann werde ich dort richtig gut.
    Klar lohnt sich der Blick über den Tellerrand. Zum einen weil man nicht ewig an eienr Sprache festhalten sollte und zum anderen weil man – wie von kb geschrieben – damit teilweise auch eine andere Denkweise reinkriegt.
    Aber meine persönliche Meinung ist: Lieber in einer Sprache Profi statt in 3 Sprachen Durchschnitt.

    Reply
  7. Hi,

    naja ich finde die Idee auch nicht gerade toll :/ Besser wäre es doch anständig JavaScript zu lernen und sich mit der Sprache beschäftigen ?!?

    Wenn es nur darum geht, sich das leben einfach zu machen, gibt es viele tolle JavaScript Bibliotheken.

    PHP ist ja eine relativ leichte Sprache, meiner Meinung nach ist es Möglich auch in 2 oder mehr Programmiersprachen Profi zu sein.

    gruss axel

    Reply
  8. Hallo Axel,
    Ich würde behaupten dass ich ganz gut JavaScript kann und ich verwende auch eine anständige Bibliothek dafür (jQuery). Allerdings gibt es viel was JavaScript nicht nativ kann und auch jQuery (samt Plugins) nicht bereitstellt. Was spricht denn dagegen dass ich mir den entsprechenden Code dann nicht selbst schreibe sondern ihn von PH.JS hole? Man muss sich ja nicht gleich das Ganze holen, sondern nur die Snippets die man braucht.

    Wenn das das Zeug natürlich gern selbst schreibst: bitte sehr. aber ich verwende gern eine fertige date() Funktion oder ein str_pad(), einfach weil ich faul bin und man das Rad ja nicht ständig neu erfinden muss (zudem evtl. schlechter).

    Michael *der nur anderen faulen Leute helfen will und der die Kritik nicht so ganz versteht*

    Reply
  9. Jetzt hat es hier ja wenigstens auch mal geknallt. Da sieht man wenigstens, dass auch Leute mitlesen – mitunter fähige. Die Kritik hier ist auch durchaus berechtigt. Siehr es von der positiven Seite: Polarisierende Topics machen das Blog bekannt 😉

    Reply
  10. Ich muss ehrlich gestehen, dass ich wenn möglich, die Finger von JavaScript lassen. Erstens kann ichs nicht wirklich gut und zweitens bin ich eher der Backend Mensch. Deswegen will ich mich hier mal gar nicht einmischen, freue mich aber trotzdem, dass so rege diskutiert wird.

    Reply
  11. Hallo,

    Ich bin zwar nun nicht der größte Fan der Javascript build-in Funktionen, dennoch finde ich den Ansatz PHP Funktionen auf JS zu portieren eher albern.

    Gerade die häufig kryptischen PHP Funktionen und deren wirre Parameter (str2wtf($needle, $haystack) oder doch strtowtf($haystack, $needle) *confused*) sind doch im Vergleich zu gängigen Javascript Libraries mit OOP Konzept klar unterlegen.

    Da nutze ich für ein str_pad doch lieber $(‚obj‘).pad() (als beispiel ;)).
    Irgendwie ästhetischer…

    Grüße,
    Chris

    Reply
  12. Hallo,

    um effizient mit JavaScript zu programmieren sollte man sich heute einer der vielen JS-Bibliotheken bedienen, wie z.B. jQuery, allein schon aufgrund der vielfältigen Browserinkompatibilitäten.

    Jetzt einen ‚Layer‘ einer derart kryptischen Sprache wie PHP zu verwenden, sollte einem dagegen das kalte Grausen kriegen lassen. Und ich weiß, wovon ich bei PHP spreche, ich programmiere seit Jahren damit Webapplikationen. Aber nicht weil die Sprache so toll finde, sondern schlicht und einfach weil sie sich am Markt fürs Web durchgesetzt hat.

    Dennoch fand ich Deinen Link auf die Seite PHP.JS auch aus der Sicht von der JavaScript-Programmierung ganz interessant. Fremder Code kann einem auch immer wieder eine Inspiration für eigene Ideen geben oder einen schnellen Hack in der Praxis. Und so ist die Seite dann auch auch in meiner Linksammlung gelandet 😉

    Grüße,
    Frank

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen