Ressourcen zusammenfassen
Kai345
- php
[latex]Mae govannen![/latex]
Da mir die ewige copy&paste-Orgie der häufig benötigten Javascript-Funktionen pro Projekt auf den Geist geht (und nebenbei für einen gewaltigen Verwaltungsaufwand sorgt, falls sich eine dieser Funktionen ändert/verbessert wird) habe ich vor, jede Funktion bzw. Funktionsgruppe als gesonderte Ressource auf dem Server abzulegen. Nun ist es natürlich unsinnig, diese Ressourcen einzeln per HTTP abzurufen, daher muß ich serverseitig mit PHP irgendwie alle benötigten Ressourcen zu einer Resultierenden zusammenfügen und diese dann ausliefern. Gedacht habe ich mir das in etwa folgendermaßen:
PHP liest eine Konfigurations-Datei (text, csv, ini, xml ... Format erst mal nebensächlich) ein, in der die jeweils benötigten Ressourcen notiert sind (Alternativ: Verzicht auf Konfiguration und Notation direkt im PHP-Code)
Der Inhalt jeder Einzel-Ressource wird eingelesen und in ein Array geschrieben
sind alle Ressourcen eingelesen, wird das Array implodiert und in die auszuliefernde Ressource geschrieben.
Bis hierher schwere Fehler/Verbesserungen/Anmerkungen?
Nun zum eigentlichen "Problem":
Ich frage mich (und erhalte keine Antwort), ob es sinnvoll ist, diese Ressource jedes Mal neu zusammenbauen zu lassen, oder eine Routine einzubauen, die für jede einzelne Ressource prüft, ob diese aktueller ist als die erzeugte Ausliefer-Ressource. (filemtime).
Nur: Wie sehr belastet das Auslesen dieser Information den Server? Habe ich durch Einlesen, Vergleich usw. dann überhaupt noch einen Vorteil? Genauer gefragt (das geht in den Bereich Datei-System, wovon ich keine Ahnung habe daher meine dumme Frage) muß der Server jede Datei abklappern und die letzte Änderung erfragen oder ist das zentral im Datei-System abgelegt?
Cü,
Kai
Hallo Kai,
Da mir die ewige copy&paste-Orgie der häufig benötigten Javascript-Funktionen pro Projekt auf den Geist geht (und nebenbei für einen gewaltigen Verwaltungsaufwand sorgt, falls sich eine dieser Funktionen ändert/verbessert wird) habe ich vor, jede Funktion bzw. Funktionsgruppe als gesonderte Ressource auf dem Server abzulegen.
wie häufig kommen solche Änderungen vor?
- PHP liest eine Konfigurations-Datei (text, csv, ini, xml ... Format erst mal nebensächlich) ein, in der die jeweils benötigten Ressourcen notiert sind (Alternativ: Verzicht auf Konfiguration und Notation direkt im PHP-Code)
Die Alternative ist keine, Stichwort "Wartbarkeit".
Nun zum eigentlichen "Problem":
Ich frage mich (und erhalte keine Antwort), ob es sinnvoll ist, diese Ressource jedes Mal neu zusammenbauen zu lassen,
hört sich nicht sinnvoll an. Wegen einer Aktualisierung pro Woche (selbst pro Tag) stets dynamisch die Ressource zu erzeugen.
oder eine Routine einzubauen, die für jede einzelne Ressource prüft, ob diese aktueller ist als die erzeugte Ausliefer-Ressource. (filemtime).
oder einen anderen Ansatz zu wählen.
Nur: Wie sehr belastet das Auslesen dieser Information den Server? Habe ich durch Einlesen, Vergleich usw. dann überhaupt noch einen Vorteil? Genauer gefragt (das geht in den Bereich Datei-System, wovon ich keine Ahnung habe daher meine dumme Frage) muß der Server jede Datei abklappern
nein, das entsprechende Verzeichnis. Ja, es wäre eine verflixt gute Idee, diese Dateien in einer sehr flachen Verzeichnishierarchie mit wenigen Verzeichnissen zu haben.
Denke daran, dass Dir kein clientseitiges Caching einen Strich durch die Rechnung machen darf, am einfachsten geht dies mit der Aktualisierung des Namens, zum Beispiel gleichbleibendes Präfix plus Timestamp. Bei gleichbleibender Ressource sollte der Client jedoch vom Caching profitieren - und Deinen Server entlasten.
Daher schlage ich Dir vor, auf den Upload einer aktualisierten Ausgangsdatei zu reagieren. Danach prüft Dein Skript, welche Ressourcen (gemäß Konfiguration) neu zu erzeugen sind und erzeugt genau diese mit dem aktualisierten Namen. Möglichkeiten, das Skript anzustoßen, wären
a) inotify [1], falls es Dir auf Linux-Systemen zur Verfügung steht
b) Aktualisierung nur über ein Uploadskript
c) Ausführen eines cron-jobs
d) Manuelles Anstoßen durch Dich
Freundliche Grüße
Vinzenz
[1] inzwischen sehe ich ein, dass der Einsatz sinnvoll sein kann.
[latex]Mae govannen![/latex]
Da mir die ewige copy&paste-Orgie der häufig benötigten Javascript-Funktionen pro Projekt auf den Geist geht (und nebenbei für einen gewaltigen Verwaltungsaufwand sorgt, falls sich eine dieser Funktionen ändert/verbessert wird) habe ich vor, jede Funktion bzw. Funktionsgruppe als gesonderte Ressource auf dem Server abzulegen.
wie häufig kommen solche Änderungen vor?
Irgendwo im Bereich mehrmals täglich bis alle 2 Jahre :D
- PHP liest eine Konfigurations-Datei (text, csv, ini, xml ... Format erst mal nebensächlich) ein, in der die jeweils benötigten Ressourcen notiert sind (Alternativ: Verzicht auf Konfiguration und Notation direkt im PHP-Code)
Die Alternative ist keine, Stichwort "Wartbarkeit".
?
Irgendwo muß ich doch festlegen, welche der vielen Ressourcen für das jeweilige Projekt benötigt und eingebunden werden müssen, oder verstehe ich dich mis(s|t)?
Daher schlage ich Dir vor, auf den Upload einer aktualisierten Ausgangsdatei zu reagieren. Danach prüft Dein Skript, welche Ressourcen (gemäß Konfiguration) neu zu erzeugen sind und erzeugt genau diese mit dem aktualisierten Namen. Möglichkeiten, das Skript anzustoßen, wären
a) inotify [1], falls es Dir auf Linux-Systemen zur Verfügung steht
b) Aktualisierung nur über ein Uploadskript
c) Ausführen eines cron-jobs
d) Manuelles Anstoßen durch Dich
Wenn ich recht darüber nachdenke, fällt mir auf, daß es vollkommen ausreicht, wenn dieser Zusammenbau hier auf meinem lokalen Server stattfindet und ich nur die fertige Datei hochlade. Damit wäre es eigentlich auch egal, ob der hiesige Server etwas Arbeit hat oder nicht.
Cü,
Kai
Hallo,
- PHP liest eine Konfigurations-Datei (text, csv, ini, xml ... Format erst mal nebensächlich) ein, in der die jeweils benötigten Ressourcen notiert sind (Alternativ: Verzicht auf Konfiguration und Notation direkt im PHP-Code)
Die Alternative ist keine, Stichwort "Wartbarkeit".
Irgendwo muß ich doch festlegen, welche der vielen Ressourcen für das jeweilige Projekt benötigt und eingebunden werden müssen, oder verstehe ich dich mis(s|t)?
vermutlich. Ich meine:
- PHP liest eine Konfigurations-Datei (text, csv, ini, xml ... Format erst mal nebensächlich) ein, in der die jeweils benötigten Ressourcen notiert sind
mir erscheint es hier sinnvoll, die Konfiguration des Projektes auf eine solche Art und Weise vorzunehmen (und auch zu dokumentieren).
(Alternativ: Verzicht auf Konfiguration und Notation direkt im PHP-Code)
Den Verzicht auf die Konfiguration halte ich für nicht sinnvoll.
"Oh, ein neuer Seitentyp! Ich muss mein Script anpassen ..."
Freundliche Grüße
Vinzenz
Moin.
Ich würde vorschlagen, die Datei auf deiner Entwicklungsmaschine manuell per Batch-Datei bzw. Shellskript zu erzeugen.
Unter Windows z.B. so:
del complete.js
type *.js > complete._js
move complete._js complete.js
Eine noch komfortablere Lösung könntest du eventuell mit Makefiles erreichen.
Christoph
Hallo,
Unter Windows z.B. so:
del complete.js
type *.js > complete._js
move complete._js complete.js
warum so umständlich? Dann hättest du außerdem immer eine Zeile mit dem Dateinamen zwischen den einzelnen Teilen.
Ein einfaches
copy *.js ../complete.js
tut's doch auch. Achtung: Wenn die Zieldatei im gleichen Verzeichnis lieft wie die Quelldateien, gibt's Müll!
Eine noch komfortablere Lösung könntest du eventuell mit Makefiles erreichen.
Das wäre ja noch komplizierter. ;-)
Ciao,
Martin
Moin.
Dann hättest du außerdem immer eine Zeile mit dem Dateinamen zwischen den einzelnen Teilen.
Nö. der Dateiname bleibt im Konsolenfenster.
Achtung: Wenn die Zieldatei im gleichen Verzeichnis lieft wie die Quelldateien, gibt's Müll!
Daher das del
und move
in meiner Version - damit die Ausgabedatei eben anfangs nicht auf '.js' endet.
Eine noch komfortablere Lösung könntest du eventuell mit Makefiles erreichen.
Das wäre ja noch komplizierter. ;-)
Nö, gar nicht. Vor allem, falls mal aus mehreren Skripten unterschiedliche Skripte in unterschiedlichen Verzeichnissen generiert werden sollen.
Ein einfaches make
erstellt dann nur die Dateien neu, die tatsächlich neu erstellt werden müssen.
Die wildcards sind natürlich ein bisschen umständlicher, aber das ist auch alles machbar, z.B. so:
get_scripts = $(wildcard $(1)/*.js)
scripts := $(call get_scripts,./path/to/scripts)
Nema Problema.
Christoph
Moin.
Nochmal ich.
Eine noch komfortablere Lösung könntest du eventuell mit Makefiles erreichen.
Das wäre ja noch komplizierter. ;-)
In einem anderen Thread habe ich übrigens vor nicht ganz zwei Stunden auch eine Lösung per XMLHttpRequest
vorgestellt.
Das funktioniert in gängigen Browsern auch ohne Server aus dem Dateisystem. Und es benutzt JavaScript. Sicherlich *viel* einfacher als diese ach-so-komplizierten Makefiles ;)
Christoph
Guten Tag,
Nur: Wie sehr belastet das Auslesen dieser Information den Server? Habe ich
durch Einlesen, Vergleich usw. dann überhaupt noch einen Vorteil? Genauer
gefragt (das geht in den Bereich Datei-System, wovon ich keine Ahnung habe
daher meine dumme Frage) muß der Server jede Datei abklappern und die
letzte Änderung erfragen oder ist das zentral im Datei-System abgelegt?
Du könntest einen Build-Prozess (mit make, Ant, Maven oder sonstwas) erstellen, der verschiedene Aufgaben übernimmt, z.B. den Upload der Dateien oder eben auch das Zusammenfassen von Dateien.
Gruß
Christoph Jeschke