Neden dize birleştirme dizi daha katılacak mı?
Bugün, dize birleştirme hızı hakkında this thread okudum.
Şaşırtıcı bir şekilde, dize birleştirme kazandı:
Sonuç düşündüğümden tersiydi. Ayrıca, this this gibi ters açıklıyor bu konu hakkında birçok makale var.
Tarayıcılar dizesi için concat
En son sürümü optimize edilmiş olduğunu tahmin edebiliyorum, ama bunu nasıl yapıyorlar? Daha iyi dizeleri bitiştirmek zaman
kullanmak için en iyi olduğunu söyleyebilir miyiz?
CEVAP
Tarayıcı iyileştirmeleri dize dize birleştirme resim değişti.
Firefox dize birleştirme optimize etmek için ilk tarayıcı oldu. Sürüm 1.0, dizi tekniği ile başlayarak aslında her durumda artı operatörü kullanılarak daha yavaştır. Diğer tarayıcılar da dize birleştirme, 8 de daha iyi performans artı operatörü Haritayı kullanarak Explorer Safari, Opera, Chrome, ve Internet optimize edilmiş. Sürüm 8 önce Internet Explorer gibi bir optimizasyon yoktu ve dizi tekniği artı operatör her zaman daha hızlıdır.
— Writing Efficient JavaScript: Chapter 7 – Even Faster Websites
V8 javascript motoru (Google Chrome için) this code dize birleştirme yapmak için kullanır:
// ECMA-262, section 15.5.4.6
function StringConcat() {
if (IS_NULL_OR_UNDEFINED(this) && !IS_UNDETECTABLE(this)) {
throw MakeTypeError("called_on_null_or_undefined", ["String.prototype.concat"]);
}
var len = %_ArgumentsLength();
var this_as_string = TO_STRING_INLINE(this);
if (len === 1) {
return this_as_string %_Arguments(0);
}
var parts = new InternalArray(len 1);
parts[0] = this_as_string;
for (var i = 0; i < len; i ) {
var part = %_Arguments(i);
parts[i 1] = TO_STRING_INLINE(part);
}
return %StringBuilderConcat(parts, len 1, "");
}
Yani, iç o zaman dolu olan bir İnternalArray (parts
değişken), oluşturarak optimize edin. StringBuilderConcat işlevi bu parçaları denir. Hızlı StringBuilderConcat işlevi ağır optimize edilmiş bazı C kodu olduğu için. RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat)
kodunu görmek için buraya, ancak arama runtime.cc dosyasında teklifi için çok uzun bir süre.
Neden sıralanmamış bir dizi daha hızlı...
Nasıl ve/veya neden Git daha iyi SVN g...
Neden sıralanmış bir dizi sıralanmamış...
Neden bu dize uzunluğu daha fazla kara...
Neden küçük bir liste daha küçük bir d...