Hi,
ich habe eine Frage, ich schreibe gerade an einer eigenen MVC ViewEngine und ich würde gerne ein Feature einbauen, bei dem mir noch der richtige Ansatz fehlt und da wollte ich mal in die Runde fragen.
Was ich machen möchte ist, wenn ich z.B. Site/Index aufrufe, was ja die View "/Views/Site/Index.cshtml" lädt, das automatisch unter dem geladenen Content der View, der Inhalt der View "/Views/Site/Index.js.cshtml" geladen wird.
Das möchte ich machen, weil ich einfach an meinen Projekten merke, mit Ajax und dem ganzen schönen Web 2.0 Sachen, ist der JavaScript Code Anteil, enorm und ich möchte ihn gerne auslagern um meine Views ein wenig schlanker zu halten!
Mehrere Sachen würde ich dabei gerne beachten:
Liebe Grüße
Hi,
tut mir leid, aber ich muss Dich hier "massiv" kritisieren; und kann Dich in Deinem Problem nicht unterstützen.
Javascript gehört zu den Ressourcen, die nicht dynamisch geändert werden. Das ist auch so im RFC definiert. Javascript wird vom Client gecached - und das mit Grund!
Daher würde Deine ViewEngine, die jedes mal bei jedem Request ein Javascript gerendert mitschickt, keine guten Noten in Sachen Performance bekommen.
Ein absolutes NoGo für mobile Seiten und moderne Webapplikationen!
Für Dein Problem lege ich Dir eher OOP in Javascript ans Herz. Ähnliches Prinzip wie jQuery.
Du erstellst pro View eine eigene js-Klasse und hast eine eigene Section, die der Layout-Seite (Master) den Pfad zur statischen Javascript-Datei dieser View übergibt.
In dieser js-Datei sind alle Funktionen für diese eine View. Das js-File wird bei Bedarf geladen UND vom Client gecached!
Ein ähnliches Prinzip ist in den MVC Projekt-Templates mit der Client-seitigen Validierung umgesetzt.
Gruß vom Abt
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Also, ich weiß ja nicht wie umfangreich deine Web 2.0 Projekte mit jQuery bisher so waren, aber ich habe schon zig mal im JavaScript mit C# zur Hilfe genommen, sei es um Model Werte einem jQuery.post als Parameter zu übergeben, Code je nach ViewBag Wert auszuführen, oder oder oder.
Und, eine kleine JavaScript View mit 50-100 Zeilen zu rendern, dauert wieviel Millisekunden?
Also in Zeiten, wo Bilder und Videos mit mehreren MB genutzt werden als gäbe es kein morgen, halte ich das jetzt für ein wenig übertrieben, ich will ja keinen neuen HTTP Request dafür machen, sondern lokal die View von der Platte dazu rendern.
Aber gut, jedem seine Meinung
Hallo,
auch wenn ich eine Diskussion vermeiden möchte:
Man trennt seine View von seinem Javascript Code. Das macht man bei WPF nicht anders: hier wird auch Code und GUI getrennt - und Javascript gehört auch bei HTML zur Code-Ebene.
Meine Webanwendungen sind nicht klein. Teilweise sprechen wir von mehreren tausend Aktionen+Zugriffe pro Sekunde.
Irgendwann wirst Du an den Punkt kommen, dass Du Dich ärgerst, dass Du Javascript in Deine View packst - wo sie einfach nicht hingehört. VOR ALLEM in Web 2.0 Anwendungen, bei der man jede Javascript-Funktion spüren KANN (Ajax, Effekte..), sollte man nicht so eine Architektur wählen, dass der IE5 mit versorgt wird. Da hilft auch eine Meinung nicht.
Ich lege Dir wirklich mal ein HTML5 Whitepaper ans Herz. Da wird sowas behandelt.
Stichwort: asynchrones Laden von Javascript.
Gruß
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code