# Siteye Video Eklerken Sayfa Hızını Nasıl Korudum?

Yazan: Akın SAYLIK

# HTML <video> Etiketi Neden Sayfa Yüklemesini Yavaşlatır? (ve Çözümü)

Bir siteye video eklemek istediğinizde aklınıza gelen ilk çözüm muhtemelen doğrudan `<video>` etiketi kullanmak. Ancak bu yaklaşımın gizli bir bedeli var: tarayıcı sayfayı açar açmaz video dosyasını arka planda indirmeye başlar.

## Ortam

Statik bir HTML sitesi: harici framework yok, sadece HTML, CSS ve küçük bir JavaScript parçası. Sitenin açılış hızı önemli çünkü mobil bağlantılarda bile iyi performans göstermesi gerekiyor.

## Sorun

Siteye bir tanıtım videosu eklemek gerekiyordu. Klasik `<video src=”tanitim.mp4″>` yöntemiyle eklediğimde tarayıcı, kullanıcı videoyu hiç açmasa bile dosyayı yüklemeye başlıyor.

Örneğin, 15 MB’lık, 1 dakikalık bir MP4 videosunu doğrudan <video> etiketiyle eklediğinizde, sayfa yüklenirken mobil bir kullanıcı en az 1-2 MB’lık meta veri ve ön yükleme verisini hemen tüketir. Sayfa açılış süresi (özellikle Time to Interactive – TTI), bu gereksiz veri transferi yüzünden saniyelerce uzayabilir. Bu, yavaş bağlantılarda sitenin hiç açılmaması anlamına gelebilir.

Kullanıcının büyük çoğunluğu videoyu izlemeyecek. Neden hepsinin bant genişliğini ve zamanını harcayalım?

## Çözüm: Thumbnail + Tıklayınca Yükle

Yaklaşım basit:

– Sayfa açıldığında video yerine bir **thumbnail resmi** ve üzerinde bir **play butonu** göster.

– Kullanıcı tıkladığında thumbnail’ı gizle, video elementini göster ve oynat.

– Video elementi baştan sayfada var, ama `preload=”none”` sayesinde tarayıcı onu indirmiyor.

HTML kısmı:

“`html

<div id="video-wrapper" style="position: relative; cursor: pointer;">
    <!-- Sayfa açılışında bu görünür -->
    <img id="video-thumbnail" src="thumbnail.jpg" style="width: 100%;">
    <!-- Play butonu overlay -->
    <div id="play-btn" style="position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;">
        <div style="width: 80px; height: 80px; background: #3b82f6; border-radius: 50%; display: flex; align-items: center; justify-content: center;">
            <i class="fas fa-play" style="color: white; font-size: 1.8rem; margin-left: 6px;"></i>
        </div>
    </div>
    <!-- Video başta yüklenmez -->
    <video id="promo-video" style="display: none; width: 100%;" controls preload="none">
        <source src="tanitim.mp4" type="video/mp4">
    </video>
</div>

“`

JavaScript kısmı:

“`javascript

document.getElementById('video-wrapper').addEventListener('click', function () {
    document.getElementById('video-thumbnail').style.display = 'none';
    document.getElementById('play-btn').style.display = 'none';
    const video = document.getElementById('promo-video');
    video.style.display = 'block';
    video.play();
});

“`

## Neden `preload=”none”` Yeterli?

Tarayıcılar `<video>` etiketini gördüklerinde varsayılan olarak `preload=”metadata”` davranışını benimser — yani en azından dosyanın boyutunu ve süresini öğrenmek için başlangıç kısmını indirir. `preload=”none”` bu davranışı tamamen kapatır.

`src` attribute’u baştan yazılmış olsa bile `preload=”none”` varken tarayıcı tıklanana kadar tek byte indirmiyor.

## Alternatif: src’yi Tıklamada Ata

Daha katı bir yaklaşım: video elementinin `src`’sini JavaScript ile tıklama anında atamak.

“`javascript

video.querySelector(‘source’).setAttribute(‘src’, ‘tanitim.mp4’);

video.load();

video.play();

“`

Bu yöntemde video dosyasının adresi DOM’da bile yazmıyor, tarayıcının önceden tahmin edip yüklemesi (prefetch) de engellenmiş oluyor. Paranoyak ama emin.

## Öğrenilen Dersler

— `<video>` etiketini doğrudan koymak basit görünür ama bant genişliği maliyetini ziyaretçiye yüklüyor.

— `preload=”none”` ile thumbnail kombinasyonu çoğu senaryo için yeterli; ekstra güvenlik için `src`’yi JavaScript ile atayabilirsiniz.

— Kullanıcıların büyük çoğunluğu bir içeriği tüketmeyecekse, o içeriği tüketene kadar yüklememek iyi bir kural.

— Bu teknik video için geçerli ama aynı mantık büyük resimler, haritalar veya iframe’ler için de uygulanabilir.

**HTML, JavaScript, Web Performansı, Lazy Load, Video**

Yorum bırakın

Scroll to Top