Kaldırma etkinliğini kullanımdan kaldırma

unload etkinliğinin desteği, varsayılan ayar kademeli olarak değiştirilerek sonlandırılacak. Böylece, bir sayfa unload işleyicilerini yeniden etkinleştirmeyi açıkça seçmediği sürece unload işleyicileri sayfalarda tetiklenmeyi durduracak.

Kullanımdan kaldırma zaman çizelgesi

Geri-ileri önbellek uygulama niyetimizi duyurduğumuz Ocak 2019'dan itibaren kaldırma davranışının değişebileceğini belirtmiştik. Uygulama çalışmalarına paralel olarak geniş kapsamlı erişim elde ettik ve bu sayede kaldırma kullanımında önemli bir düşüş elde ettik. Bu bilgilendirme çalışmasına ek olarak, Chrome 115'te unload işlevinin kullanımdan kaldırılmasının etkisini test etmenin yollarını da sunmaya başladık:

Bu tanıtım ve deneme aşamalarının ardından desteğinin sonlandırılacağının duyurulması aşağıdaki şekilde gerçekleşecektir:

  • En popüler 50 sitede (bu makalenin yazıldığı tarih itibariyle referans) unload işlevinin kademeli olarak devre dışı bırakılacağı kapsamlı bir aşama.
    • Chrome 120'den itibaren kullanıcıların %1'inden başlayarak (Kasım 2023'ün sonu).
    • 2024'ün 3. çeyreğinin sonuna kadar kullanıcıların %100'ü
  • Ayrıca, 2024'ün 3. çeyreğinden itibaren, kaldırma işleminin herhangi bir sitede kademeli olarak sona ereceği genel bir aşamaya başlamayı planlıyoruz. Bu aşama, 2025'in 1. çeyreğinin sonuna kadar kullanıcıların% 1'i başlayıp kullanıcıların% 100'üyle sona erecek.

Bu yumuşak desteği sonlandırma zaman çizelgesinin, yükleme dışı bırakma özelliğinden geçiş için yeterli süre sağlamaması ihtimaline karşı devre dışı bırakma seçenekleri menüsü de sunduğumuzu unutmayın. Amacımız, bu kapsam dışında kalmayı seçen özelliklerin kaldırılacağı veya azaltılacağı son aşamanın zaman çizelgesini (yük boşaltmanın kullanımdan kaldırılması) bildirmek için bu desteği sonlandırmayı kullanmaktır.

Boşaltma desteğinin sonlandırılmasıyla ilgili zaman çizelgesi.

Arka plan

unload, doküman kaldırılırken tetiklenecek şekilde tasarlandı. Teorik olarak, kullanıcı bir sayfadan ayrıldığında veya oturum sonu geri çağırma olarak kod çalıştırmak için kullanılabilir.

Bu etkinliğin en sık kullanıldığı senaryolar şunlardır:

  • Kullanıcı verilerini kaydetme: Sayfadan ayrılmadan önce verileri kaydedin.
  • Temizleme görevlerini gerçekleştirme: Sayfayı terk etmeden önce açık kaynakları kapatma.
  • Analizler gönderme: Oturum sonunda kullanıcı etkileşimleriyle ilgili verileri gönderme.

Ancak unload etkinliği son derece güvenilir değildir.

Masaüstü Chrome ve Firefox'ta unload oldukça güvenilirdir ancak bfcache (geri/ileri önbelleği) kullanımını engelleyerek sitenin performansını olumsuz etkiler.

Sekmeler sıklıkla arka plana alınıp kapatıldığı için unload mobil tarayıcılarda genellikle çalışmaz. Bu nedenle tarayıcılar, mobil cihazlarda unload yerine bfcache'e öncelik vermeyi tercih eder. Bu da tarayıcıların daha da güvenilmez olmasını sağlar. Safari masaüstünde de bu davranışı kullanır.

Chrome ekibi, masaüstünde unload bfcache'a öncelik veren mobil modelin daha önce Chrome'da (ve Firefox'ta) makul ölçüde güvenilir olmasına rağmen bu mobil modelde de güvenilmez olmasını bozacağına inanıyor. Bunun yerine Chrome'un amacı, unload etkinliğini tamamen kaldırmaktır. Bu tarihe kadar, desteğin sonlandırılmasını açıkça devre dışı bırakanlar masaüstünde bu özelliği güvenle kullanabilir.

unload etkinliğinin desteği neden sonlandırılıyor?

unload desteğinin sonlandırılması, içinde yaşadığımız web'in çok daha geniş bir şekilde tanınması için önemli bir adımdır. unload etkinliği, uygulama yaşam döngüsü üzerinde yanlış bir kontrol hissi verir. Bu durum, modern bilgisayar dünyasında web'e göz atma şeklimizle giderek daha alakasız hale geliyor.

Mobil işletim sistemleri, belleği korumak için web sayfalarını sık sık donduruyor veya kaldırıyor. Masaüstü tarayıcılar da aynı nedenlerle artık bunu giderek daha fazla yapıyor. İşletim sistemi müdahaleleri olmasa bile, kullanıcılar resmi olarak "sayfalardan ayrılmadan" eski sekmeleri sık sık sekme değiştirir ve kapatır.

unload etkinliğinin kullanımdan kaldırılması, web geliştiricileri olarak paradigmamızın gerçek dünyayla eşleştiğinden emin olmamız ve artık geçerliliğini yitirmiş eski kavramlara (eğer geçerliydilerse) bağlı kalmamamız gerektiğinin kabulü anlamına gelir.

unload etkinliklerine alternatifler

unload yerine şunları kullanmanız önerilir:

  • visibilitychange: Bir sayfanın görünürlüğünün ne zaman değiştiğini belirlemek için. Bu etkinlik, kullanıcı sekme değiştirdiğinde, tarayıcı penceresini en aza indirdiğinde veya yeni bir sayfa açtığında gerçekleşir. Uygulama ve kullanıcı verilerini kaydetmek için son güvenilir zamanı hidden durumunu göz önünde bulundurun.
  • pagehide: Kullanıcının sayfadan ne zaman ayrıldığını belirlemek için. Bu etkinlik, kullanıcı sayfadan ayrıldığında, sayfayı yeniden yüklediğinde veya tarayıcı penceresini kapattığında gerçekleşir. Sayfa yalnızca küçültüldüğünde veya başka bir sekmeye geçtiğinde pagehide etkinliği tetiklenmez. pagehide, bir sayfayı geri-ileri önbelleğe alınmaya uygun hale getirmediğinden, bu etkinlik tetiklendikten sonra sayfanın geri yüklenebileceğini unutmayın. Bu etkinlikte herhangi bir kaynağı temizliyorsanız sayfa geri yükleme sırasında bu kaynakların geri yüklenmesi gerekebilir.

beforeunload etkinliğinin, iptal edilebilir bir etkinlik olması nedeniyle unload etkinliğinden biraz farklı bir kullanım alanı vardır. Bu mesaj, genellikle kullanıcıları sayfadan ayrılırken kaydedilmemiş değişiklikler konusunda uyarmak için kullanılır. Arka plan sekmesi kapatılırsa tetiklenmeyeceği için bu etkinlik de güvenilir değildir. beforeunload'ün kullanımını sınırlamanız ve yalnızca koşullu olarak eklemeniz önerilir. Bunun yerine, çoğu unload değişimi için yukarıdaki etkinlikleri kullanın.

Daha ayrıntılı bilgi için unload işleyicinin hiçbir zaman kullanılmamasıyla ilgili bu öneriye bakın.

unload kullanımını algıla

unload etkinliğinin sayfalarda nerede göründüğünü bulmanıza yardımcı olacak çeşitli araçlar vardır. Bu sayede siteler, bu etkinliği kendi kodlarında veya kitaplıklar aracılığıyla kullanıp kullanmadıklarını ve bu nedenle yakında kullanımdan kaldırılacak olan bu durumdan etkilenip etkilenmeyeceklerini keşfedebilir.

Chrome Geliştirici Araçları

Chrome Geliştirici Araçları, unload işleyicisinin kullanımı da dahil olmak üzere sayfanızı geri/ileri önbelleğe almaya uygun hale getirmenizi engelleyebilecek sorunları belirlemenize yardımcı olmak için bir back-forward-cache denetimi içerir.

Geri/ileri önbelleğini test etmek için aşağıdaki adımları uygulayın:

  1. Sayfanızda Geliştirici Araçları'nı açın, ardından Uygulama > Arka plan hizmetleri > Geri/ileri önbelleği'ne gidin.

  2. Geri-ileri önbelleği test et'i tıklayın. Chrome otomatik olarak chrome://terms/ adresine gidip sayfanıza geri döner. Alternatif olarak, tarayıcının geri ve ileri düğmelerini de tıklayabilirsiniz.

Sayfanız geri/ileri önbelleğe alınmaya uygun değilse Geri/ileri önbelleğe alma sekmesinde sorunların listesi gösterilir. İşlenebilir bölümünde, unload'yi kullanıp kullanmadığınızı görebilirsiniz:

Bir boşaltma işleyicinin kullanıldığını gösteren Chrome Geliştirici Araçları Geri/ileri önbelleği test aracı

Reporting API

Reporting API, web sitesi kullanıcılarınız tarafından unload kullanımının algılanması için salt okunur bir izin politikasıyla birlikte kullanılabilir.

Daha fazla bilgi için Yüklenenleri bulmak için Reporting API'yi kullanma bölümüne bakın.

Bfcache notRestoredReasons API'si

PerformanceNavigationTiming sınıfına eklenen notRestoredReasons özelliği, dokümanların gezinme sırasında bfcache kullanmasının engellenip engellenmediğini ve bunun nedenini bildirir. Kullanım talimatlarını burada bulabilirsiniz. Aşağıda, mevcut bir unload işleyicisinin yanıt nesnesi uyarısının nasıl göründüğüne ilişkin bir örnek verilmiştir:

{
   children: [],
   id: null,
   name: null,
   reasons: [
     {"reason", "unload-handler"}
   ],
   src: null,
   url: "https://www.example.com/page/"
}

unload'a erişimi kontrol etme

Chrome, unload etkinliğinin desteğini kademeli olarak sonlandıracak. Bu süre zarfında, bu davranışı kontrol etmek ve desteğin sonlandırılmasına hazırlanmak için farklı araçlar kullanabilirsiniz. Bu tekniklere uzun vadede güvenmemeli ve en kısa sürede alternatiflere geçmeyi planlamalısınız.

Aşağıdaki seçenekler, unload işleyicileri etkinleştirerek veya devre dışı bırakarak sitenizin bunlar olmadan nasıl çalışacağını test etmenize olanak tanır. Böylece, yakında yapılacak kullanımdan kaldırma işlemine hazırlanabilirsiniz. Farklı politika türleri vardır:

  • İzin Politikası: Site sahiplerinin, HTTP üstbilgilerini kullanarak site veya tek bir sayfa düzeyinde özelliklere erişimi kontrol etmesine olanak tanıyan bir platform API'sidir.
  • Kuruluş politikaları: BT yöneticilerinin Chrome'u kuruluşları veya işletmeleri için yapılandırabileceği araçlar. Google Yönetici Konsolu gibi bir yönetici paneli üzerinden yapılandırılabilirler.
  • Chrome işaretleri: Bu, geliştiricilerin unload desteği sonlandırma ayarını değiştirerek çeşitli sitelerdeki etkiyi test etmesine olanak tanır.

İzin Politikası

Sitelerin unload işleyicilerini kullanmayı devre dışı bırakmasına ve site performansını iyileştirmek için bfcache'ten hemen yararlanmasına olanak tanımak amacıyla Chrome 115'ten itibaren bir izin politikası eklendi. Siteniz için bu ayarı nasıl yapacağınızla ilgili bu örneklere bakın. Bu sayede siteler, unload desteğinin sonlandırılmasından önce hazırlık yapabilir.

Chrome, unload işleyicilerinin gelecekte tetiklenmemesi için varsayılan ayarı değiştirdiğinden, bu Chrome 117'de genişletilecek ve sitelerin tam tersini yapmasına, ayrıca unload işleyicilerini tetiklemeye devam etmeyi etkinleştirmesine olanak tanıyacak. Kaldırma işleyicilerin siteniz için etkinleşmesine nasıl izin vereceğinize ilişkin bu örneklere bakın. Bu etkinleştirme işlemi sonsuza kadar geçerli olmayacak ve sitelerin unload işleyicilerinden geçiş yapmasına zaman tanımak için kullanılmalıdır.

Enterprise politikası

Doğru şekilde çalışması için unload etkinliğine bağlı yazılımlara sahip olan kuruluşlar, kontrollerindeki cihazlarda desteğin kademeli olarak sonlandırılmasını önlemek için ForcePermissionPolicyUnloadDefaultEnabled politikasını kullanabilir. Bu politika etkinleştirildiğinde unload, tüm kaynaklar için varsayılan olarak etkin olmaya devam eder. Ancak sayfalar isterse daha katı bir politika belirleyebilir. İzinler Politikası kapsamı dışında kalma seçeneği gibi bu da potansiyel önemli değişiklikleri azaltmaya yönelik bir araçtır ancak süresiz olarak kullanılmamalıdır.

Chrome işaretleri ve komut satırı anahtarları

Enterprise politikasının yanı sıra, Chrome işaretleri ve komut satırı anahtarları aracılığıyla desteğin sonlandırılmasını tek tek kullanıcılar için devre dışı bırakabilirsiniz:

chrome://flags/#deprecate-unload Bu değeri enabled olarak ayarlamak, desteğin sonlandırılmasına ilişkin varsayılan ayarı öne çıkarır ve unload işleyicilerinin tetiklenmesini engeller. İzinler Politikası aracılığıyla site bazında geçersiz kılınmaya devam edebilirler ancak varsayılan olarak etkin olmaya devam ederler.

Bu ayarlar, komut satırı anahtarlarıyla da kontrol edilebilir.

Seçenek karşılaştırması

Aşağıdaki tabloda, daha önce bahsedilen seçeneklerin farklı kullanımları özetlenmiştir:

Kullanımdan kaldırma tarihini öne alma Desteğin sonlandırılması süreci (istisnalar dahil) Taşıma işlemi için zaman kazanmak amacıyla desteğin sonlandırılmasını önleme
İzinler Politikası
(sayfalar/siteler için geçerlidir)
Evet Evet Evet
Kurumsal politika
(cihazlar için geçerlidir)
Hayır Hayır Evet
Chrome flag'leri
(her kullanıcı için geçerlidir)
Evet Hayır Hayır
Chrome komut satırı anahtarları
(tek tek kullanıcılar için geçerlidir)
Evet Hayır Evet

Sonuç

unload işleyicilerin desteği sonlandırılıyor. Uzun süredir güvenilir değiller ve bir dokümanın imha edildiği her durumda tetiklenmeleri garanti edilmiyor. Ayrıca, unload işleyicileri bfcache ile uyumlu değildir.

Şu anda unload işleyicilerini kullanan siteler, mevcut unload işleyicilerini test ederek, kaldırarak veya taşıyarak ya da son çare olarak daha fazla zamana ihtiyaç duyulması halinde desteğin sonlandırılmasını erteleyerek yaklaşan bu kullanımdan kaldırma sürecine hazırlanmalıdır.

Teşekkür ederiz

Bu makalenin incelenmesine yardımcı olan Kenji Baheux, Fergal Daly, Adriana Jara ve Jeremy Wagner'a teşekkür ederiz.

Unsplash'ta Anja Bauermann tarafından oluşturulan hero resim