-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Css/jss nur laden wenn nötig #30
Comments
hm dafür bräuchte man ein hook bietet redaxo da was von haus aus? |
Einen hook in welcher form..? Was willst du denn erkennen? Meiner Meinung nach könnte man z.b. Via OUTPUT_FILTER und strpos anhand eines css selector machtings schauen ob die aktuelle seite einen editor enthält. |
Alternativ könntest du ein mini javascript per default laden, dass erkennt ob ein editor in der seite enthalten ist und falls ja dann das eigentliche/vollständige js/css lädt |
Es müsste eine registry geben ähnlich wie die EP registry. diese sollte man ein regex oder eine bestimmten css class key liefern können, fällt im backend html dann jeweils ein match wird das registreite css und js geladen. diese registry muss für jedes addon zur verfügung stehen. das in den einzelnen addon durch den outputfilter von hand zu bauen ist doch overhead ohne ende. das ist ja ein globales problem. und kein addon spezifisches. |
Was du beschreibst klingt nach einer riesen Kanone für diesen kleinen Spatz ;-) |
Ich weiß nicht ob // Ermitteln welche Backendseite aufgerufen ist:
if (rex::isBackend() && rex_be_controller::getCurrentPage() == 'addonkey/unterseite') {
// Hier z.B. Assets einbinden
} im PJAX Context funktionieren kann |
würde das problem aber global beheben, und man hätte eine resource für alle addons, man muss ja sowieso das js und css via rex_view laden lassen https://github.com/FriendsOfREDAXO/cke5/blob/master/lib/Cke5/Provider/Cke5AssetsProvider.php#L27-L28 |
@skerbis ja eine schwirige sache. man müsste eine erweiterte JS resource bauen die check ob instanzen bei pjax calls vorhanden sind und wenn benötigt entsprechend nachgeladen werden |
Ich denke dass ist in 10 zeilen javascript lösbar |
@staabm und dafür muss dann generell ein js geladen werden. in dem nicht zentrale falle dann auch pro addon -> das gibt dann wieder viele aufrufe bei vielen addons führt als eher zum Gegenteil von dem was ja vermeiden werden soll. ich finde auch hier wäre eine globale lösung gut welche auf eine setting zurück greifen könnte, so dass dann für alle addons ein script die arbeit macht |
Ideal wäre ein EP bei rex_view::addCssFile und bei rex_view::addJsFile bei dem man dann den Content abfragen könnte ob z.B. eine Textarea mit der Klasse vorhanden ist. |
Falls das nicht möglich ist finde ich die OUTPUT_FILTER Variante aber auch nicht tragisch :) |
Meiner Meinung nach sollte man dieses nachladen wenn nötig via javascript lösen, nicht via content inspection im php. Initial ein minimales js ausliefern (ähnlich einem bootloader) und dann beim 1. init die eigentlich lib nachladen |
es wäre praktisch wenn diese js gesammelt werden würden |
Ich finde auf jeden Fall eine Lösung am besten die nach Möglichkeit alle Addons nützen können, eine Best Practice sozusagen. // hier dann injected code von CKE } Aber auf jeden Fall sollten die Scripte/CSS nur geladen werden wenn auch benötigt! |
In meinen augen ist da relativ wenig gemeinsamkeiten zwischen den addons, daher würde ich da keinen allg. Mechanismus bauen. |
Jquery Beispiel Für nen mini bootloader: <script>
// on rex:ready...
If (cke-areas...)
$.ajax({
url: 'http://yoursite.com/script.js',
dataType: 'script',
cache: true, // or get new, fresh copy on every page load
success: function() {
// Chke-init ...
}
});
}
</script> Ich sehe hier nix, was der core tun sollte |
ich hab das mal hiermit getestet
die Performance ist gruselig es braucht Sekunden bis der editor initialisiert wird. |
hiermit war es etwas schneller
aber dennoch keine akzeptable Performance. |
Ggf. könnte ich die profile in die cke5.js file schreiben, damit müsste dann keine extra profile.js geladen werden, somit wäre es schonmal 3 statt 4 files die CKE5 benötigt. |
Kannst du dein versuch als PR abschicken damit man drüber schauen kann? |
Ping |
@staabm nach dem test hatte ich das nochmal verworfen den code gibt es schon lange nicht mehr. Gibt es mittlerweile eine Zielführende Lösung? Wer kann hier unterstützen? |
weil ich es grad zufällig hier liegen hab... nachladen von javascript geht so: function loadScript(src) {
return new Promise(function (resolve, reject) {
var s;
s = document.createElement('script');
s.src = src;
s.onload = resolve;
s.onerror = reject;
document.head.appendChild(s);
});
}
loadScript("pfad-zu-meiner-js-datei.js").then(function() {
// diese function wird aufgerufen, wenn die js datei fertig geladen ist
}); |
https://friendsofredaxo.github.io/tricks/snippets/ckeditor_im_frontend Hier habe ich ein Beispiel CSS+JS im Frontend einzubinden ... nur wenn auch die Klasse cke5-editor vorhanden ist. Also im Backend merke ich hier lokal den CKE durch flackern im Backend. Da er ja bei jeder Seite geladen wird ... egal ob eine Textarea da ist oder nicht. |
@aeberhard was meinst du mit flackern? Bei mir flackert nichts. |
Mit aktiviertem CKE ist ab und zu kurz alles weg ... bevor die Seite angezeigt wird. Flackern ist vielleicht der falsche Ausdruck. |
@aeberhard hast du denn schon ein funktionierendes Prozedere für das nachladen? Überall da wo CSS und Data Attribut im für den CKE5 im HTML vorkommen müsste es gewährleistet sein, dass JS und css für den CKE geliefert wird. Also müsste man ganz am ende über den DOM laufen und schauen ob da was da ist. Ich bin jetzt nicht dazugekommen mich darum zu kümmern und wäre froh, wenn sich da jemand beteiligen könnte. |
Hallo Joachim @joachimdoerr. |
@aeberhard wäre super wenn Du da mal schauen könntest. |
@aeberhard hattest Du nochmal zeit zu schauen? Ich wollte das Addon nochmal etwas weiter bringen und auch diesen Punk nochmal anschauen. |
m.E. ist es vollkommen akzeptabel, diese Ressourcen (wie auch bei anderen Addons) einmal zu Beginn zu laden und dann hat sie ohnehin der Browser-Cache. Eher sähe ich das in REDAXO, zu managen, dass es Ressourcen gibt, die frühzeitig geladen werden müssen und andere, die auf Vorrat preloaded werden können. Das hätte den Vorteil, dass nicht zu viele Ressourcen bei Login geladen werden müssen, die in der Struktur bspw. noch gar nicht gebraucht würden, aber bei ausreichender Internetverbindung bereits zum Seitenaufbau zur Verfügung stehen, wenn der cke5 gebraucht wird. Alles andere erhöht nur die Komplexität, wenn das jetzt jedes Addon für sich lösen müsste und ist auch nicht übertragbar. In Zeiten von Glasfaser und HTTP/2 frage ich mich, ob es nicht dringlichere Issues gibt. |
Es ist auch nicht klar wo das AddOn zum Einsatz kommt. |
Wäre es möglich die ganzen css/js includes nur dann zu laden, wenn auch ein editor in der aktuellen seite enthalten ist?
Aktuell lädt man hier viel zeug und braucht es oft nicht....
Triggered by redaxo/redaxo#1406
The text was updated successfully, but these errors were encountered: