JavaScript ile Yerel Depolama Kullanımı Nasıl Yapılır?
Web geliştirme dünyasında, tarayıcı üzerinde veri saklama ihtiyacı modern uygulamaların temel taşlarından biridir. JavaScript ile yerel depolama (Local Storage), kullanıcı oturumlarını yönetmek, tercihlerini hatırlamak veya çevrimdışı çalışabilen uygulamalar geliştirmek için kullanılan en etkili yöntemlerden biridir. Bu rehberde, tarayıcı tabanlı veri depolama teknolojilerini en güncel standartlarla, adım adım öğreneceğiz.
Bu makale, web geliştirme temellerini bilen ancak tarayıcı içi veri kalıcılığını (persistence) profesyonel düzeyde yönetmek isteyen geliştiriciler için hazırlanmıştır. 2026 yılı standartlarına uygun olarak, verilerin nasıl güvenli bir şekilde yazılacağını, okunacağını ve yönetileceğini detaylı kod örnekleriyle inceleyeceğiz.
Ön Hazırlık ve Gereksinimler
JavaScript ile yerel depolama işlemleri yapabilmek için herhangi bir ek kütüphane kurulumuna veya sunucu tarafı yapılandırmasına ihtiyacınız yoktur. Modern tüm tarayıcılar (Chrome, Firefox, Edge, Safari) Web Storage API desteği ile gelir.
- Modern Bir Tarayıcı: Güncel bir tarayıcı sürümü kullanmanız yeterlidir.
- Kod Editörü: VS Code gibi bir editör ve tarayıcı "Geliştirici Araçları" (F12) hata ayıklama için gereklidir.
- Temel Bilgi: JavaScript nesneleri ve JSON formatı hakkında temel bilgi sahibi olmanız süreci hızlandıracaktır.
Local Storage Nedir ve Nasıl Çalışır?
Local Storage, tarayıcıda anahtar-değer (key-value) çiftleri şeklinde veri saklamanızı sağlayan bir depolama alanıdır. Veriler, tarayıcı kapatılsa veya bilgisayar yeniden başlatılsa bile silinmez; kullanıcı tarayıcı geçmişini temizlemediği sürece kalıcıdır.
Veri yazma işlemi için setItem() metodunu kullanırız. Aşağıdaki örnekte, bir kullanıcının tema tercihini nasıl kaydedeceğimizi görelim:
// Tema tercihini yerel depolamaya kaydetme
localStorage.setItem('tema', 'koyu');
// Konsola doğrulama mesajı yazdıralım
console.log('Tema tercihi başarıyla kaydedildi.');
Bu kod bloğu, tarayıcının yerel depolama birimine 'tema' anahtarı ile 'koyu' değerini atar. Geliştirici araçlarında "Application" sekmesine giderek bu veriyi anlık olarak görebilirsiniz.
Adım Adım Veri Okuma ve Yönetme
Kaydettiğimiz veriye ihtiyaç duyduğumuzda getItem() metodunu kullanırız. Eğer anahtar bulunamazsa, JavaScript bize null değerini döndürür. Bu durum, veri kontrolü yaparken oldukça kritiktir.
// Yerel depolamadan veri okuma
const kaydedilenTema = localStorage.getItem('tema');
if (kaydedilenTema) {
console.log('Mevcut tema: ' + kaydedilenTema);
} else {
console.log('Henüz bir tema tercihi yapılmamış.');
}
Bu yöntem, kullanıcı sayfanızı tekrar ziyaret ettiğinde onun tercihlerini yüklemek için kullanılır. Uygulamanızın açılış fonksiyonunda bu kontrolü yaparak kullanıcı deneyimini iyileştirebilirsiniz.
Nesne ve Dizi Verilerini Depolama
Local Storage sadece metin (string) tabanlı verileri kabul eder. Bir JavaScript nesnesini veya dizisini doğrudan kaydetmeye çalışırsanız, tarayıcı bunu "[object Object]" olarak saklayacaktır. Bu sorunu aşmak için JSON.stringify() ve JSON.parse() yöntemlerini kullanmalıyız.
// Bir kullanıcı nesnesi tanımlayalım
const kullanici = {
id: 101,
isim: 'Ahmet',
rol: 'admin'
};
// Nesneyi string formatına çevirip kaydedelim
localStorage.setItem('kullaniciBilgisi', JSON.stringify(kullanici));
// Veriyi geri okuyup nesneye dönüştürelim
const veri = localStorage.getItem('kullaniciBilgisi');
const kullaniciObjesi = JSON.parse(veri);
console.log(kullaniciObjesi.isim); // Çıktı: Ahmet
Bu yaklaşım, karmaşık veri yapılarını tarayıcıda saklamanızı sağlar. JSON formatı, veriyi taşınabilir ve okunabilir kılar.
Veri Silme ve Depolama Alanını Temizleme
Bazen belirli bir veriyi silmek veya tüm depolama alanını boşaltmak isteyebilirsiniz. Bunun için removeItem() ve clear() metotları kullanılır.
// Belirli bir anahtarı silme
localStorage.removeItem('tema');
// Tüm depolama alanını temizleme
localStorage.clear();
removeItem() sadece belirttiğiniz anahtarı silerken, clear() o alan adı (domain) için kaydedilmiş tüm verileri yok eder. Bu komutları kullanırken dikkatli olmalı, kullanıcı verilerini geri dönüşümsüz sildiğinizi unutmamalısınız.
Depolama Yöntemlerinin Karşılaştırması
Web projelerinde veri saklamak için birden fazla seçenek mevcuttur. Aşağıdaki tablo, bu yöntemlerin temel farklarını özetlemektedir:
| Özellik | Local Storage | Session Storage | Cookies |
|---|---|---|---|
| Kalıcılık | Süresiz | Sekme kapanana kadar | Belirlenen süreye kadar |
| Kapasite | ~5-10 MB | ~5 MB | 4 KB |
| Sunucuya Gönderim | Hayır | Hayır | Evet (Her istekte) |
Kritik Güvenlik Uyarısı: Local Storage, XSS (Cross-Site Scripting) saldırılarına karşı savunmasızdır. Kullanıcıların hassas bilgilerini (şifre, kredi kartı bilgisi, JWT token vb.) burada saklamayın. Eğer bir token saklamanız gerekiyorsa, bunu HttpOnly cookie içerisinde tutmak çok daha güvenlidir.
Sıkça Sorulan Sorular
Local Storage verileri tarayıcılar arası paylaşılır mı?
Hayır, veriler sadece kaydedildikleri tarayıcı ve domain (alan adı) ile sınırlıdır. Chrome'da kaydettiğiniz bir veriyi Firefox'ta göremezsiniz.
Depolama alanı dolduğunda ne olur?
Kapasite aşıldığında tarayıcı bir QuotaExceededError hatası fırlatır. Bu nedenle, büyük verileri kaydederken try-catch blokları kullanmak iyi bir pratiktir.
Local Storage senkron mu çalışır?
Evet, Local Storage işlemleri senkron (eşzamanlı) çalışır. Çok büyük verilerle işlem yaparken ana iş parçacığını (main thread) kilitleyebilir, bu yüzden veri miktarını optimize etmelisiniz.
Local Storage verilerini kullanıcı görebilir mi?
Evet, tarayıcının "Geliştirici Araçları" bölümüne erişimi olan herhangi bir kullanıcı, depolanan tüm verileri görebilir ve değiştirebilir. Bu yüzden verilerinize hiçbir zaman güvenmeyin.
Session Storage ile farkı nedir?
Session Storage, tarayıcı sekmesi kapatıldığında verileri otomatik olarak siler. Local Storage ise siz silene kadar orada kalır.
Local Storage ile Performans Optimizasyonu ve Veri Yönetimi
Local Storage, basit anahtar-değer çiftleri için oldukça hızlı olsa da, büyük veri setleriyle çalışırken tarayıcı performansını doğrudan etkileyebilir. Tarayıcının ana iş parçacığı (main thread) üzerinde çalıştığı için, çok büyük verilerin sürekli okunması veya yazılması arayüzde takılmalara (jank) neden olabilir. Performansı optimize etmek için şu stratejileri uygulayabilirsiniz:
- Veri Parçalama: Büyük JSON objelerini tek bir anahtar altında saklamak yerine, mantıksal parçalara bölerek kaydedin.
- Debouncing Kullanımı: Kullanıcı her tuşa bastığında Local Storage'a yazmak yerine, belirli bir süre bekleyip (debounce) işlemi gerçekleştiren fonksiyonlar kullanın.
- Veri Sıkıştırma: Çok uzun metin verilerini saklamanız gerekiyorsa,
lz-stringgibi kütüphanelerle veriyi sıkıştırarak depolama alanından tasarruf edebilirsiniz.
Performans Ölçümü İçin Örnek Senaryo
Aşağıdaki kod bloğu, büyük bir nesneyi Local Storage'a yazarken geçen süreyi ölçmenize yardımcı olur:
const buyukVeri = Array.from({ length: 10000 }, (_, i) => ({ id: i, name: "Test Verisi " + i }));
console.time("Local Storage Yazma Süresi");
localStorage.setItem("performans_test", JSON.stringify(buyukVeri));
console.timeEnd("Local Storage Yazma Süresi");
console.time("Local Storage Okuma Süresi");
const veri = JSON.parse(localStorage.getItem("performans_test"));
console.timeEnd("Local Storage Okuma Süresi");
Hata Ayıklama ve Güvenli Depolama İpuçları
Local Storage ile çalışırken karşılaşılan en yaygın sorun, depolama sınırının aşılmasıdır (QuotaExceededError). Bu durum, özellikle kullanıcıların tarayıcı ayarlarından depolama alanını kısıtladığı veya çok fazla veri biriktiği durumlarda ortaya çıkar. Hataları yönetmek için her zaman try-catch bloklarını kullanmalısınız.
Güvenli Hata Yönetimi
Aşağıdaki yapı, veri yazma sırasında oluşabilecek hataları yakalayarak uygulamanızın çökmesini engeller:
function guvenliKaydet(key, value) {
try {
localStorage.setItem(key, JSON.stringify(value));
} catch (e) {
if (e.name === 'QuotaExceededError') {
console.error("Depolama alanı doldu! Eski verileri temizleyin.");
// Burada eski verileri silme veya kullanıcıyı uyarma mantığı çalıştırılabilir
} else {
console.error("Beklenmedik bir hata oluştu:", e);
}
}
}
// Kullanımı
guvenliKaydet("kullanici_ayarlari", { tema: "karanlik", bildirim: true });
İleri İpuçları:
- Namespace Kullanımı: Uygulamanızdaki farklı modüllerin aynı anahtar ismini kullanmaması için anahtarlarınızı
uygulama_adi:modul_adi:keyşeklinde isimlendirin. - Veri Doğrulama: Local Storage'dan okuduğunuz verinin beklediğiniz formatta olup olmadığını kontrol etmek için
JoiveyaZodgibi şema doğrulama kütüphanelerini kullanmayı düşünün. - Storage Event Listener: Aynı tarayıcının farklı sekmeleri arasında veri senkronizasyonu sağlamak için
window.addEventListener('storage', ...)olayını dinleyerek, bir sekmede değişen verinin diğer sekmelere anlık yansımasını sağlayabilirsiniz.
Sonuç
JavaScript ile yerel depolama kullanımı, modern web uygulamalarında kullanıcı deneyimini kişiselleştirmek için vazgeçilmez bir araçtır. Bu rehberde, verileri nasıl kaydedeceğinizi, okuyacağınızı ve güvenli bir şekilde yöneteceğinizi öğrendiniz. Unutmayın, depolama alanını verimli kullanmak ve güvenlik standartlarına uymak, profesyonel bir yazılım geliştiricinin ayırt edici özelliğidir.
Sorumluluk Reddi: Bu makaledeki kod örnekleri eğitim amaçlıdır. Uygulamalarınızda veri güvenliği için her zaman sunucu tarafı doğrulamalarını kullanmalı ve istemci tarafındaki (client-side) verilerin manipüle edilebileceğini varsayarak hareket etmelisiniz.
Bir sonraki adım olarak, IndexedDB teknolojisini araştırarak çok daha büyük ve yapılandırılmış verileri tarayıcıda nasıl saklayabileceğinizi öğrenebilirsiniz. İyi kodlamalar!


Yorumlar (0)
Yorum Yaz