Hallo pl,
was für ein Roman. Sorry, das wird mir zu anstrengend. Aber ein paar Anmerkungen kann ich mir nicht verkneifen:
D.h., im Effekt ist es es gar keine Variable weil, bis auf wenige Ausnahmen, sämtliche AJAX//Fetch Requests die eine Seite feuern soll, stets auf sich selbst gerichtet sind.
Stets ist hier ein großes Wort, denn so kann man es machen, muss man aber nicht. Man kann die Ajax-Services, die eine Seite braucht, in ihr implementieren und per URL-Parameter sozusagen abrufen, welche Funktionsvariante man von der Seite haben will. Dein Framework routet das vermutlich transparent. Ohne ein solches Framework würde ich eigentlich zwischen UI und API trennen wollen, d.h. die Requests, die für das HTML zuständig sind, sind eine Kategorie von Script und das, was ich dem Client als API bereitstelle, etwas anderes. In den tieferen Application-Schichten mag es auf das Instanziieren ähnlicher oder gleicher Klassen hinauslaufen, aber eine UI Fassade und eine AJAX-Fassade haben doch unterschiedliche Anforderungen
Mitnichten sieht da ein JS jederzeit anders aus, vielmehr sieht es immer genauso aus wie es für die jeweilige Seite erzeugt wurde
Hier steckt dein Fehler: Dur würdest das JS nicht allgemein für eine Seite generieren, sondern für eine Seite, die für bestimmte Seitenparameter abgerufen wurde. Die sind userspezifisch, ggf. ruft der User die gleiche Seite mit unterschiedlichen Parametern (z.B. Produkt-ID) ab. In dem Moment wäre Caching des JS falsch. Die Tests, die ich meinte, wären übrigens Unit-Tests, d.h. automatisierte Tests der im JS implementierten Funktionen. Wenn mein Unit-Test damit beginnt, dass er das zu testende Programm erstmal generieren muss, habe ich zwei Test-Ebenen auf einmal: (a) die PHP oder Perl-Ebene, bei der ich testen muss, ob die Generierung korrekt ist, und (b) die JavaScript-Ebene, bei der ich testen muss, ob das generierte Programm das Richtige tut. Wenn aus dem Templating heraus nur ein paar Konstanten gesetzt werden, deren Inhalte keine Abläufe im JavaScript-Teil beeinflussen, kann man die Unit-Tests trennen. Aber dann ist die Generierung des kompletten JS per Template eigentlich Overkill. Wird das Templating komplexer, habe ich Unit-Tests über zwei Sprachebenen hinweg. Grusel...
Die TE wird also generell geladen, nur der Renderprozess kann abgeschaltet werden wenn er nicht gebraucht wird
Ja. Und wenn er nicht gebraucht wird, hast Du statischen Inhalt - oder? Warum dann über Perl/PHP laufen?
Und jetzt stell Dir mal vor, der URL für eine Seite wäre zu ändern. Das würde unweigerlich eine Änderung sämtlicher JS Dateien nach sich ziehen in denen der URL fest codiert ist!
Auf die Idee, eine URL in JS fix zu codieren, käme ich nicht. Das wäre ein Fall für Dateninjektion über ein Script-Tag in der HTML-Seite, die das JS einbindet. Für diese Injektion würde ich NICHT das JS über eine TE laufen lassen, um über die (vielleicht fehlende?) Referer-Information die URL einzuschießen (oder über URL-Parameter).
Dann kann man auch mit <script src="%url%?js=ext"></script> ganze Code-Teile für JS dynamisch erzeugen
Nein nein nein, das ist ein Irrweg. Bei <script src="?js=ext"></script>
war ich noch mit einem „wenn's denn sein muss“ dabei, aber deine %url% Variable enthält vermutlich auch die Query-Parameter der URL - und dann fällst Du rein bzw. musst aufpassen, ob Du ?js=ext
oder &js=ext
anfügst. Sag nicht, %url% enthält die Queryparameter grundsätzlich nicht; das ist genauso kritisch, weil die Queryparameter oft genug entscheidende Kontextinformationen liefern, die den dargestellten Seiteninhalt und damit auch die Anforderungen an generiertes JS beeinflussen.
Ich werde die Disku hier für mich abbrechen; sicherlich kann man deinen Weg gehen und Du wirst damit auch ans Ziel kommen, aber die Komplexität und Fehleranfälligkeit ist viel höher als wenn man statisches JS lädt und benötigte Daten per Mini-Script aus dem HTML injiziert. Das DASS der Fall ist, hast Du hinreichend in der Diskussion belegt.
Rolf
--
sumpsi - posui - clusi