Camping_RIDER: PHP Code in externer Datei

Beitrag lesen

Aloha ;)

Bei der Ajax-Lösung hat man eine saubere Trennung zwischen Programmlogik (JavaScript) und dynmaischen Zuständen (JSON). Die Programmlogik wird sich hoffentlich nicht all zu oft ändern, die Zustände vermutlich schon. Bei der Ajax-Lösung ist es deshalb möglich die Programm-Logik sehr lange zu cachen und nur die Zustände regelmäßig neu anzufordern. Bei eurer Lösung, wird beides über einen Kamm gescherrt und infolgedessen muss das gesamte JavaScript-Teilprogramm neugeladen werden, wenn sich nur die Zustände ändern.

Nun, das stimmt. Das ist aber nur dann ein Vorteil, wenn die Zustände tatsächlich dynamisch sind oder sein können. Wenn du das Ursprungsproblem nachliest wird dir auffallen, dass der TO selbst keine dynamischen Zustandsänderungen vorgesehen hatte, sondern lediglich statische, nur vom User abhängige Variablen von PHP an JS übergeben wollte.

Selbstverständlich benötige ich AJAX, um dynamische Zustände zu verarbeiten. Das ist aber überhaupt nicht der Punkt, um den es afaik hier gerade geht. Auch in der loader.php-Lösung können dynamische Zustände zusätzlich durch AJAX angefordert werden, es ging aber im Grundsatz nur darum, mit welcher Methode man ein bestimmtes Set statischer Variablen möglichst effizient an JS weitergeben kann.

Was wunderbar ist, denn dein ursprüngliches Beispiel hat kein Problem mit Manipulierbarkeit ;)

Stimmt. Ich gebe zu, dass Manipulierbarkeitsdiskussionen meinerseits hier mehr Schattengefecht sind als tatsächlich substantiell.

Und ich habe wieder redundanten Code, weil ich den AJAX für jedes einzubindende Javascript einzeln ausführen muss, da diese ja optimalerweise auch unabhängig voneinander stattfinden sollen.

Ich sehe nicht, wieso das zu redundatem Code führen sollte? Kannst du ein Mini-Beispiel bauen? Ich bin mir sicher, dass sich auch dafür schnell eine Lösung finden ließe. In der Regel, kann man das DRY-Prinzip immer sehr einfach erreichen, indem man ein zustätzlichen Level an Abstraktion einfügt, häufig kann das bereits durch eine einfache Funktion erreicht werden.

Ja, kann ich. Sagen wir, ich habe ein System am laufen, das zentral unterschiedlichste Seiten zusammenbaut (wie die Frontend-Ausgabe eines CMS). Es gibt drei JS-Skripte namens a.js, b.js und c.js; diese werden vom System nur da verbaut, wo sie gebraucht werden. Alle drei benötigen aber Zugriff auf statische Variablen des CMS, beispielswiese den Namen des registrierten Users (wieso auch immer). Dann habe ich zwei Möglichkeiten - denn a.js, b.js und c.js sollen ja untereinander autark sein:

Möglichkeit 1: ich programmiere in jedes der Skripte Passagen, die das laden der statischen Variablen per AJAX anleiern. Das ist der redundante Code, von dem ich sprach.

Möglichkeit 2: Ich lade auf ALLEN Seiten ein zusätzliches Skript varload.js ein, welches das Laden der statischen Variablen per AJAX zentral übernimmt. Dann gibt es aber in der Funktionalität zwischen der AJAX-Methode und der von mir genannten inline-script Methode keinen Unterschied mehr - mit den Nachteilen in der AJAX-Methode, dass sie immer einen Request mehr braucht, nicht sofort einsatzfähig ist, ein zusätzliches PHP-Skript zum Beantworten des Request geschrieben haben will, in welchem ich die dem HTML-Konstruktor schon bekannten Daten noch einmal zusammensammeln muss...

Summa summarum (natürlich nur auf das Problem statisched Zustände bezogen, über alles andere müssen wir gar nicht diskutieren): Entweder haben wir redundanten Code, oder die Methode führt sich ad absurdum, da sie exakt und ausschließlich das gleiche leistet wie das inline-script, dabei aber deutlich höheren Programmieraufwand erfordert.

Selbst wenn ich zusätzlich dynamische Zustände habe, würde ich mich wohl dafür entscheiden, die statischen Zustände über eine der beiden anderen Methoden (wahrscheinlich am ehesten inline-script) zu besorgen und ausschließlich die dynamischen Zustände bei Bedarf je per AJAX anfordern (Man bedenke: richtig dynamische Zustände sollten gar nicht länger zwischengespeichert werden, sondern bei Bedarf angefordert - sie könnten sich sonst dynamisch geändert haben). Das ist in meinen Augen nach allen Aspekten (Overhead, schnelle Verfügbarkeit, Programmieraufwand, ...) die effizienteste Lösung. (Das Ersetzen von Platzhaltern statt dem inline-script macht nur dann Sinn, wenn ich die einzusetzenden Variablen ohne (größeren) programmiertechnischen Neuaufwand ermitteln kann).

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[