2009-05-08 5 views
20

Ich konvertierte meine gesamte Website zu XML/XSL und ich würde gerne alle aktuellen Probleme mit der Durchführung von Client-Seite XSLT wissen.Client-Seite XSLT

hier diejenigen sind, kenne ich schon von (aus erster Hand):

  • domänenübergreifende XSL-Dateien (dies ist ein Sicherheitsproblem und nicht die Cross-Browser)
  • disable-output-escaping (das funktioniert nicht in FF ... sie halten es für eine Frage der Sicherheit)

auch als für die Browser-Unterstützung ist dies alles, was ich kenne:

  • Opera 9+
  • FF 1.0+
  • SF 2.0 + (i auf das falsch sein kann)
  • Chrome
  • IE 6,0 +

Jede andere wäre hilfreich sein :)

Bearbeiten:

Wie für die zweite Fallstricke gibt es eine anständige Problemumgehung, die Sie xhtml an Ihre xsl übergeben können. Es funktioniert, indem es wirklich konvertiert und sicherstellt, dass Ihr XHTML gültiges XML ist und es in Ihr XML als XML setzt. Dann kopierst du in deinem XSL das xml;) und gibst es als XHTML aus.

+1

Ich bin auch sehr neugierig auf diese. Ich benutze sehr gerne clientseitig xslt, und ich hatte nie Probleme damit, aber ich habe mich immer gefragt, ob es irgendwelche Nachteile gibt. – Zifre

+2

Es ist zu gut um wahr zu sein :). Die Fähigkeit, alle Vorlagengenerierungen auf den Client auszulagern ... Und sie die Vorlage zwischenspeichern zu lassen ... Es ist total genial. Im Jahr 2004 wurde es fast Cross-Browser unterstützt, im Jahr 2009 ... es ist, von dem, was ich verstehe. –

+0

Warum nicht einfach XHTML als Basis verwenden und dann Transformationen von dort anwenden? Warum mit XML beginnen? Werden Sie auch andere Web-Standards wie CSS oder Dinge wie JavaScript und grundlegende Bilder verwenden? Jede zusätzliche Datei verursacht Leistungsprobleme, bis sie auf der Clientseite zwischengespeichert wird. – JamesEggers

Antwort

14
  • Geschwindigkeit: Der Browser die XSLT-Transformation anwenden muss, bevor Sie die HTML-Darstellung, so wird der Benutzer länger warten müssen, um die Seite zu sehen. Die XSLT-Engines, die von den Browsern verwendet werden, sind möglicherweise nicht erstklassig. Unter Mac OS X kann der Browser einfrieren, während der XML-Code transformiert wird und den "Spinning Beach Ball" -Cursor verursacht, so dass der Benutzer den Bildschirm stanzen und sich verletzen kann.

  • Erreichbarkeit: Was ist mit den Browsern nicht in diesem Set, wie Bildschirmleser? Sind diese Benutzer wichtig für Sie?

+4

Wurden alle Vorlage Generation auf den Client ausgelagert (wodurch eine große Menge an CPU), habe ich eine Liste von Browsern, die Ich weiß, XSLT Arbeit mit so ich sende ihnen die tatsächliche XML/XSL. Wenn ein Browser nicht auf der weißen Liste steht, führt der Server die XSLT für sie aus und sendet HTML. Danke, aber ich werde dies zu meiner Pro/Contra-Liste hinzufügen. –

+4

Ich bin mir nicht sicher, ob ich der pauschalen Aussage zustimme, dass es _always_ langsamer sein wird, xslt/xml Konvertierung auf dem Client auszuführen: dies könnte (und recht oft in der Praxis) bedeuten, weniger Sachen über die n/w zu laden (die xsl/xml könnte kleiner sein als die resultierende html/xhtml): Abhängig davon, mit welchem ​​Mechanismus der Vergleich durchgeführt wird (zB JSP/ASP/Server-seitige XSLT-Konvertierung) - dieser Client-seitige Ansatz könnte tatsächlich die Verarbeitungszeit vom Server auf den Client verlagern ... und sollte besser skalieren mit mehr gleichzeitige Benutzer ... – monojohnny

2

Ich fand Weitergabe von Parametern zu xsltfiles schwierig, um crossbrowsing fähig zu halten. Ich unterstütze jetzt FF und IE, aber Chrome fiel dadurch aus.

+0

haben Sie einen Codeblock als Beispiel, ich konnte dies in Chrom gut funktionieren. –

+0

Ja, ich habe, aber Chrome war nicht so wichtig für uns, also habe ich es einfach weggelassen. für (i = 0; i Peter

+2

Vielleicht? -> XHTML Übersetzung mit einem statischen XSLT über einen verknüpfte anstatt der JavaScript-XSLT-Engine. Wenn dies der Fall ist, ist das Übergeben von Parametern irrelevant, da der einzige Eingabesatz XML-Dokumente sind. –

0

Die XSLT-Datei ist ein weiteres Objekt, das heruntergeladen werden muss und der Browser wird nur 2 oder 3 Elemente parallel abrufen. Meine Erfahrung ist, dass die Gesamtleistung (Download und Generierung) deutlich langsamer ist.

Je nach Komplexität und Redundanz der Daten können Sie auch viel mehr herunterladen, als Sie wirklich benötigen - dh. wenn der HTML-Code bereits gerendert wurde.

+0

Ich denke nicht, dass dies ein gültiges Argument ist. Verwenden Sie kein CSS, weil eine andere Datei heruntergeladen werden soll? Es kann wie CSS zwischengespeichert werden. –

+0

@Chad Sagen Sie, dass Ihr XSLT dann keine echten Webstandards wie CSS hat? Wird die XSLT Ihre XML-Datei in HTML und ein tabellenbasiertes Design umwandeln oder wird sie CSS verwenden? Dies ist meiner Meinung nach ein sehr stichhaltiges Argument, denn wenn Sie XML verwenden und es in HTML konvertieren, ohne Webstandards zu verwenden, machen Sie es möglicherweise falsch. Wenn Sie Ihren HTML-Inhalt in ein anderes Format konvertieren möchten, ist es vielleicht besser, zunächst XHTML zu verwenden und dann zu transformieren. – JamesEggers

+3

Ich würde alle Web-Technologien verwenden. CSS (Design), XSL/XHTML (Struktur), XML (Daten), JS (Verhalten). Die Menge der Datentrennung ist schön. –

5

Auf der Leistung Front ... bedenken Sie, dass die Mehrheit der Clients in diesen Tagen 2 CPUs und 2 GB RAM haben, und dass die meisten Server nicht ... Haben zwei CPUs + 2 GB pro Client, die ist. Es ist also logisch, dass das Offloading der XSLT-Transformationen die Skalierbarkeit verbessern sollte, und Caching CSS + XSLT + JS sollte den gesamten Datenverkehr reduzieren.

Nachdem ich gesagt habe, habe ich versucht, mit XSLT XHTML mit SVG in der Vergangenheit zu produzieren, und hatte ein Epic-Fail. Die größte Seite war einfach zu groß (mehr als 3.000 Einträge in einem Index), und IE verwendet ein DOM, um die XSLT-Transformation durchzuführen, was dazu führt, dass es mit dem Löschen beginnt. Die gleichen Transformationen, die in xerces-j (auf dem Server, auf der gleichen Dev-Box) gemacht wurden, waren ungefähr 1000 mal schneller.

Es ist höchste Zeit die Browser-Affen mit dem Programm bekam ;-)

Eine interessante Diskussion. Danke, dass du es erhöht hast.

Prost. Keith.

+0

Ich habe SVG noch nicht probiert, weil es nicht über den Browser läuft. Ich weiß, dass es ein Plugin gibt, das Adobe bietet, es ist eine so schöne Technologie. http://raphaeljs.com/ <- so cool ... –

+0

frage mich, wie das 8 Jahre später aussieht, P –

+1

lol, ja 8 Jahre später. XSLT wird weiterhin gerendert. –

1

ich habe etwa 1 Jahr an einem Projekt gearbeitet, wo wir Xslt + xml-> html verwendet (obwohl serverseitige nur)

der Hauptnachteil i gestoßen: Es gibt keine guten Werkzeuge für Xslt Generation, die in Richtung lehnt Webentwicklung. keine Vorschau von HTML. keine Validierung das resultierende xslt war eine totale Unordnung, die niemand verstehen konnte. Das war nicht so sehr der Fehler der xslt-Designer, sondern eher das Ergebnis des xslt-Verarbeitungsmodells.

die Überlagerung zwischen xslt/xml/urls wird komplizierter als es sein sollte. Es gibt keine Möglichkeit, komponentenorientiert zu programmieren.

Oft wurden mehrere xslt-Dateien benötigt, dies würde zu vielen Downloads auf der Client-Seite führen. andernfalls würde es zu einer massiven Codeverdopplung im gesamten Projekt führen.

Ich würde dies als eine Form der frühen Optimierung sehen. Sie sollten beginnen mit einem "normalen" Web-Framework wie Wicket, JSF, Tapisserie, Gwt etc .., wenn es sich herausstellt, dass Ihre Server Preformance cpu-gebunden ist, könnten Sie die am häufigsten verwendeten Teile der Anwendung auf diese Weise neu schreiben.

otoh, es hat echte Vorteile, wenn Sie sowohl eine XML API + eine HTML-Schnittstelle bereitstellen müssen.

+5

Im Grunde habe ich Smarty (eine PHP-Template-Engine) durch Client-seitiges XSLT ersetzt. Und dabei musste ich die Daten komplett isolieren, was eine wunderbare Sache ist. Zum Beispiel könnte ich jetzt leicht eine mobile Schnittstelle schreiben, weil alles getrennt ist. Bis jetzt sagen Sie, dass es eine Lernkurve gibt, aber Ihre im Allgemeinen Zukunftsproofing Ihre Anwendung, wenn Sie diese Methode verwenden. –