Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Javascripts vor dem schließenden body tag einbinden  (Gelesen 3822 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Lintzy

  • Gast
Javascripts vor dem schließenden body tag einbinden
« am: 29. April 2012, 03:03:21 »
Mal eine Frage an die echten Experten:

Leider muss ich mich hier ein wenig outen. Bislang stellte sich mir nicht wirklich die Frage, wie ich in Joomla! Javascripts erst nach document.ready aufrufen kann. Doch in Zeiten von verstärkt auftretender responsive, mobile etc. Templategestaltung wird eine Lösung fast essenziell.

Bei statischen HTML-Seiten ist das alles kein Problem. Ich pack die Javascripts - außer denen, die tatsächlich im header ablaufen müssen, wie modernizer  und co - einfach vor das abschließende body-tag.

Wie kann ich den ganzen Modulen, Plug-ins etc. hier hingehend Einhalt gebieten, die ja eigenmächtig ihre Javascripts in die index.php und das noch in den header platzieren? Oder habe ich einen Denkfehler .....hmpfh.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #1 am: 29. April 2012, 14:15:06 »
Hallo,

die Frage ist erstmal, wie aggressiv du vorgehen willst und wie flexibel das ganze sein soll. Prinzipiell bietet sich für so etwas ein Plugin an, dass kurz vor der (Header?-) Ausgabe getriggert wird. Mit JFactory::getDocument()->getHeadData(); kommst du an so ziemlich alle Javascriptdateien die während des Ablaufes sauber(!!) gesetzt wurden. Diese kannst du dann neu platzieren. Um das ganze dynamisch nachzuladen kannst du das dann einfach in eine Javascriptfunktion auslagern. Ob das verlinkte Beispiel jetzt besonders gut ist, da will ich mich nicht festlegen...

Der Nachteil dieser Methode ist aber, dass du keine Javascriptsachen erwischst, die "hardcode" eingefügt werden. Dafür müsstest du eine aggressivere Methode verwenden, z.B. das parsen der Ausgabe kurz bevor sie ausgegeben wird. Die ist natürlich bisschen aufwändiger und fehleranfälliger, aber damit erschlägst du alles.

Falls das ganze jetzt aber zu ausführlich war und es dir allgemein nicht darum geht, die Ladereihenfolge zu ändern, sondern nur die tatsächliche Scriptausführung, dann kannst du deinen Javascriptcode in

window.addEvent('domready', function(){ }
stecken (Mootools vorausgesetzt). Viele Scripte machen das eh von Haus aus. Die die es nicht machen, müsstest du wohl oder über per Hand anpassen oder mit einem Plugin (s.o.) einsammeln.
Joomla! ist auch nur ein Mensch...

Lintzy

  • Gast
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #2 am: 29. April 2012, 15:56:52 »
Hallo Ben,

es kann gar nicht ausfürhlich genug sein, danke für deine Antwort. Leider ist sie anders ausgefallen, als ich erhofft hatte. Wie macht ihr das denn mit den JS?

Ich hätte mir mehr eine "out of the box"-Lösung, ein fertiges Plug-in oder ein Codesnippet gewünscht, das ich nur noch an der richtigen Stelle einfügen brauche, so müsste ich mich zur Verwirklichung erst in die Untiefen der JS-Programmierung, bzw. (Stichwort Plug-in) der PHP-Programmmierung einarbeiten.

Mich wundert das doch etwas, ist doch eigentlich ein Thema, das nicht wenige andere auch tangieren dürfte- gibt es da echt nichts "fertiges"? Es geht beim mobile Templating um die Ladezeiten - erst Website laden, dann die JS nachladen. Bei statischen Websites kein Problem.

Nun vielleicht bringt das neue "overall" Joomla! 3.0 "mobile-ready" die passenden Werkzeuge mit.

Bis dahin bin ich für jeden weiteren Tipp, Texte zum Nachlesen, die auch für Nichtprogrammierer anwendbar sind,  geeignete buzzwords zum Googlen etc. dankbar.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #3 am: 29. April 2012, 17:07:33 »
Ich würde nichts dergleichen optimieren, da die Ladezeit für Mobile vollkommen ausreicht, wenn die Ladezeit der "normalen" Seite gut ist.

Edit: Wichtige Aussage rausgekürzt.

Ich habe ja bei meinem ersten Post überlegt, ob ich noch nen persönlichen Kommentar hinschreiben sollte, habs dann aber gelassen.

"Mobile Seiten" sind so 2010er

Jetzt wirds philosophisch:

Ich weiß nicht, ob du selbst ein IPad, Smartphone, etc. hast, aber ich habe in den letzten Tagen vermehrt festgestellt, dass ich mich eher ärgere, wenn eine Seite extra für ein Handy "optimiert" wurde. Anfangs dachte ich auch: "wow, responsive Designs", aber jetzt finde ich es als Handynutzer nur noch ärgerlich. Das fängt bei Wikipedia an, wo ich mich spontan weder einloggen noch editieren kann und auch auf Features wie den TOC oder das Menü verzichten muss. Halte ich mein Handy quer, kann ich die normale Ansicht ohne Probleme lesen und habe auch alle Features, die bevorzuge ich ganz klar gegenüber der "optimierten mobile Ansicht". Auch bei joomla-downloads find ichs z.B. nervig. Wenn dort die Seitenbreite nicht fest wäre, dann könnte man ohne Probleme die normale Ansicht benutzen.

Das Optimieren geschieht meistens dadurch, indem Sachen weggelassen werden, das finde ich sehr sehr kritisch. Sei es nun wegen der Ansicht oder wegen der Ladezeit.  Ich würde behaupten, die neueren Smartphones sind heute ausgereift genug um normale Seiten darstellen zu können. Auch die Ladezeit sollte bei all den Flatrates etc. langsam keine Rolle mehr spielen. Meine Internetverbindung über das Handy ist z.B. ca. dreimal so schnell, wie meine normale Verbindung für den Laptop. Ich kann mit einem Handy sehr einfach zoomen, schieben und normale Seiten betrachten.

Wenn du eine Seite für Smartphone etc. optimieren willst, dann, behaupte ich mal, brauchst du ein komplettes Konzept. Das heißt, es reicht nicht, auf der bestehenden Seite ein paar Hintergrundbilder weg zu lassen und es darf auf keinen Fall irgendetwas weggelassen oder soweit hinoptimiert werden, dass man 2-3mal mehr klicken muss um etwas zu erreichen (Wikipedia hatte früher als die Kapitel eingeklappt...aktuell sehe ichs nicht mehr, aber das war nervig). Sehr beliebt ist es ja, große Menüs zu minimieren, sodass Unterpunkte im Handy erst nach dem Klick erreichbar sind => nervig. Ich könnte jetzt noch tausende Beispiele aufzählen, aber ich denke, du siehst wohin das alles läuft.

Zu Joomla! 3.0 finde ich es eher beängstigend, wer da das neue Design plant. Sollen ja Leute aus der Industrie etc. sein...leider scheinbar nicht die besten ("Inspired" da mal rausgenommen).

Das ganze hört sich jetzt so an, wie wenn ich total gegen responsive Designs etc. wäre, aber das ist definitiv nicht der Fall. Wenn es im Budget ist, würde ich eine Seite immer für Handys etc. optimieren. Aber wenn, dann richtig und, nichts für ungut, nicht indem man Javascripte versucht später zu laden. Entweder ganz oder gar nicht.

Ich wollte an dieser Stelle eigentlich aufhören, aber kurz vor dem Absenden ist mir noch was eingefallen: Wenn du wegen einer mobilen Seite an der Performanceschraube drehen willst, dann hast du (meiner Meinung nach) etwas falsch gemacht...weil dann ist deine normale Seite für den Desktop zu langsam. (geklaut und interpretiert von hier)
« Letzte Änderung: 30. April 2012, 16:00:42 von bembelimen »
Joomla! ist auch nur ein Mensch...

Lintzy

  • Gast
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #4 am: 29. April 2012, 17:41:39 »
Woraus schließt du denn jetzt, dass ich für mobile templating nur an der performance Schraube drehen will?

Das ist lediglich die einzige Frage, die mir bei diesem Thema im Kontext mit Joomla! unklar ist. Auch bei normalen Websites sollten die JS übrigens vor das schließende body-tag, - Mist! Schon wieder die Frage, wie man das jetzt mit Joomla! hinbekommt (eine Diskussion über responsive findet ja bereits im Querscrollen thread statt.)

Kurzum, meine Frage war nicht dahingehend wie responsive oder ob responsive, mobile first, oder per media queries + js extra mobile sites erstellen, sondern einfach nur, wie ich die verdammten Javascripts, die dynamisch und ohne mein Dazutun eingefügt werden, in den Griff bekomme. Bzw. wie ihr das handhabt.


Sammy

  • Bestätigter Nutzer
  • Beiträge: 165
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #5 am: 30. April 2012, 13:14:15 »
Auch auf die Gefahr hin, dass ich völlig daneben liege, weil ich Eurer Diskussion im Nachhinein auch nicht wirklich folgen kann:
Als ich Deinen zweiten Satz las
Zitat
Bislang stellte sich mir nicht wirklich die Frage, wie ich in Joomla! Javascripts erst nach document.ready aufrufen kann.
musste ich sofort an jQuery denken, das stellt nämlich auch sicher, dass der gesamte DOM-Tree aufgebaut ist:
http://docs.jquery.com/How_jQuery_Works#Launching_Code_on_Document_Ready

Auf die Art hast Du die Stelle, an der Du andere Scripte aufrufen kannst, den Part kannst Du theoretisch ja schon im Template verankern. Ich fürchte allerdings, dass Du eher sicher stellen willst, dass nicht auch andere Scripte zu früh laufen.

Falls das hier voll vorbei war, dann bitte einfach sagen, dann entschuldige mich und kann den Post wg. der Übersichtlichkeit auch gern entfernen.

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Javascripts vor dem schließenden body tag einbinden
« Antwort #6 am: 30. April 2012, 20:47:10 »
Viel Rauch um fast nichts, würde ich sagen.

Im Prinzip muß man vier Arten von Scripten unterscheiden:
  • Reine Funktionsscripte, die selbst nichts machen, sondern nur Funktionen zum späteren Aufruf bereitstellen (z.B. Mootools, JQuery). Die müssen natürlich zwingend geladen sein, bevor eine der Funktionen zum ersten Mal aufgerufen wird.
  • Ausgebende Scripte (document.write usw.). Die müssen an der Stelle stehen, wo die Ausgabe hin soll.
  • Struktur- und codeverändernde Scripte (Accordion, Tabs, Slider...). Die dürfen erst loslegen, nachdem die Seite fertig gerendert ist, weil sonst womöglich ihr Code wieder überschrieben wird.
  • Dann bleiben nur noch die Scripte, die in keine der anderen Gruppen fallen: Counter usw.
Nur bei den letzten bringt es was für die Darstellungszeit, wenn sie am Ende stehen, weil sie nicht für den Seitenaufbau benötigt werden. Die wenigen Dinger, auf die das zutrifft, kann man manuell im Template an dieser Stelle unterbringen. Für alles andere kann ich keinen Handlungsbedarf erkennen.
« Letzte Änderung: 30. April 2012, 23:30:24 von Joomla-Hilfe »
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.