için
for
döngüler çok daha etkilidir. Bir koşul doğruyken yinelemek için özel olarak tasarlanmış , aynı zamanda bir adım mekanizması (genellikle yineleyiciyi artırmak için) sunan döngüsel bir yapıdır . Misal:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
Bu, -döngüler için her zaman daha verimli olacağı anlamına gelmez, sadece JS motorları ve tarayıcıları onları bu şekilde optimize etti. Yıllar geçtikçe, hangi döngü yapısının daha verimli olduğu konusunda tavizler olmuştur (için, while, azaltma, ters çevirme vb.) - farklı tarayıcılar ve JS motorları, aynı sonuçları üretmek için farklı metodolojiler sunan kendi uygulamalarına sahiptir. Tarayıcılar performans taleplerini karşılamak için daha fazla optimize ettikçe, teorik [].forEach
olarak daha hızlı veya a ile karşılaştırılabilir bir şekilde uygulanabilir for
.
Faydaları:
- verimli
- erken döngü sonlandırma (onur
break
ve continue
)
- koşul denetimi (
i<n
herhangi bir şey olabilir ve bir dizinin boyutuna bağlı değildir)
- değişken etki alanı (
var i
yaprak i
ilmek uçlarının sonra kullanılabilir)
her biri için
.forEach
öncelikli olarak diziler üzerinde yineleme yapan yöntemlerdir (ayrıca Map
ve Set
nesneleri gibi diğer numaralandırılabilirler üzerinde ). Daha yenidirler ve öznel olarak okunması daha kolay olan kod sağlarlar. Misal:
[].forEach((val, index)=>{
...
});
Faydaları:
- değişken kurulumu içermez (dizinin her bir öğesi üzerinde yinelenir)
- fonksiyonlar / ok fonksiyonları değişkeni bloğun kapsamına alır
Yukarıdaki örnekte val
, yeni oluşturulan fonksiyonun bir parametresi olacaktır. Böylece, val
döngüden önce çağrılan herhangi bir değişken , bittikten sonra değerlerini tutacaktır.
- kodun ne yaptığını belirlemek daha kolay olabileceğinden öznel olarak daha sürdürülebilir - bir numaralandırılabilir üzerinde yineleniyor; bir for-döngü herhangi bir sayıda döngü şeması için kullanılabilirken
Verim
Performans, öngörülebilirlik veya yaklaşım söz konusu olduğunda genellikle biraz deneyim gerektiren karmaşık bir konudur. Ne kadar optimizasyon gerekebileceğini önceden (geliştirme sırasında) belirlemek için, bir programcının problem vakasıyla ilgili geçmiş deneyimleri ve olası çözümleri iyi bir şekilde anlaması gerekir.
Bazı durumlarda jQuery'nin kullanılması bazen çok yavaş olabilir (deneyimli bir geliştirici bunu biliyor olabilir), diğer zamanlarda sorun olmayabilir, bu durumda kütüphanenin tarayıcılar arası uyumluluğu ve diğer işlevleri gerçekleştirme kolaylığı (örn. AJAX, olay işleme), kazanılan geliştirme (ve bakım) süresine değer.
Diğer bir örnek, performans ve optimizasyon her şey olsaydı, makine veya montajdan başka kod olmazdı. Açıkçası, her biri kendi ödünleşimlerine sahip birçok farklı yüksek seviyeli ve düşük seviyeli dil olduğu için durum böyle değil. Bu ödünler arasında uzmanlaşma, geliştirme kolaylığı ve hızı, bakım kolaylığı ve hızı, optimize edilmiş kod, hatasız kod vb. Bulunur, ancak bunlarla sınırlı değildir.
Yaklaşmak
Bir şeyin optimize edilmiş kod gerektirip gerektirmeyeceğini tam olarak anlamıyorsanız, genellikle önce bakımı yapılabilir bir kod yazmak iyi bir kuraldır. Oradan, gerektiğinde daha fazla dikkat edilmesi gereken şeyleri test edebilir ve tam olarak belirleyebilirsiniz.
Bununla birlikte, belirli bariz optimizasyonlar genel uygulamanın bir parçası olmalı ve herhangi bir düşünce gerektirmemelidir. Örneğin, aşağıdaki döngüyü düşünün:
for (var i=0; i < arr.length; ++i ){}
Döngünün her yinelemesi için JavaScript, arr.length
her döngüde bir anahtar arama maliyetlendirme işlemlerini alıyor. Bunun olmaması için hiçbir sebep yok:
for (var i=0, n=arr.length; i < n; ++i){}
Bu aynı şeyi yapar, ancak yalnızca bir arr.length
kez alır , değişkeni önbelleğe alır ve kodunuzu optimize eder.