2015-03-22 15 views
5

, böyle bir şey gerekir:Chrome Depolama Alanı API'sındaki öğeleri bir diziye nasıl verimli bir şekilde eklerim? Eğer sürekli öğeleri eklemek istediğiniz Krom Depolama API saklanan bir dizi olmasını istiyorsam, anladığım

function addToHistory(url) { 
    chrome.storage.sync.get('history', function(obj) { 
     var history = obj.hasOwnProperty('history') ? obj.history : []; 
     history.push(url); 
     chrome.storage.sync.set({'history': history}, function() { 
      if (chrome.runtime.lastError) 
       console.log(chrome.runtime.lastError); 
      else 
       console.log("History saved successfully"); 
     }); 
    }); 
} 

Bu kod beni rahatsız; yükleme ve daha sonra aynı dizi her zaman her zaman sonuna tek bir öğe itme korkunç verimsiz (özellikle history dizisi, binlerce girişleri almaya başlarsa).

Bunu yapmanın daha verimli bir yolu var mı? Bir diziye geçmek isteyen ilk kişi olmadığımı farz ediyorum, bu yüzden bunu başarmanın zaten bir yolu var mı?

cevap

0

chrome.storage.sync API'sinin ihtiyacınız olan şey için ideal olduğunu sanmıyorum. Temel olarak bu API, kullanıcı tercihlerini veya basit ve kısa verileri hatırlamak için mükemmeldir. Sync API gibi kullanım için sınırlamalar vardır: - öğe başına verilerin 8 KB - - tüm veriler için 102.4 KB depolama tutulan bazı tarihsel depolamak için bu API kullanmayı planlıyorsanız eğer 1,800

Yani saatte yazıyor veri uygulaması çok hızlı sınırları aşabilir.

Uygulamayı değil, bir uzantı geliştireceğinizi varsayalım. Uygulamada, senkronize edilmiş verileri bir dosyaya kaydetmek için kullanılabilecek chrome.syncFileSystem API'sine erişebilirsiniz.

Sorunuzu yanıtlamak, işlevinizi optimize etmenin tek yolu yoktur. Verileri düzenli olarak depolamayı deneyebilirsiniz - örneğin her 30 saniyede bir. Bir kullanıcı uygulamayı kapattıktan sonra verileri kaydetmeyi unutmayın.

Ayrıca, bu değeri bellekte bir değişken olarak da saklayabilir ve kullanıcı ekranı terk ettiğinde veya uygulamayı kapattığında kaydedebilir, ancak uygulama senkronize olmayan görev tamamlanmadan kapanabileceğinden, bu tehlikelidir.

Her neyse, bu API'nın uygulamanız için en iyi çözüm olmadığını düşünüyorum.