Rolf B: String.concat funktioniert im Firefox 68 nicht mehr

Beitrag lesen

Hallo Felix,

extend oder append vs concat

Nein, die Namen sind schlecht. a.extend("b") oder a.append(y) suggeriert, dass a modifziert wird. Methoden dieses Namens und mit dieser Semantik gibt es an etlichen Stellen (DOM, jQuery). Strings sind in JS aber unveränderlich (immutable).

Man kann nur dazu raten, dass man Stringverkettungen in JS besser mit den +-Operator anstatt dieser Methode vornimmt.

Als universeller Rat ist das nicht zu empfehlen, beides hat seinen Sinn. Und die concat-Methode auf dem Prototypen ist im ECMA Standard und dürfte daher zukunftssicher sein.

Ein binärer Operator verknüpft zwei Objekte und liefert ein neues. Wenn ich eine Folge von Verkettungen habe: "Hallo " + name + ", du bist " + alter + " Jahre alt", werden auf diese Weise 3 Zwischenobjekte erzeugt, d.h. auf dem Heap übereinander gestapelt und wieder verworfen. Nur das letzte bleibt übrig und darunter ein Loch, das der Garbage Collector flicken muss.

Die concat-Methode kann die Längen aller Segmente vorab bestimmen, einen neuen Stringbuffer der benötigten Länge allocieren und die Segmentinhalte dort zusammenfügen. Das ist schneller und belastet den Heap weniger.

Ob es performanter ist, für mein Beispiel oben einen Template String zu verwenden, müsste man messen. Ist aber Mikrooptimierung und im Normalfall wurscht.

Ob die JS Engines der heutigen Browser im Stande sind, eine Folge von + Operationen auf Strings beim JIT Compile zu erkennen und in ein concat umzuwandeln, müsste man ebenfalls eruieren. Diese Optimierung gibt's beispielsweise in C#.

Rolf

--
sumpsi - posui - clusi