Hem File System Access API hem de Origin Private File System API geliştiricilerin, kullanıcının cihazındaki dosyalara ve dizinlere erişmesine olanak tanır. İlki, geliştiricilerin normal, kullanıcı tarafından görülebilen dosya sisteminde okuma ve yazma yapmasına olanak tanır. İkincisi ise her sitenin kökenine özel olan ve belirli performans avantajları sunan, kullanıcıdan gizli özel bir dosya sistemi açar. Her iki durumda da geliştiricilerin dosyalar ve dizinlerle etkileşimde bulunma şekli, FileSystemHandle
nesneleri (daha somut şekilde, dosyalar için FileSystemFileHandle
ve dizinler için FileSystemDirectoryHandle
) aracılığıyla gerçekleşir. Şimdiye kadar, dosya sistemlerinden birinde bir dosya veya dizinde yapılan değişikliklerden haberdar olmak için bir tür anket yapılması ve lastModified
zaman damgasının ya da dosya içeriğinin karşılaştırılması gerekiyordu.
Chrome 129'dan itibaren kaynak denemesinde olan File System Observer API, bu durumu değiştirir ve değişiklikler olduğunda geliştiricilerin otomatik olarak uyarılmasına olanak tanır. Bu kılavuzda, özelliğin nasıl çalıştığı ve özelliğin nasıl deneyileceği açıklanmaktadır.
Kullanım alanları
Dosya sistemiyle ilgili olası değişikliklerden hemen haberdar edilmesi gereken uygulamalarda File System Observer API'yi kullanın.
- Bir projenin dosya sistemi ağacının bir temsilini gösteren web tabanlı entegre geliştirme ortamları (IDE'ler).
- Dosya sistemi değişikliklerini bir sunucuda senkronize eden uygulamalar. Örneğin, bir SQLite veritabanı dosyası.
- Bir çalışandan veya başka bir sekmeden dosya sistemi değişikliklerini ana iş parçacığına bildirmesi gereken uygulamalar.
- Görselleri otomatik olarak optimize etmek için bir kaynak dizinini gözlemleyen uygulamalar.
- Dosya değişikliğinin yeniden yüklemeyi tetiklediği HTML tabanlı slaytlar gibi, anında yeniden yükleme özelliğinden yararlanan deneyimler.
File System Observer API'yi kullanma
Özellik algılama
Dosya Sistemi Gözlemcisi API'sinin desteklenip desteklenmediğini görmek için aşağıdaki örnekte gösterildiği gibi bir özellik testi çalıştırın.
if ('FileSystemObserver' in self) {
// The File System Observer API is supported.
}
Dosya sistemi gözlemcisini başlatma
new FileSystemObserver()
işlevini çağırarak ve bağımsız değişken olarak bir callback
işlevi sağlayarak bir dosya sistemi gözlemcisi başlatın.
const observer = new FileSystemObserver(callback);
Bir dosyayı veya dizini gözlemlemeye başlama
Bir dosyayı veya dizini gözlemlemeye başlamak için FileSystemObserver
örneğinin asenkron observe()
yöntemini çağırın. Bu yönteme, bağımsız değişken olarak seçilen dosyanın veya dizinin FileSystemHandle
değerini sağlayın. Bir dizini gözlemlerken, dizine yapılan değişikliklerden yinelemeli olarak (yani dizinin kendisi ve tüm alt dizinleri ve dosyaları için) bilgilendirilmek isteyip istemediğinizi seçmenize olanak tanıyan isteğe bağlı bir options
bağımsız değişkeni vardır. Varsayılan seçenek, yalnızca dizinin kendisini ve doğrudan içinde bulunan dosyaları gözlemlemektir.
// Observe a file.
await observer.observe(fileHandle);
// Observe a directory.
await observer.observe(directoryHandle);
// Observe a directory recursively.
await observer.observe(directoryHandle, {recursive: true});
Geri çağırma işlevi
Dosya sisteminde değişiklik olduğunda, dosya sistemi değişikliği records
ve observer
'ın kendisi bağımsız değişken olarak bir geri çağırma işlevi çağrılır. Örneğin, ilgilendiğiniz tüm dosyalar silindiğinde gözlemcinin bağlantısını kesmek için observer
bağımsız değişkenini kullanabilirsiniz (Dosya sistemini gözlemlemeyi durdurma bölümüne bakın).
const callback = (records, observer) => {
for (const record of records) {
console.log('Change detected', record);
}
};
Dosya sistemi değişiklik kaydı
Her dosya sistemi değişiklik kaydı aşağıdaki yapıya sahiptir. Tüm alanlar salt okunur.
root
(birFileSystemHandle
):FileSystemObserver.observe()
işlevine iletilen tutamaç.changedHandle
(aFileSystemHandle
): Dosya sistemi değişikliğinden etkilenen herkese açık tanımlayıcı.relativePathComponents
(Array
):changedHandle
öğesininroot
'e göre yolu.type
(aString
): Değişikliğin türü. Aşağıdaki türler kullanılabilir:"appeared"
: Dosya veya dizin oluşturuldu ya daroot
klasörüne taşındı."disappeared"
: Dosya veya dizin silindi ya daroot
dışına taşındı."modified"
: Dosya veya dizin değiştirildi."moved"
: Dosya veya dizin,root
içinde taşındı."unknown"
: Bu, sıfır veya daha fazla etkinliğin kaçırıldığını gösterir. Geliştiriciler, bu yanıta yanıt olarak izlenen dizini yoklamalıdır."errored"
: Gözlem artık geçerli değil. Bu durumda, dosya sistemini gözlemlemeyi durdurabilirsiniz.
relativePathMovedFrom
(birArray
, isteğe bağlı): Taşınan herkese açık kullanıcı adının önceki konumu. Yalnızcatype
"moved"
olduğunda kullanılabilir.
Bir dosyayı veya dizini gözlemlemeyi durdurma
Bir FileSystemHandle
'yi gözlemlemeyi durdurmak için unobserve()
yöntemini çağırın ve bağımsız değişken olarak herkese açık kimliği iletin.
observer.unobserve(fileHandle);
Dosya sistemini gözlemlemeyi durdurma
Dosya sistemini gözlemlemeyi durdurmak için FileSystemObserver
örneğinin bağlantısını aşağıdaki gibi kesin.
observer.disconnect();
API'yi deneyin
File System Observer API'yi yerel olarak test etmek için about:flags
öğesinde #file-system-observer
işaretini ayarlayın. API'yi gerçek kullanıcılarla test etmek için kaynak denemesine kaydolun ve Chrome Kaynak Denemeleri kılavuzundaki talimatları uygulayın. Kaynak denemesi, Chrome 129 (11 Eylül 2024) ile Chrome 134 (26 Şubat 2025) arasında geçerli olacaktır.
Demo
File System Observer API'nin nasıl çalıştığını yerleşik demoda görebilirsiniz. Kaynak koduna göz atın veya Glitch'te demo kodunu remiksleyin. Demo, gözlemlenen bir dizinde rastgele dosya oluşturur, siler veya değiştirir ve etkinliğini uygulama penceresinin üst kısmına kaydeder. Ardından, uygulama penceresinin alt kısmında değişiklikler gerçekleştikçe bunları günlüğe kaydeder. Bu makaleyi File System Observer API'yi desteklemeyen bir tarayıcıda okuyorsanız demonun ekran görüntüsüne bakın.
Geri bildirim
File System Observer API'nin şekliyle ilgili geri bildiriminiz varsa WHATWG/fs deposundaki 123 numaralı soruna yorum ekleyin.
İlgili bağlantılar
- Açıklayıcı
- TAG incelemesi
- Mozilla Standartları Konumlandırması
- WebKit Standards Konumu
- ChromeStatus
- Chromium hatası
Teşekkür ederiz
Bu doküman Daseul Lee, Nathan Memmott, Etienne Noël ve Rachel Andrew tarafından incelendi.