script etiketlerini HTML’de nereye koymalıyız?

JavaScript’i bir HTML belgesine yerleştirirken, <script> etiketlerini koymanın en uygun yeri neresidir?  Bir tarayıcı <script> etiketi bulunan bir web sitesini yüklediğinde şunlar olur : HTML sayfasını getirir (örn.

İlişkili olduğu konular : html, javascript

JavaScript’i bir HTML belgesine yerleştirirken, <script> etiketlerini koymanın en uygun yeri neresidir? 

Bir tarayıcı <script> etiketi bulunan bir web sitesini yüklediğinde şunlar olur :

  1. HTML sayfasını getirir (örn. index.html)
  2. HTML’yi ayrıştırmaya başlar
  3. Ayrıştırıcı harici bir dosyaya başvuran bir <script> etiketiyle karşılaşır .
  4. Tarayıcı script dosyasını ister. Bu sırada ayrıştırıcı sayfanızdaki diğer HTML’yi ayrıştırmayı engeller ve durdurur.
  5. Bir süre sonra komut dosyası indirilir ve ardından yürütülür.
  6. Ayrıştırıcı HTML belgesinin geri kalanını ayrıştırmaya devam eder.

4. Adım, kötü bir kullanıcı deneyimine neden olur. Web siteniz, tüm komut dosyalarını indirene kadar temel olarak yüklenmeyi durdurur. Kullanıcıların nefret ettiği bir şey varsa, o da bir web sitesinin yüklenmesini beklemektir.

Bu neden oluyor?

Herhangi bir komut dosyası document.write() aracılığıyla kendi HTML’sini veya diğer DOM öğelerini ekleyebilir. Bu, ayrıştırıcının belgenin geri kalanını güvenli bir şekilde ayrıştırmadan önce komut dosyası indirilip çalıştırılana kadar beklemesi gerektiği anlamına gelir. Sonuçta, komut dosyası belgeye kendi HTML’sini eklemiş olabilir.

Ancak, çoğu JavaScript geliştiricisi artık belge yüklenirken DOM üzerinde işleme yapmıyor. Bunun yerine, değişiklik yapmadan önce belgenin yüklenmesini bekliyorlar. Örneğin:

<!-- index.html -->
<html>
    <head>
        <title>My Page</title>
        <script src="my-script.js"></script>
    </head>
    <body>
        <div id="user-greeting">Welcome back, user</div>
    </body>
</html>

Javascript:

// my-script.js
document.addEventListener("DOMContentLoaded", function() { 
    // bu fonksiyon dom hazır olunca calısır - dokuman hazır olunca
    document.getElementById("user-greeting").textContent = "Welcome back, Bart";
});

Eski öneri

Bu sorunu çözmeye yönelik eski yaklaşım, <script>‘i  <body> etiketinin altına koymaktı, çünkü bu, ayrıştırıcının sonuna kadar engellenmemesini sağlar.

Ancak, bu yaklaşımın da kendine özgü sorunları var: tarayıcı, tüm belge ayrıştırılana kadar komut dosyalarını indirmeye başlayamaz. Büyük komut dosyaları ve stil sayfalarına sahip daha büyük web siteleri için komut dosyasını mümkün olan en kısa sürede indirebilmek performans için çok önemlidir. Web siteniz 2 saniye içinde yüklenmezse, insanlar başka bir web sitesine gidecektir.

Optimal bir çözümde, tarayıcı, belgenizin geri kalanını ayrıştırırken aynı zamanda komut dosyalarınızı mümkün olan en kısa sürede indirmeye başlayacaktır.

modern yaklaşım

Günümüzde tarayıcılar betiklerdeki async and defer özniteliklerini destekler. Bu öznitelikler, tarayıcıya, komut dosyaları indirilirken ayrıştırmaya devam etmenin güvenli olduğunu söyler.

zaman uyumsuz – async

<script src="path/to/script1.js" async></script>
<script src="path/to/script2.js" async></script>

async özniteliğine sahip komut dosyaları, zaman uyumsuz olarak yürütülür. Bu, betiğin indirildiğinde çalıştırılmasını söyler – bu sırada da tarayıcıyı engellenmeden yürütme işlemine devam eder. Bu aynı zamanda, komut dosyası 2’nin komut dosyası 1’den önce indirilip yürütülmesinin de mümkün olduğu anlamına gelir.

http://caniuse.com/#feat=script-async’e göre , tüm tarayıcıların %97,78’i bunu destekler.

ertele – defer

<script src="path/to/script1.js" defer></script>
<script src="path/to/script2.js" defer></script>

erteleme özniteliğine sahip komut dosyaları sırayla yürütülür (yani önce komut dosyası 1, ardından komut dosyası 2). Bu da tarayıcıyı engellemez.

Zaman uyumsuz komut dosyalarının aksine, erteleme komut dosyaları yalnızca tüm belge yüklendikten sonra yürütülür.

http://caniuse.com/#feat=script-defer’e göre , tüm tarayıcıların %97,79’u bunu desteklemektedir. %98.06 en azından kısmen destekliyor.

Tarayıcı uyumluluğu hakkında önemli bir not: bazı durumlarda IE <= 9, ertelenmiş komut dosyalarını düzensiz çalıştırabilir. Bu tarayıcıları desteklemeniz gerekiyorsa, lütfen önce bunu okuyun !

(Daha fazla bilgi edinmek ve zaman uyumsuz, erteleme ve normal komut dosyaları arasındaki farkların gerçekten yararlı görsel temsillerini görmek için referanslar bölümündeki ilk 2 bağlantıyı kontrol edin)

Çözüm

Şu anki son teknoloji, komut dosyalarını <head> etiketi altına koymak ve async veya defer niteliklerini kullanmaktır. Bu, komut dosyalarınızın tarayıcınızı engellemeden en kısa sürede indirilmesini sağlar.

İşin iyi yanı, web sitenizin bu özellikleri desteklemeyen tarayıcıların %2’sinde doğru şekilde yüklenmesi ve diğer %98’inde ise hızlı çalışmasıdır.

Referanslar

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, HTML, Javascript

Okumaya devam et!

jQuery ile checkbox’ın seçili olduğunu nasıl kontrol ederim?

Onay kutusunun checked özelliğini denetlemek ve jQuery kullanarak denetlenen özelliğe göre bir eylem gerçekleştirmek istiyorsunuz.

HTML sayfasından yönlendirme nasıl yapılır?

Bunun için birden fazla yöntem bulunuyor: 1.

JavaScript ile bir öğenin sınıfını nasıl değiştirebilirim?

JavaScript kullanarak bir HTML öğesinin sınıfını nasıl değiştirebiliriz? Veya onclick gibi bir eyleme yanıt olarak class’ı nasıl değiştirebiliriz? Sınıfları değiştirmek için modern HTML5 Teknikleri Modern tarayıcılar, bir kitaplığa ihtiyaç duymadan sınıfları değiştirmeyi kolaylaştıran yöntemler sağlayan classList’i eklediler: Ne yazık ki, bunlar v10’dan önce Internet Explorer’da çalışmaz, ancak giderek daha fazla desteklendiğini söyleyebiliriz.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.