Bin ich der Einzige, oder ist Hyperscript schrecklich?

Ich ventiere hier nur, aber nachdem ich mehr Templating-Sprachen verwendet habe, als ich mir gerne vorstellen möchte (Jinja2, ERB, FTL, XSLT, JSX, Handlebars usw.), finde ich Hyperscript absolut schrecklich in der Handhabung.

In keiner besonderen Reihenfolge, die Dinge, die es kaputt macht, sind:

  • Code-Portabilität (man kann HTML-Snippets nicht kopieren/einfügen, ohne sie durch einen Konverter laufen zu lassen)
  • Syntax-Hervorhebung (verwandelt alles in einen riesigen Klumpen), z. B. vs
  • Code-Vervollständigung ist FUBAR, geschweige denn Zeitersparnisse wie https://emmet.io

Ich hätte nie gedacht, dass mich etwas so sehr nach den schlechten alten Tagen von PHP sehnen lässt, aber Hyperscript hat es geschafft!

Bin ich da der Einzige?

Ja, ich stimme zu, dass es nicht die beste Wahl ist, besonders im Vergleich zu Handlebars (das wir ebenfalls verwenden), wo man HTML so schreiben kann, wie man es erwartet.

Wir haben virtual-dom/virtual-hyperscript an Stellen eingesetzt, an denen wir die Leistung verbessern mussten. Das Thema unserer mehreren Templating-Systeme haben wir kürzlich im Team diskutiert; wir haben noch keine konkreten Pläne, erkennen aber, dass eine Vereinfachung sinnvoll wäre. Vielleicht bedeutet das, dass wir virtual-hyperscript nicht mehr verwenden? Die Zeit wird es zeigen.

Die Syntax ist etwas gewöhnungsbedürftig. Ich erinnere mich, dass ich am Anfang beim Schreiben von Discourse-Themen damit ziemlich überfordert war, aber ich habe schließlich herausgefunden, wie sie funktioniert. Es ist auch möglich, über Widgets rohes HTML zu generieren.

Ich bin nicht der Beste darin, zu sagen, wann und wo man was verwendet, aber es ist eine Option, die du in Betracht ziehen kannst, wenn du eigene Anpassungen vornimmst, ein Widget schreiben musst und Schwierigkeiten mit virtual-hyperscript hast.

Das ist eine gute Erkenntnis – danke! Ich habe ein oder zwei Stunden damit verbracht, HTML-Fragmente manuell umzuschreiben, aber zwischen diesem Tool und html2hyperscript habe ich jetzt ein paar Optionen, mit denen ich spielen kann :slight_smile:

Interessant… Ich dachte, einer der großen Vorteile von Ember sei die Geschwindigkeit der GlimmerVM. Ist die Leistung von virtual-dom ein so großer Fortschritt gegenüber Glimmer?

Ich glaube, wir haben virtual-dom schon vor der Möglichkeit von Glimmer eingeführt? @eviltrout würde das viel besser wissen als ich.

Das hat mich auch daran erinnert, dass die Verwendung von Handlebars in Widgets mit Glimmer möglich ist… seit FEATURE: Use Glimmer compiler for widget templates · discourse/discourse@dffb1fc · GitHub

Discourse stammt aus 2013, wir begannen 2015 mit Beschwerden über die Android-Leistung, fügten 2016 virtual-dom hinzu und Glimmer wurde 2017 angekündigt und wird derzeit aktiv in Ember integriert.

Verstehe. Dieser Zeitplan hilft – danke! Ich nehme also an, der einfachste Weg wäre, zu warten, bis die Glimmer-Performance der von virtual-dom entspricht, sie dann zu verwerfen und zu reinem Ember zurückzukehren?

Diese Funktion ist cool, aber ich habe Probleme, sie zum Laufen zu bringen. Ich habe discourse/widgets/hbs-compiler mit require eingebunden, bekomme aber immer noch den Fehler error: hbs is not a function.

Hast du eine Idee, warum das passiert?

Ich verwende Version 2.4.0beta5 und das theme-cli, falls das hilft.

Ich habe versucht, Vorlagen innerhalb von Widgets zu verwenden, stellte aber fest, dass dies ohne erkennbare Unterstützung für Helfer nur begrenzt nützlich ist:

Das war ärgerlich, da man dann bestehenden Standardcode an anderer Stelle im Codebase nicht wiederverwenden konnte.

Ja, leider denke ich, dass es derzeit mehr Ärger macht, Handlebars anstelle von Hyperscript zu verwenden, als es wert ist.

Wir beschäftigen uns derzeit mit der Frage, wie wir unsere Templating-Systeme rationalisieren können. Ich werde mich in den nächsten Tagen damit befassen und dir eine Antwort auf dein spezifisches Problem geben.

Cool – danke :slight_smile:

Ich würde mich freuen, an dieser Diskussion teilzunehmen und/oder auf andere Weise zu helfen :slight_smile:

Es gibt keine echte Diskussion darüber, WAS wir tun wollen; wir wollen vollständige hbs. Die Frage ist eher:

  • Ist die Performance jetzt gut genug?
  • Wie gehen wir den Übergang von bestehenden Systemen zu diesem vor?

Aah.. okay.

Ja, der Übergang könnte etwas knifflig werden. Grundsätzlich könnten wir das Reverse-Äquivalent von html2hyperscript bauen, aber in der Praxis ist die meisten Hyperscript wahrscheinlich so eng mit dem JS des Widgets verflochten, dass es schnell zum Albtraum werden könnte.

Ich denke, die einfachste Lösung wäre, die Hyperscript-Unterstützung für eine Weile beizubehalten und sie vielleicht später schrittweise einzustellen.

Lohnt es sich, auf Octane zu warten, bevor man in diesem Bereich weiter investiert?

Ich würde tatsächlich eher das Gegenteil sagen: Dass wir unsere Template-Nutzung vor Octane rationalisiert haben, wird uns helfen, später einfacher auf die Angle-Bracket-Syntax umzusteigen, wenn wir das möchten.

Ich werde in ein paar Tagen ein detaillierteres Beispiel geben, aber ich kann bestätigen, dass es funktioniert.

import hbs from 'discourse/widgets/hbs-compiler';
import { createWidget } from "discourse/widgets/widget";

export default createWidget("foo", {
  template: hbs`
    <p>MEINE VORLAGE</p>
  `
});

Verwendet in einem Beitrag mit [wrap] und WidgetGlue:

@edL Ich sehe withPluginApi in deinem Backtrace – versuchst du, den hbs-Compiler innerhalb eines <script>-Tags eines Themes zu verwenden? Leider funktioniert der Widget-Handlebars-Compiler in diesem Szenario nicht.

Du musst das Widget in einem separaten Modul mit den import-Anweisungen definieren, die @j.jaffeux oben eingefügt hat. Das kannst du in einem Theme mithilfe der Unterstützung für JavaScript in mehreren Dateien tun.

Ah, jetzt verstehe ich – das ist wirklich hilfreich! Danke, David :slight_smile: