![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
Wolfgang Fellger wrote: Natürlich ist bei einem einzigen Vorkommen der zusätzliche Code zum Registrieren des Ereignis-Handlers länger, keine Frage. Dafür wird aber so ein Client ohne Javascript mit Null Javascript belästigt. Falsch. Wie schon angedeutet, muss der Client, wenn Script unterstützt wird, in jedem Fall immer das gesamte verändernde Script herunterladen. Und das ist schon allein deshalb mehr als bei einem Ansatz, der einfach HTML-Attributwerte verwendet, weil dieses Script zusätzlich verschiedene DOMs berücksichtigen *muss*. Die paar Zeichen zusätzlich durch den Methodenaufruf im Event-Handler-Attribut sind dann nicht mehr relevant. |
#12
| ||||
| ||||
|
|
Thomas 'PointedEars' Lahn wrote: Wolfgang Fellger wrote: Und damit mir hier nicht wieder ein Neunmalkluger einen vermeintlichen Widerspruch in der Argumentation unterstellen kann, stelle ich hiermit klar: |
|
Die (undeutlicher formulierte) Aussage, dass ein Client ohne aktivierten Script-Support bei "Unobtrusive JavaScript" keinen Script-Code herunterladen muss, ist richtig. |
|
Weiterhin wird ein UA, bei dem kein aktivierter Script-Support vorliegt, die Event-Handler-Attributwerte ignorieren. Von einer "Belästigung mit JavaScript" kann daher nicht die Rede sein. |
|
Zusammenfassend: Der herkömmliche Ansatz des DOM-Scriptings mit Event-Handler-Attributen bietet bei Anwendung mit Sinn und Verstand (Methodenaufrufe, Event Bubbling) bei tendenziell geringerer Downloadgrösse, grösserer Robustheit und höherer Effizienz (sowohl was die Laufzeit- als auch Speichereffizienz betrifft) die gleiche Funktionalität wie "Unobtrusive JavaScript", und ist deshalb Letzterem auf jeden Fall vorzuziehen. |
#13
| |||||||||||
| |||||||||||
|
|
Thomas 'PointedEars' Lahn schrieb: Thomas 'PointedEars' Lahn wrote: Wolfgang Fellger wrote: Die (undeutlicher formulierte) Aussage, dass ein Client ohne aktivierten Script-Support bei "Unobtrusive JavaScript" keinen Script-Code herunterladen muss, ist richtig. Das halte ich im zusammenhang dieser Diskussion für völlig unbedeutend. Natürlich kann man darauf achten, dass unnötige Sachen nicht geladen werden müssen. Aber der Punkt beim Unobtrusive Javascript ist ein anderer. |
|
Weiterhin wird ein UA, bei dem kein aktivierter Script-Support vorliegt, die Event-Handler-Attributwerte ignorieren. Von einer "Belästigung mit JavaScript" kann daher nicht die Rede sein. Es geht nicht um Belästigung, sondern um die Trennung verschiedener funktionalitäten. |
|
Mit deiner Argumentation spricht auch nichts gegen die Verwendung von CSS Inlinestyles. |
|
Unter gewissen Vorrausetzungen, kann man das machen. Aber sobald das Projekt größer wird, sollte man (und wird es auch) alles voneinander trennen was nichts miteinander zu tun hat. |
|
Ein kleines Beispiel. Ich verwende im Rahmen einer Webanwendung Tooltipps, die mit JS angezeigt werden. Die erreiche ich dadurch, dass die entsprechenden Elemente eine CSS-Klasse 'tooltipp' erhalten. Dies wird in einem zentralen Template gemacht und fertig. Das JS sucht sich die entsprechenden Elemente und fügt gegebenenfalls den onmouseover und onmouseout-event hinzu. |
|
Auch gehört dazu, dass eine Anwendung globale Variabeln vermeidet, z.b. durch Kapselung mit einer anonymen Funktion, was durchaus auch sinnvoll ist. |
|
Zusammenfassend: Der herkömmliche Ansatz des DOM-Scriptings mit Event-Handler-Attributen bietet bei Anwendung mit Sinn und Verstand (Methodenaufrufe, Event Bubbling) bei tendenziell geringerer Downloadgrösse, grösserer Robustheit und höherer Effizienz (sowohl was die Laufzeit- als auch Speichereffizienz betrifft) die gleiche Funktionalität wie "Unobtrusive JavaScript", und ist deshalb Letzterem auf jeden Fall vorzuziehen. Die tendenziell geringe Donwloadgröße müßte noch bewiesen werden und dürfte von stark schwanken - bei meinem Beispiel mit den Tooltipps, dürfte deine Aussage eher nicht zutreffen. |
|
Die Robustheit ist aber geringer bei inline Eventaufrufen, da du sobald du die Funktion änderst oder löscht und sei es nur versehen, Fehlermeldungen bekommst, im anderen Fall passiert einfach gar nichts. |
|
Und was die Laufzeit betrifft, kannst du bei Unobtrusiven JS eher auf Browserspezifische Eigenschaften eingehen, was dir unter Umständen das ständige Überprüfen, mit wem du es eigentlich zu tun hast, ersparen kann. |
|
Ausserdem ist die Wiedervertbarkeit bei Unobtrusive Javascript größer, da die Kopplung an ein Element nicht so eng ist und auch die oben erwähnte Kapselung kann den Einsatz erleichtern, wenn du mal verschiedene Skripte miteinander verknüpfen musst. |
|
Alles in allem ist dies ein guter Ansatz, der den Einsatz von JS erleichtert. |
#14
| |||
| |||
|
|
Genau das bestreite ich. DOM-Scripting ist *immer* an den Dokumentbaum gebunden. |
|
Die Möglichkeiten zur Wiederverwendung eines solchen DOM-Scripts sind somit sehr eingeschränkt. |
|
Alles in allem ist dies ein guter Ansatz, der den Einsatz von JS erleichtert. Er bürdet lediglich *dem Benutzer* *voraussehbare* Probleme auf, weil *der Entwickler* *unfähig ist*, serverseitiges und clientseitiges Scripting richtig und mithin benutzerfreundlich einzusetzen. |
#15
| ||||||||||
| ||||||||||
|
|
J. Strübig wrote: .... |
|
Obiges war Wolfgangs Argument. |
|
Weiterhin wird ein UA, bei dem kein aktivierter Script-Support vorliegt, die Event-Handler-Attributwerte ignorieren. Von einer "Belästigung mit JavaScript" kann daher nicht die Rede sein. Es geht nicht um Belästigung, sondern um die Trennung verschiedener funktionalitäten. Ja, es wird Code auseinandergerissen, der zusammengehört (DOM-Scripts operieren auf spezifischem Markup). Und das soll dann angeblich auch noch die Wartbarkeit verbessern. |
|
Mit deiner Argumentation spricht auch nichts gegen die Verwendung von CSS Inlinestyles. Wie schon geschrieben: das ist ein Vergleich von Äpfeln und Birnen. Bei CSS gibt es keine Funktionseinschränkung durch das Auslagern in eine Style-Ressource, es gibt kein Stylesheet-Bubbling und nicht zuletzt ist auch die Spezifizität der CSS-Regeln eine andere. Und ... |
|
Unter gewissen Vorrausetzungen, kann man das machen. Aber sobald das Projekt größer wird, sollte man (und wird es auch) alles voneinander trennen was nichts miteinander zu tun hat. Der Punkt ist, dass die Code-Teile hier noch viel mehr miteinander zu tun haben als bei Stylesheets. |
|
Auch gehört dazu, dass eine Anwendung globale Variabeln vermeidet, z.b. durch Kapselung mit einer anonymen Funktion, was durchaus auch sinnvoll ist. Globale Variablen sind für eine herkömmliche Lösung nicht erforderlich. |
|
Die tendenziell geringe Donwloadgröße müßte noch bewiesen werden und dürfte von stark schwanken - bei meinem Beispiel mit den Tooltipps, dürfte deine Aussage eher nicht zutreffen. Du irrst. Quickhack: ..... body onmouseover="tooltip(event, true)" onmouseout="tooltip(event, false)" |
|
Und was die Laufzeit betrifft, kannst du bei Unobtrusiven JS eher auf Browserspezifische Eigenschaften eingehen, was dir unter Umständen das ständige Überprüfen, mit wem du es eigentlich zu tun hast, ersparen kann. Ja. Das wird entweder erkauft mit der Beschränkung auf wenige DOMs oder im Falle der erzielten Universalität (die so aber nicht mal ansatzweise erreicht werden kann) durch zahlreiche Fallunterscheidungen, die, wenn sie konsequent und damit weitestgehend sicher gemacht werden, insgesamt die Implementation des Features (hier: Tooltip) verlangsamen. Womit wir wieder bei der inhärenten Fehlerträchtigkeit und Ineffizienz dieses Ansatzes wären. |
|
Ausserdem ist die Wiedervertbarkeit bei Unobtrusive Javascript größer, da die Kopplung an ein Element nicht so eng ist und auch die oben erwähnte Kapselung kann den Einsatz erleichtern, wenn du mal verschiedene Skripte miteinander verknüpfen musst. Genau das bestreite ich. DOM-Scripting ist *immer* an den Dokumentbaum gebunden. Die Möglichkeiten zur Wiederverwendung eines solchen DOM-Scripts sind somit sehr eingeschränkt. |
|
Alles in allem ist dies ein guter Ansatz, der den Einsatz von JS erleichtert. Er bürdet lediglich *dem Benutzer* *voraussehbare* Probleme auf, weil *der Entwickler* *unfähig ist*, serverseitiges und clientseitiges Scripting richtig und mithin benutzerfreundlich einzusetzen. |
![]() |
| Thread Tools | |
| Display Modes | |
| |