Giriş gecikmesinin ne olduğunu öğrenin ve daha hızlı etkileşim için gecikmeyi azaltma tekniklerini öğrenin.
Web'deki etkileşimler karmaşıktır ve tarayıcıda etkileşimi sağlamak için her türlü etkinlik gerçekleşir. Ancak bunların hepsinin ortak noktası, etkinlik geri çağırmalarının çalışmaya başlamasından önce bazı giriş gecikmeleri yaşamalarıdır. Bu kılavuzda, giriş gecikmesinin ne olduğunu ve web sitenizin etkileşimlerinin daha hızlı gerçekleşmesi için bu gecikmeyi en aza indirmek üzere neler yapabileceğinizi öğreneceksiniz.
Giriş gecikmesi nedir?
Giriş gecikmesi, kullanıcının bir sayfayla ilk kez etkileşime geçtiği andan (ör. ekrana dokunma, fareyle tıklama veya bir tuşa basma) etkileşimle ilgili etkinlik geri çağırmalarının çalışmaya başladığı ana kadar geçen süredir. Her etkileşim, bir miktar giriş gecikmesiyle başlar.

Giriş gecikmesinin bir kısmı kaçınılmazdır: İşletim sisteminin bir giriş etkinliğini tanıması ve tarayıcıya iletmesi her zaman biraz zaman alır. Ancak giriş gecikmesinin bu kısmı genellikle fark edilmez. Ayrıca sayfanın kendisinde, giriş gecikmesini soruna yol açacak kadar uzun hale getirebilecek başka şeyler de vardır.
Giriş gecikmesi hakkında düşünme
Genel olarak, web sitenizin kullanıcının cihazından bağımsız olarak Interaction to Next Paint (INP) metriğinin "iyi" eşiğini aşma şansını artırmak için etkileşimin her bir bölümünü mümkün olduğunca kısa tutmak istersiniz. Giriş gecikmesini kontrol altında tutmak, bu eşiği karşılamanın yalnızca bir parçasıdır.
Bu nedenle, INP'nin "iyi" eşiğini karşılamak için mümkün olan en kısa giriş gecikmesini hedeflemeniz gerekir. Ancak giriş gecikmelerini tamamen ortadan kaldıramayacağınızı unutmayın. Kullanıcılar sayfanızla etkileşime geçmeye çalışırken aşırı ana iş parçacığı çalışmasından kaçındığınız sürece giriş gecikmeniz, sorunları önlemek için yeterince düşük olmalıdır.
Giriş gecikmesini en aza indirme
Daha önce de belirtildiği gibi, bazı giriş gecikmeleri kaçınılmazdır ancak diğer yandan bazı giriş gecikmeleri önlenebilir. Uzun giriş gecikmeleri yaşıyorsanız dikkate alabileceğiniz bazı unsurlar aşağıda açıklanmıştır.
Aşırı ana iş parçacığı çalışması başlatan yinelenen zamanlayıcılardan kaçının
JavaScript'te giriş gecikmesine katkıda bulunabilecek, yaygın olarak kullanılan iki zamanlayıcı işlevi vardır: setTimeout
ve setInterval
. İkisi arasındaki fark, setTimeout
'ün belirli bir zamanda çalışacak şekilde geri çağırma planlamasıdır. Öte yandan setInterval
, geri çağırma işlevini n milisaniyede bir veya zamanlayıcı clearInterval
ile durdurulana kadar sürekli olarak çalışacak şekilde planlar.
setTimeout
, kendi başına sorunlu değildir. Hatta uzun görevlerden kaçınmanıza yardımcı olabilir. Ancak bu durum, zaman aşımının ne zaman gerçekleştiğine ve zaman aşımı geri çağırma işlevi çalıştırıldığında kullanıcının sayfayla etkileşim kurmaya çalışıp çalışmadığına bağlıdır.
Ayrıca setTimeout
, döngü içinde veya yinelemeli olarak çalıştırılabilir. Bu durumda, önceki iterasyon tamamlanana kadar sonraki iterasyonun planlanmaması tercih edilirse de setTimeout
daha çok setInterval
gibi davranır. Bu, döngünün setTimeout
her çağrıldığında ana iş parçacığına vereceği anlamına gelir. Ancak geri çağırma işlevinin aşırı çalışma yapmadığından emin olmanız gerekir.
setInterval
, belirli bir aralıklarla geri çağırma işlevi yürütür. Bu nedenle, etkileşimlerin önüne geçme olasılığı çok daha yüksektir. Bunun nedeni, kullanıcı etkileşimini engelleyebilecek tek seferlik bir geri çağırma olan tek bir setTimeout
çağrı örneğinin aksine, setInterval
'ın tekrar eden yapısının etkileşimin önüne geçme olasılığını çok daha yüksek hale getirmesidir. Bu da etkileşimin giriş gecikmesini artırır.

setInterval
çağrısı tarafından kaydedilen ve giriş gecikmesine katkıda bulunan bir zamanlayıcı. Eklenen giriş gecikmesi, etkileşim için etkinlik geri çağırmalarının normalden daha geç çalıştırılmasına neden olur.
Zamanlayıcılar birinci taraf kodunda gerçekleşiyorsa bunlar üzerinde kontrol sahibi olursunuz. Bu sayfalara ihtiyacınız olup olmadığını değerlendirin veya bu sayfalardaki çalışmaları mümkün olduğunca azaltmak için elinizden geleni yapın. Ancak üçüncü taraf komut dosyalarındaki zamanlayıcılar farklı bir konudur. Üçüncü taraf komut dosyalarının işlevleri genellikle sizin kontrolünüzde değildir. Üçüncü taraf kodundaki performans sorunlarını düzeltmek için genellikle ilgili üçüncü taraf komut dosyasının gerekli olup olmadığını belirlemek üzere paydaşlarla birlikte çalışmanız ve gerekliyse web sitenizde neden olabilecek performans sorunlarını düzeltmek için neler yapılabileceğini belirlemek üzere üçüncü taraf komut dosyası tedarikçisiyle iletişime geçmeniz gerekir.
Uzun görevlerden kaçının
Uzun giriş gecikmelerini azaltmanın bir yolu, uzun görevlerden kaçınmaktır. Etkileşimler sırasında ana iş parçacığının çalışmasını engelleyen aşırı ana iş parçacığı çalışması olduğunda, uzun görevlerin tamamlanma şansı bulamadan bu işlemler için giriş gecikmesi artar.

Bir görevde yaptığınız çalışma miktarını en aza indirmenin yanı sıra (her zaman ana iş akışında mümkün olduğunca az çalışma yapmaya çalışmalısınız) uzun görevleri bölerek kullanıcı girişine olan yanıt vermeyi artırabilirsiniz.
Etkileşim çakışmalarına dikkat edin
INP'yi optimize etmenin özellikle zor bir kısmı, çakışık etkileşimleriniz olmasıdır. Etkileşim çakışma, bir öğeyle etkileşim kurduktan sonra ilk etkileşimin sonraki kareyi oluşturma şansı bulamadan sayfayla başka bir etkileşim kurmanız anlamına gelir.

Etkileşim çakışmalarının kaynakları, kullanıcıların kısa süre içinde çok sayıda etkileşim yapması kadar basit olabilir. Bu durum, kullanıcılar çok kısa bir süre içinde çok sayıda klavye etkileşimi gerçekleştirebilecekleri form alanlarına yazarken ortaya çıkabilir. Bir önemli etkinlikle ilgili çalışma özellikle pahalıysa (ör. arka uca ağ isteklerinin gönderildiği yaygın otomatik tamamlama alanları durumunda) birkaç seçeneğiniz vardır:
- Belirli bir süre içinde bir etkinlik geri çağırma işlevinin kaç kez çalışacağını sınırlamak için girişleri debouncing yapabilirsiniz.
- Ana iş parçacığının
fetch
geri çağırma işlemlerini işlerken tıkanmaması için gidenfetch
isteklerini iptal etmek üzereAbortController
kullanın. Not:AbortController
örneğininsignal
özelliği, etkinlikleri iptal etmek için de kullanılabilir.
Çakışan etkileşimler nedeniyle giriş gecikmesinin artmasına neden olan bir diğer faktör de pahalı animasyonlar olabilir. Özellikle JavaScript'teki animasyonlar, çok sayıda requestAnimationFrame
çağrısı tetikleyebilir ve bu da kullanıcı etkileşimlerinin önüne geçebilir. Bu sorunu önlemek için, pahalı olabilecek animasyon karelerinin sıraya eklenmesini önlemek amacıyla mümkün olduğunda CSS animasyonlarını kullanın. Ancak bunu yaparsanız animasyonların ana iş parçacığında değil, esas olarak GPU ve kompozitör iş parçalarında çalışacağından birleştirilmemiş animasyonlardan kaçının.
Sonuç
Giriş gecikmeleri, etkileşimlerinizin yayınlanmasının çoğu zamanını temsil etmese de bir etkileşimin her bölümünün azaltabileceğiniz bir süreyi kapsadığını anlamanız önemlidir. Giriş gecikmesinin uzun olduğunu gözlemliyorsanız bu sorunu azaltma fırsatları vardır. Yinelenen zamanlayıcı geri çağırmalarından kaçınmak, uzun görevleri bölmek ve olası etkileşim çakışmalarının farkında olmak, giriş gecikmesini azaltmanıza yardımcı olabilir. Bu da web sitenizin kullanıcıları için daha hızlı etkileşim sağlar.
Erik Mclean tarafından Unsplash'tan alınan lokomotif resim.