2015-12-03 3 views
6

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?

+0

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

+0

Trotz des Namens "Template-Strings" ist die String-Interpolation mit Vorlagenliteralen nicht mit einer Templating-Engine identisch. – Bergi

+0

@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

Antwort

0

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; 
+1

ES6 wird nicht nach ES5 transportiert ... es sei denn, Sie transpilieren es. Es ist keine automatische Sache. – naomik

+0

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

+0

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

1

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." 
+0

OP scheint über Templates zu wissen und fragt nur nach Leistungsunterschieden zwischen Template-Funktionen/Engine von Drittanbietern und der nativen ES6-String-Interpolation. – Shanoor

+2

@ShanShan: Sie können nicht die Leistung von zwei Aufrufen vergleichen, die verschiedene Dinge tun. – Bergi

+1

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

Verwandte Themen