Ein sehr attraktives Feature von ES6 sind die eingebauten Template-Strings. Zu diesem Zeitpunkt, seit der Übertragung auf ES5 ein Muss für Cross-Browser-Kompatibilität ist, bin ich gespannt, was die Leistungsunterschiede zwischen transpilierten ES6-Vorlagen und bestehenden Lösungen wie Schnurrbart, Lenker, Jade etc. sind. Offensichtlich, wenn Sie erweiterte Funktionen von a Templating-Sprache, ES6-Vorlagen erfüllen möglicherweise nicht alle Ihre Anforderungen, aber wenn Sie grundlegende Vorlagen erstellen, ist es fair zu sagen, dass ES6-Vorlagen-Strings Ihre aktuelle Vorlagen-Engine ersetzen könnten?Können wir bestehende JS-Vorlagenlösungen durch ES6-Vorlagen ersetzen?
Antwort
Wenn Sie transpilieren, wird ES6 in natives ES5 transpiliert, so dass es die Leistung eines Framework/einer Bibliothek übertrifft.
ES6
var foo = "foo";
var bar = "bar";
var foobar = `${foo} ${bar}`;
Transpiled
"use strict";
var foo = "foo";
var bar = "bar";
var foobar = foo + " " + bar;
ES6 wird nicht nach ES5 transportiert ... es sei denn, Sie transpilieren es. Es ist keine automatische Sache. – naomik
Lesen Sie die Frage vielleicht? OP spricht speziell über ** transpiled ** ES6 ... Was ich versucht habe zu sagen ist, dass ES6-Vorlagen nicht zu irgendwelchen komischen Sachen mit Bibliotheksimporten und so weiter transportiert werden (wenn man es transpiliert, wird Präzision benötigt), Sie erhalten Sie einfach einfaches altes gebürtiges Javascript. – Shanoor
Der Punkt der Transpilation ist, dass Sie einfach alte ES5 bekommen, ja, das ist nicht anders für Template-Literale. Was hat das mit der Frage zu tun? – Bergi
Template Strings in ES6 sind nicht wirklich im Zusammenhang mit den verschiedenen Template Motoren, die in JavaScript implementiert sind.
Die meisten Template-Engines (Underscore, Lodash, Moustache, Lenker, Jade, etc.) haben alle spezielle Syntaxen und spezielle Formen. Einige bieten Ihnen die Möglichkeit, Blöcke zu definieren, spezielle Markierungen für verschiedene Dinge zu verwenden oder Ihnen einzigartige Tags für Logik-/Schleifenstrukturen zu geben.
ES6 Template Strings geben Sie die volle Leistung von JavaScript, ohne Sie zu fragen, eine spezialisierte/opportuned Vorlagen-Engine zu lernen.
// underscore
var compiled = _.template("hello: <%= name %>");
compiled({name: 'moe'});
// => "hello: moe"
// ES6 Template String
let name = 'moe';
`hello: ${name}`;
// => "hello: moe"
Beachten Sie die hässlichen <%= %>
-Tags in der Unterstrich-Vorlage? Das ist nur etwas Unterstreichung erfunden, um ein "Problem" zu lösen; Das "Problem" ist, dass JavaScript vor ES6 keine Art von string interpolation hatte. Die Leute dachten, es mühsam war, die Dinge zu schreiben, wie
var greeting = "hello";
var name = "moe";
var emotion = "depressed";
greeting + ", my name is " + name + ". I feel " + emotion + ".";
// => "hello, my name is moe. I feel depressed."
Mit ES6, wird JavaScript nativen String Interpolation über ${...}
. So ziemlich alles kann in ${}
gehen, solange es JavaScript gültig ist.
let name = "naomik";
let emotion = "happy";
`${greeting || "hi"}, my name is ${name}. I feel ${emotion}.`
// => "hi, my name is naomik. I feel happy."
OP scheint über Templates zu wissen und fragt nur nach Leistungsunterschieden zwischen Template-Funktionen/Engine von Drittanbietern und der nativen ES6-String-Interpolation. – Shanoor
@ShanShan: Sie können nicht die Leistung von zwei Aufrufen vergleichen, die verschiedene Dinge tun. – Bergi
Danke für die Antwort @naomik. Ich würde argumentieren, dass ES6-Template-Strings sehr mit den verschiedenen bestehenden JavaScript-Templating-Engines verwandt sind. Vor allem, wenn Sie [getaggte Vorlagenzeichenfolgen] einführen (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings#Tagged_template_strings). Letztendlich stelle ich die Notwendigkeit von JavaScript-Templating-Engines von Drittanbietern mit der Einführung von Template-Strings in ES6 in Frage. – wikiwong
- 1. Bestehende Zeilen durch neue ersetzen verursacht doppelte Schlüssel Ausnahme
- 2. Können wir Nicht-Browser-Funktionalitäten durch Grid
- 3. Wie können wir ersetzen, mit '' in T-SQL
- 4. Können wir über IMAP abgerufene E-Mails durch Hash deduplizieren?
- 5. Können wir Inline-Javascript durch firebug debuggen und haben Bruchstelle
- 6. können wir Commandline Standard-Gateway und Schnittstelle in mac durch
- 7. vagrant nicht finden können bestehende Box
- 8. Können bestehende virtualenv anmutig aufgerüstet werden?
- 9. können wir Breite li
- 10. eine bestehende dict durch ZMQ ipc Senden
- 11. SQL Ersetzen durch Aliase
- 12. Wie verwende ich MEF, damit Plugins bestehende Funktionen überschreiben können?
- 13. Können wir sprintf in g ++ - Implementierung überladen?
- 14. Nullzeichenfolge durch Nullwert ersetzen
- 15. Platz durch Zeilenumbruch ersetzen
- 16. UpdatePanel durch JQuery ersetzen
- 17. BrowserLauncher durch BrowserLauncher2 ersetzen
- 18. Char * ersetzen durch char *
- 19. NSURLConnection durch NSURLSession ersetzen
- 20. Bild durch Javascript ersetzen
- 21. session_unregister durch unset() ersetzen
- 22. SQL Ersetzen durch Platzhalter
- 23. Bild durch CSS ersetzen
- 24. Können wir mit SonarQube die Sicherheitsszenarien für benutzerdefinierte Builds vollständig ersetzen?
- 25. RegExp ersetzen nicht ersetzen durch Muster
- 26. Javascript ersetzen Methode, ersetzen durch "$ 1"
- 27. Können wir & in URL verwenden?
- 28. Können wir Facebook programmatisch abmelden
- 29. Warum können wir nicht "..." umkehren?
- 30. Können wir 100% Entkopplung erreichen?
Da wir über transpiled Code reden: An einem gewissen Punkt mit den beiden ES6 Template Strings und einem Template-Engine, werden sie haben Strings in der ES5 Weg zu verketten: '„Hallo“+ name' . Der Engpass wird diese Änderungen also auf das DOM anwenden und nicht erst die Zeichenkette erzeugen, so dass Sie sie nicht wirklich vergleichen können. – CodingIntrigue
Trotz des Namens "Template-Strings" ist die String-Interpolation mit Vorlagenliteralen nicht mit einer Templating-Engine identisch. – Bergi
@RGraham Nehmen wir an, dass die ganze Seite eine einzige Vorlage ist. Im Wesentlichen läuft die Frage darauf hinaus: Können wir bestehende JS-Templating-Lösungen durch ES6-Vorlagen ersetzen? Ändern der Frage, um dies genauer widerzuspiegeln. – wikiwong