লোকালস্টোরেজের আকার কীভাবে পাওয়া যায়


117

আমি বর্তমানে এমন একটি সাইট বিকাশ করছি যা এইচটিএমএল 5 এর লোকাল স্টোরেজ ব্যবহার করবে। আমি বিভিন্ন ব্রাউজারের আকার সীমাবদ্ধতা সম্পর্কে সমস্ত পড়েছি। তবে লোকালস্টোরের উদাহরণের বর্তমান আকারটি কীভাবে খুঁজে বের করা যায় সে সম্পর্কে আমি কিছুই দেখিনি। এই প্রশ্নটি ইঙ্গিত দেয় যে জাভাস্ক্রিপ্টের কোনও প্রদত্ত ভেরিয়েবলের জন্য আকারটি দেখানোর পথে বিল্ট নেই। লোকালস্টোরারেজের কি মেমরি আকারের সম্পত্তি আছে যা আমি দেখিনি? আমি কী অনুপস্থিত তা করার কোনও সহজ উপায় আছে?

আমার সাইটটি ব্যবহারকারীদের একটি 'অফলাইন' মোডে তথ্য প্রবেশের অনুমতি দেওয়ার জন্য তাই স্টোরেজটি প্রায় পূর্ণ হলে তাদের একটি সতর্কতা দিতে সক্ষম হওয়া খুব গুরুত্বপূর্ণ।


উত্তর:


219

জাভাস্ক্রিপ্ট কনসোল (একটি লাইন সংস্করণ) এ এই স্নিপেট কার্যকর করুন:

var _lsTotal=0,_xLen,_x;for(_x in localStorage){ if(!localStorage.hasOwnProperty(_x)){continue;} _xLen= ((localStorage[_x].length + _x.length)* 2);_lsTotal+=_xLen; console.log(_x.substr(0,50)+" = "+ (_xLen/1024).toFixed(2)+" KB")};console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");

একাধিক লাইনে একই কোড পড়ার জন্য

var _lsTotal = 0,
    _xLen, _x;
for (_x in localStorage) {
    if (!localStorage.hasOwnProperty(_x)) {
        continue;
    }
    _xLen = ((localStorage[_x].length + _x.length) * 2);
    _lsTotal += _xLen;
    console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB")
};
console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");

অথবা সুবিধাজনক ব্যবহারের জন্য বুকমার্কের ক্ষেত্রের 'অবস্থান' ক্ষেত্রে এই পাঠ্যটি যুক্ত করুন

javascript: var x, xLen, log=[],total=0;for (x in localStorage){if(!localStorage.hasOwnProperty(x)){continue;} xLen =  ((localStorage[x].length * 2 + x.length * 2)/1024); log.push(x.substr(0,30) + " = " +  xLen.toFixed(2) + " KB"); total+= xLen}; if (total > 1024){log.unshift("Total = " + (total/1024).toFixed(2)+ " MB");}else{log.unshift("Total = " + total.toFixed(2)+ " KB");}; alert(log.join("\n")); 

মন্তব্যে অনুরোধ অনুসারে পিএস স্নিপেটগুলি আপডেট করা হয়েছে। এখন গণনার মধ্যে কীটির নিজেই দৈর্ঘ্য অন্তর্ভুক্ত রয়েছে। প্রতিটি দৈর্ঘ্য 2 দ্বারা গুণিত হয় কারণ জাভাস্ক্রিপ্ট স্টোরের চরটি ইউটিএফ -16 হিসাবে রয়েছে (2 বাইট দখল করে)

পিপিএস ক্রোম এবং ফায়ারফক্স উভয় ক্ষেত্রেই কাজ করা উচিত।


8
মোটটি দেখতে এটি কনসোলে আটকান: var t = 0; (লোকালস্টোরায় ভ্যার এক্স) {টি + = ((লোকালস্টোরেজ [এক্স] দৈর্ঘ্য * 2%))); so কনসোল.লগ (টি / 1024 + "কেবি");
হেনরি

5
@ মিচা জাভাস্ক্রিপ্ট অভ্যন্তরীণভাবে ইউটিএফ 16 ব্যবহার করে, সুতরাং প্রতিটি অক্ষর দুটি বাইট হিসাবে সংরক্ষণ করা হয় কারণ প্রকৃত স্থানটি ব্যবহার করতে আপনাকে অক্ষরের সংখ্যা দুটি দিয়ে গুণ করতে হবে। (আপনি সম্ভবত এটি ইতিমধ্যে আবিষ্কার করেছেন, তবে আমি মনে করেছি যে এখানে অন্য কারও জন্য একই প্রশ্নটি
লক্ষ্যণীয়

2
@ সার্জ, এই উত্তরটি এখানে সর্বাধিক ভোট দেওয়া হয়েছেvar t = 0; for(var x in localStorage) { t += (x.length + localStorage[x].length) * 2; } console.log(t/1024+ " KB");
মিহির ১

17
এখানে একটি পরিবর্তিত সংস্করণ রয়েছে যা NaN এর জন্যও অ্যাকাউন্ট করে:var _lsTotal = 0, _xLen, _x; for (_x in localStorage) { _xLen = (((localStorage[_x].length || 0) + (_x.length || 0)) * 2); _lsTotal += _xLen; console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB") }; console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");
মারিও সান্নুম

1
বুকমার্কলে একটি বাগ রয়েছে। আপনি মূল কোডটিতে আন্ডারকর্ডেড ভেরিয়েবল এবং বুকমার্কলে সাধারণ নাম ব্যবহার করছেন। একক আন্ডারকর্ড _xএটি ভেঙে দেয়। কেবল আন্ডারস্কোরটি সরান।
আত্মা রিভার

46

@ সৌরভ উপরের যা বলেছে তা বন্ধ করে, আমি একটি ছোট ফাংশন লিখেছিলাম যাতে আপনার সমস্ত localStorageকী (বর্তমান ডোমেনের জন্য) সঠিকভাবে ধরা উচিত এবং সম্মিলিত আকারটি গণনা করা উচিত যাতে আপনি জানতে পারেন যে আপনার localStorageঅবজেক্টের দ্বারা ঠিক কতটা স্মৃতি গ্রহণ করা হয়েছে :

var localStorageSpace = function(){
        var allStrings = '';
        for(var key in window.localStorage){
            if(window.localStorage.hasOwnProperty(key)){
                allStrings += window.localStorage[key];
            }
        }
        return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
    };

আমার ফিরে: "30.896484375 KB"


1
ধন্যবাদ @ টেনিসজেন্ট। আইইন 11, এফএফ> 26 এবং ক্রোমের জন্যও কাজ করেছিলেন worked
Akki922234

18

IE এর স্টোরেজ অবজেক্টের একটি অবশিষ্ট স্পেস সম্পত্তি রয়েছে। অন্যান্য ব্রাউজারগুলির এই মুহুর্তে কোনও সমতুল্য নেই।

আমি বিশ্বাস করি যে স্থানটির ডিফল্ট পরিমাণ 5MB, যদিও আমি ব্যক্তিগতভাবে এটি পরীক্ষা করিনি।


1
এটি একটি IE একমাত্র ব্যক্তিগত
jas-

5 সাইটের প্রতি এমবি সীমা বা সমস্ত সাইটের জন্য সামগ্রিকভাবে?
Divyenduz

@ সাইট ডিভিয়েনডুজ, আমার মনে হয়
অ্যাডাম

2
নোট করুন যে লোকালস্টোরেজ.রেমেনিংস্পেস সম্পত্তি স্টোরেজ অবজেক্টের জন্য অনুমোদিত ইউটিএফ -16 অক্ষরের অবশিষ্ট সংখ্যা প্রদান করে। বাইটগুলিতে অবশিষ্ট আকার নয়। তথ্যসূত্র
মিহির

14

এখানে একটি সহজ কীভাবে করা যায় উদাহরণ এবং প্রতিটি ব্রাউজারের সাথে কাজ করা উচিত

alert(1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length);

আপনার কোথাও কোথাও * * 8 লাগবে না?
জর্জ মাউয়ার

1
অক্ষর সেট (যেমন utf8, ইত্যাদি) উপর নির্ভর করে যা এর জন্য অ্যাকাউন্ট করে না
jas-

এটি কি বাইট বা বিটগুলিতে আকার দেয়?
জেমস দ্য আশ্চর্যডুড

6
এই উদাহরণটি ভুলভাবে ধরে নিয়েছে যে স্থানীয় ব্রাউজারে প্রতিটি ব্রাউজারে 5MB (5 * 1024 * 1024) তে একই নির্দিষ্ট সীমা থাকে।
ভিক্টর

এটি ডব্লু 3 সি দ্বারা প্রকাশিত অনুমান অনুসারে।
জাস-

13

আশা করি এটি কারও সাহায্য করবে।

যেহেতু জ্যাসফিল্ডে জ্যাস-উদাহরণটি আমার পক্ষে কাজ করে না আমি এই সমাধানটি নিয়ে এসেছি। (আমি নীচের কোডটিতে ব্যবহৃত বিটগুলির জন্য সার্জ সেলেটস্কি এবং শৌরভকে ধন্যবাদ জানাই)

নীচে সেই ফাংশনটি ব্যবহার করা যেতে পারে যা লোকালস্টোরেজের জন্য কত স্থান উপলব্ধ এবং এটির জন্য (যদি কোনও কীগুলি ইতিমধ্যে এলএসে থাকে) কতটা জায়গা বাকি রয়েছে তা পরীক্ষা করতে ব্যবহার করা যেতে পারে।

এটি একটি সামান্য শক্তিশালী শক্তি তবে এটি ফায়ারফক্স বাদে প্রায় প্রতিটি ব্রাউজারে কাজ করে। ডেস্কটপ এফএফ এ এটি পুরো হতে বয়সগুলি (4-5 মিনিট) লাগে এবং অ্যান্ড্রয়েডে এটি ক্র্যাশ হয়।

ফাংশনটির নীচে আমি বিভিন্ন প্ল্যাটফর্মের বিভিন্ন ব্রাউজারগুলিতে পরীক্ষাগুলির সংক্ষিপ্তসার দিয়েছি। উপভোগ করুন!

function testLocalStorage() {
    var timeStart = Date.now();
    var timeEnd, countKey, countValue, amountLeft, itemLength;
    var occupied = leftCount = 3; //Shurav's comment on initial overhead
//create localStorage entries until localStorage is totally filled and browser issues a warning.
    var i = 0;
    while (!error) {
        try {
//length of the 'value' was picked to be a compromise between speed and accuracy, 
// the longer the 'value' the quicker script and result less accurate. This one is around 2Kb 
            localStorage.setItem('testKey' + i, '11111111112222222222333333333344444444445555555555666661111111111222222222233333333334444444444555555555566666');
        } catch (e) {
            var error = e;
        }
        i++;
    }
//if the warning was issued - localStorage is full.
    if (error) {
//iterate through all keys and values to count their length
        for (var i = 0; i < localStorage.length; i++) {
            countKey = localStorage.key(i);
            countValue = localStorage.getItem(localStorage.key(i));
            itemLength = countKey.length + countValue.length;
//if the key is one of our 'test' keys count it separately
            if (countKey.indexOf("testKey") !== -1) {
                leftCount = leftCount + itemLength;
            }
//count all keys and their values
            occupied = occupied + itemLength;
        }
        ;
//all keys + values lenght recalculated to Mb
        occupied = (((occupied * 16) / (8 * 1024)) / 1024).toFixed(2);
//if there are any other keys then our 'testKeys' it will show how much localStorage is left
        amountLeft = occupied - (((leftCount * 16) / (8 * 1024)) / 1024).toFixed(2);
//iterate through all localStorage keys and remove 'testKeys'
        Object.keys(localStorage).forEach(function(key) {
            if (key.indexOf("testKey") !== -1) {
                localStorage.removeItem(key);
            }
        });

    }
//calculate execution time
    var timeEnd = Date.now();
    var time = timeEnd - timeStart;
//create message
    var message = 'Finished in: ' + time + 'ms \n total localStorage: ' + occupied + 'Mb \n localStorage left: ' + amountLeft + "Mb";
//put the message on the screen
    document.getElementById('scene').innerText = message; //this works with Chrome,Safari, Opera, IE
//document.getElementById('scene').textContent = message;  //Required for Firefox to show messages
}

এবং বিভিন্ন ব্রাউজারে কিছু পরীক্ষার উপরে প্রতিশ্রুতি হিসাবে:

গ্যালাক্সিটিব 10.1

  • ম্যাক্সথন প্যাড 1.7 ~ 1130ms 5Mb
  • ফায়ারফক্স 20.0 (বিটা 20.0) উভয়ই ক্র্যাশ করেছে
  • ক্রোম 25.0.1364.169 ~ 22250ms / 5Mb
  • নেটিভ (সাফারি 4.0 / Webkit534.30 হিসাবে চিহ্নিত) ~ 995ms / 5Mb

আইফোন 4 এস আইওএস 6.1.3

  • সাফারি ~ 520ms / 5Mb
  • হোম অ্যাপ হিসাবে ~ 525ms / 5Mb
  • আইক্যাব ~ 710ms / 5 এমবি

ম্যাকবুক প্রো ওএসএক্স 1.8.3 (কোর 2 ডুও 2.66 8 জিবি মেমরি)

  • সাফারি 6.0.3 ~ 105ms / 5Mb
  • ক্রোম 26.0.1410.43 ~ 3400 মিমি / 5 এমবি
  • ফায়ারফক্স 20.0 300150ms (!) / 10Mb (স্ক্রিপ্ট দীর্ঘকাল চলার অভিযোগ করার পরে)

আইপ্যাড 3 আইওএস 6.1.3

  • সাফারি ~ 430ms / 5Mb
  • আইক্যাব ~ 595ms / 5 এমবি

উইন্ডোজ 7 -64 বি (কোর 2 ডুও 2.93 6 জিবি মেমরি)

  • সাফারি 5.1.7 ~ 80ms / 5Mb
  • Chrome 26.0.1410.43 ~ 1220ms / 5Mb
  • ফায়ারফক্স 20.0 228500 মিমি (!) / 10 এমবি (দীর্ঘকাল ধরে স্ক্রিপ্ট চলার অভিযোগ করার পরে)
  • আইই 9 ~ 17900 মিমি / 9.54 এমবি (যদি কোনও কনসোল.লগ কোডে থাকে তবে ডেভটুলগুলি না খোলার আগে পর্যন্ত কাজ করে না)
  • অপেরা 12.15 ~ 4212ms /3.55Mb (এটি 5Mb বাছাই করা হয়, তবে অপেরা চমত্কারভাবে জিজ্ঞাসা করে যে আমরা এলএসের পরিমাণ বাড়িয়ে তুলতে চাই, দুর্ভাগ্যক্রমে এটি ক্র্যাশ হয় যদি পর পর কয়েকবার পরীক্ষা নেওয়া হয়)

উইন 8 (সমান্তরাল 8 এর অধীনে)

  • আইই 10 ~ 7850ms /9.54 এমবি

দুর্দান্ত পরীক্ষা-নিরীক্ষা। তবে আমি array.forEach()আপনার কোডে খুঁজে পেয়েছি , যেমন আমি জানি যে এটি আইই তে নেই, আপনি কি নিজের দ্বারা প্রয়োগ করেন? সামগ্রিক বিলম্বনে আপনি এর অবদানকে কীভাবে পরিমাপ করবেন?
এভি গান

ধন্যবাদ, প্রাথমিক পরীক্ষাগুলি থেকে কিছু সময় পেরিয়ে যাওয়ার পরে আমি সেগুলি আবার করতে পারি। হিসাবে forEach()। না আমি নিজে এটি প্রয়োগ করি নি, আমি স্টকটি ব্যবহার করেছি Array.prototype.forEach()। মতে MDN ওরফে মোজিলা ডেভেলপার নেটওয়ার্ক এর স্থানীয় সমর্থন রয়েছে।
জাকুব গ্যাডকোভস্কি

ধন্যবাদ। আমার জ্ঞানকে সতেজ করা দরকার। পরে আমি Array.prototype.forEach()যতটা সম্ভব ব্যবহার করব যদি আমার প্রকল্পটি প্রাথমিক আই সংস্করণগুলি সমর্থন না করে।
এভি গান

কোড করা সম্ভব হয়েছে উল্লেখযোগ্য দ্রুততার সাথে (~ ফায়ারফক্সে 2500ms ~ Chrome এ 700 মিঃসে): বিভক্ত whileলুপ দুটি অংশ, মত প্রথমটি মধ্যে stackoverflow.com/a/3027249/1235394 যে ব্যাখ্যা মূলকভাবে তথ্য খন্ডে ক্রমবর্ধমান সঙ্গে তারপর দ্বিতীয় অংশ দিয়ে localStorage পূরণ স্টোরেজ সম্পূর্ণরূপে পূরণের জন্য স্থির আকারের ছোট অংশগুলি। পরীক্ষার পৃষ্ঠা: jsfiddle.net/pqpps3tk/1
ভিক্টর

আইই 10 রকস .. তবুও, ক্রোম ডাউনলোডের জন্য দ্রুততম ব্রাউজার :)
রুসলান আবুজান্ট

11

আপনি ব্লব ফাংশনটি ব্যবহার করে স্থানীয় স্টোরেজ ডেটার বর্তমান আকার পেতে পারেন এটি পুরানো ব্রাউজারগুলিতে কাজ করতে পারে না, ক্যানিউজ new Blobএবং এর Object.values()জন্য সমর্থনটি পরীক্ষা করে ।

উদাহরণ:

return new Blob(Object.values(localStorage)).size;

অবজেক্ট.ভ্যালু () স্থানীয় স্টোরেজ অবজেক্টকে একটি অ্যারেতে পরিণত করে। ব্লব অ্যারেটিকে কাঁচা ডেটাতে পরিণত করে।


3
আমি মনে করি Blobইউটিএফ -16 এ স্ট্রিং এনকোডিং সীমাবদ্ধ করে না তাই এটি সম্ভবত সবচেয়ে নির্ভরযোগ্য পদ্ধতি হতে পারে। new Blob(['X']).size;= 1 যদিও new Blob(['☃']).size(ইউ + 2603 / স্নোম্যান চরিত্র) ==> ৩. ভিত্তিক সমাধানগুলি String.prototype.lengthএটিকে বিবেচনায় নেবে না ("চরিত্রগুলি" সাথে ডিল করুন) যেখানে স্টোরেজ কোটা / সীমা সম্ভবত (বাইটগুলি দিয়ে কাজ করবে), এবং আমি কল্পনা করতে পারি এটি বিস্ময়ের দিকে পরিচালিত করে, উদাহরণস্বরূপ, যখন অ-ইংরেজি / ASCII অক্ষর সংরক্ষণ করা হয়।
আইএক্স 3

আমি জেদের উত্তর ব্যবহার করেছি যা ক্রোম এবং এফএফ-এ ব্লব সমাধানটি পরীক্ষা করতে স্ট্রিং দৈর্ঘ্যের সাথে লোকালস্টোরেজ আকারের গণনা করে। প্রথম পরীক্ষায়, আমি লোকালস্টোরেশনটি "1" চিহ্ন দিয়ে পূর্ণ করেছি। দ্বিতীয় পরীক্ষায়, আমি স্থানীয় 'স্টোরেজটি' '☃' চিহ্ন দিয়ে পূর্ণ করেছি যা ব্লব অবজেক্টে বড় আকারের। উভয় ক্ষেত্রেই আমি একই সর্বোচ্চ লোকালস্টোরেজ দৈর্ঘ্য পেয়েছিলাম। সুতরাং অক্ষরের ব্লব আকার স্থানীয় স্টোরেজ সীমাবদ্ধতা প্রভাবিত করে না। এজন্য ব্লবকে এই উদ্দেশ্যে ব্যবহার করা উচিত নয়।
ভিনসেন্টে

6

নিম্নলিখিত পদ্ধতিগুলি দ্বারা আপনি আপনার স্থানীয় সঞ্চয় গণনা করতে পারেন:

function sizeofAllStorage(){  // provide the size in bytes of the data currently stored
  var size = 0;
  for (i=0; i<=localStorage.length-1; i++)  
  {  
  key = localStorage.key(i);  
  size += lengthInUtf8Bytes(localStorage.getItem(key));
  }  
  return size;
}

function lengthInUtf8Bytes(str) {
  // Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
  var m = encodeURIComponent(str).match(/%[89ABab]/g);
  return str.length + (m ? m.length : 0);
}

console.log(sizeofAllStorage());

পরিশেষে আকারে বাইটগুলি ব্রাউজারে লগ করা হবে।


4

আমি @ টেনিসজেনের কোডটি ব্যবহার করব যা সমস্তগুলি পেয়ে এবং কন্টেন্টটি গণনা করে তবে আমি কীগুলি নিজেরাই গণনা করি:

var localStorageSpace = function(){
        var allStrings = '';
        for(var key in window.localStorage){
            allStrings += key;
            if(window.localStorage.hasOwnProperty(key)){
                allStrings += window.localStorage[key];
            }
        }
        return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
    };

3

এই সমস্যাটি সম্পর্কে আমি যেভাবে চলেছি তা হ'ল লোকাল স্টোরেজে ব্যবহৃত স্থান এবং অবশিষ্ট স্থান অনুসন্ধানের জন্য ফাংশন তৈরি করা এবং তারপরে এমন একটি ফাংশন যা সর্বাধিক স্টোরেজ স্পেস নির্ধারণ করার জন্য সেই ফাংশনগুলিকে কল করে।

function getUsedSpaceOfLocalStorageInBytes() {
    // Returns the total number of used space (in Bytes) of the Local Storage
    var b = 0;
    for (var key in window.localStorage) {
        if (window.localStorage.hasOwnProperty(key)) {
            b += key.length + localStorage.getItem(key).length;
        }
    }
    return b;
}

function getUnusedSpaceOfLocalStorageInBytes() {
    var maxByteSize = 10485760; // 10MB
    var minByteSize = 0;
    var tryByteSize = 0;
    var testQuotaKey = 'testQuota';
    var timeout = 20000;
    var startTime = new Date().getTime();
    var unusedSpace = 0;
    do {
        runtime = new Date().getTime() - startTime;
        try {
            tryByteSize = Math.floor((maxByteSize + minByteSize) / 2);
            localStorage.setItem(testQuotaKey, new Array(tryByteSize).join('1'));
            minByteSize = tryByteSize;
        } catch (e) {
            maxByteSize = tryByteSize - 1;
        }
    } while ((maxByteSize - minByteSize > 1) && runtime < timeout);

    localStorage.removeItem(testQuotaKey);

    if (runtime >= timeout) {
        console.log("Unused space calculation may be off due to timeout.");
    }

    // Compensate for the byte size of the key that was used, then subtract 1 byte because the last value of the tryByteSize threw the exception
    unusedSpace = tryByteSize + testQuotaKey.length - 1;
    return unusedSpace;
}

function getLocalStorageQuotaInBytes() {
    // Returns the total Bytes of Local Storage Space that the browser supports
    var unused = getUnusedSpaceOfLocalStorageInBytes();
    var used = getUsedSpaceOfLocalStorageInBytes();
    var quota = unused + used;
    return quota;
}

অ্যারে.জোঁইন একটি পারফরম্যান্স কিলার, স্ট্রিং.রেপিয়ট যেখানে পাওয়া যায় তার চেয়ে বেশি ভাল ব্যবহার করুন (যার অর্থ IE বাদে সর্বত্র)
pkExec

2

@ সের্গের উত্তর ছাড়াও এখানে সবচেয়ে বেশি ভোট দেওয়া হয়েছে, কীগুলির আকার বিবেচনা করা দরকার। নীচের কোডটি সঞ্চিত কীগুলির আকার যুক্ত করবেlocalStorage

var t = 0; 
for (var x in localStorage) { 
    t += (x.length + localStorage[x].length) * 2; 
} 
console.log((t / 1024) + " KB");

আমি দেখেছি যে, ফায়ারফক্স আয় undefinedআইটেমের জন্য lengthকিছু কিছু ক্ষেত্রে, তাই আমি উপরন্তু করার জন্য একটি শর্তাধীন জুড়েছেন: t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
ক্যামিলোকাওয়ারিন

@ ক্যামিলোকাওয়ারিন, স্টোরেজে কোনও অপরিজ্ঞাতকৃত মান সংরক্ষণ না করা উচিত নয়, কারণ স্ট্রিংয়ের একমাত্র প্রকার যা লোকালস্টোরেশনে সমর্থিত এবং স্ট্রিংয়ের সম্পত্তি দৈর্ঘ্য থাকে। আপনি কি jsfiddle বা অনুরূপ কিছু উপর কিছু উদাহরণ পোস্ট করতে পারেন?
মিহির

1

যেমন অনুমানটি যায়, একটি স্ট্রিংয়ের প্রতিটি অক্ষর 16 বিট হয়।

তবে ক্রোম (সেটিংস> সামগ্রী সেটিংস> কুকিজ এবং সাইট ডেটা) দিয়ে পরিদর্শন করা আমাদের দেখায় যে লোকাল স্টোরেজের সূচনা করতে 3 কেবি লাগে (ওভারহেডের আকার)

এবং সঞ্চিত ডেটা আকার এই সম্পর্কটিকে অনুসরণ করে (1kB থেকে নির্ভুল)
3 + ((লোকালস্টোরেজ.এক্স. দৈর্ঘ্য * 16) / (8 * 1024)) কেবি

যেখানে লোকালস্টোরেজ.এক্স আপনার স্টোরেজ স্ট্রিং।


0

// স্মৃতি কী এবং মান উভয় দখল করে তাই আপডেট কোড।

var jsonarr=[];
var jobj=null;
for(x in sessionStorage) // Iterate through each session key
{
    jobj={}; 
    jobj[x]=sessionStorage.getItem(x); //because key will also occupy some memory
    jsonarr.push(jobj);
    jobj=null;
}
//https://developer.mozilla.org/en/docs/Web/JavaScript/Data_structures 
//JavaScript's String type is used to represent textual data. It is a set of "elements" of 16-bit unsigned integer values. 
var size=JSON.stringify(jsonarr).length*2; //16-bit that's why multiply by 2
var arr=["bytes","KB","MB","GB","TB"]; // Define Units
var sizeUnit=0;
while(size>1024){ // To get result in Proper Unit
    sizeUnit++;
    size/=1024;
}
alert(size.toFixed(2)+" "+arr[sizeUnit]);

0

হ্যাঁ, এই প্রশ্নটি 10 ​​বছর আগে জিজ্ঞাসা করা হয়েছিল। তবে আগ্রহীদের জন্য (আমার মতো, আমি যেমন একটি অফলাইন পাঠ্য সম্পাদক তৈরি করছি যা লোকাল স্টোরেজ সহ ডেটা সংরক্ষণ করে) এবং প্রোগ্রামিং এ স্তন্যপান করে, আপনি এর মতো সহজ কিছু ব্যবহার করতে পারেন:

var warning = 1;
var limit = 2000000; //2 million characters, not really taking in account to bytes but for tested ammounts of characters stored
setInterval(function() {
    localStorage["text"] = document.getElementById("editor").innerHTML; //gets text and saves it in local storage under "text"
    if(localStorage["text"].length > limit && warning == 1){
            alert("Local Storage capacity has been filled"); 
            warning = 2; //prevent a stream of alerts
    }
}, 1000);
//setInterval function saves and checks local storage

ভরাট স্টোরেজের পরিমাণ পাওয়ার সর্বোত্তম উপায় হ'ল সাইটের সেটিংসটি দেখুন (বলুন, যদি আপনি স্থানীয় স্টোরেজে কোনও চিত্র সঞ্চয় করেন)। কমপক্ষে ক্রোমে, আপনি ব্যবহৃত বাইটের পরিমাণ দেখতে পাবেন (যেমন: 1222 বাইট)। তবে, জেএস সহ পূর্ণ স্থানীয় স্টোরেজ দেখার সর্বোত্তম উপায়গুলি ইতিমধ্যে উপরে উল্লিখিত হয়েছে, সুতরাং সেগুলি ব্যবহার করুন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.