Javascript defer einbinden

  • Da add_js sowieso final die joomla-eigene addScript() verwendet, könntest natürlich auch die gleich verwenden. Egal...


    add_js sieht so aus

    Code
    public function add_js($js_files = '', $options = array(), $attribs = array())

    also sollte dein Code wohl so aussehen.

    Code
    $theme->add_js('jquery.sticky.js', [], ['defer' => true]);
  • Nein, weil jede Erweiterung, jeder Code das tun kann. Wer zuerst kommt, mahlt zuerst. Es wird nicht festgehalten, wer lädt. Hilft nur, sich durch den Code der gesamten Seite kramen. Oder in den Schlüssel-Funktionen/-Methoden eine Art Debugger einbauen, der mitschreibt, was die Funktion/Methode aufgerufen hat.

    (In Joomla 4 ggf. noch etwas nerviger so eine Recherche.).

  • Ich würdfe gerne einhaken und Fragen wie so etwas aussehen kann.


    Code 1 :: Brauche File a, b ,c :: Lade a, b ,c

    Code 2 :: Brauche File c :: Lade c

    Code 3 :: Brauche File b ,d :: Lade b ,d


    Da werden dann Files sicher nur dann geladen, wenn sie noch nicht geladen worden sind, oder?


    Warum kann man es nicht so optimieren?


    Code 1 :: Brauche File a, b ,c -> merken!

    Code 2 :: Brauche File c -> merken!

    Code 3 :: Brauche File b ,d -> merken!


    js-Global Loader File:...

    schau in merkeliste und lade die Files.


    lg daniel

  • Wenn ich es richtig verstehe, was du willst, gibt es in Joomla 4 den Web-Asset-Manager. Da kann man dann in einer oder mehreren Dateien "joomla.asset.json" filigraner Abhängigkeiten definieren. Aber auch nicht ganz ohne; das zu durchschauen.


    Aber eigentlich merkt sich Joomla ja sowieso, was schon wer anderes geladen hat. Es lädt nichts doppelt, wenn du bspw. deine Zeile

    Code
    $theme->add_js('jquery.sticky.js', [], ['defer' => true]);

    in Code 1, 2, und 3 und auch noch mal im Template drinnen hast, wird trotzdem nur 1x die Datei geladen.