FA-TOOLS — Header Component
بهترین کدهای آماده برای مدیریت Local Storage در مرورگر

بهترین کدهای آماده برای مدیریت Local Storage در مرورگر

🚀 پروژه‌هات رو با سرعت نور پیش ببر! 🚀

خسته شدی از نوشتن کدهای تکراری برای مدیریت Local Storage؟ نگران نباش رفیق! اینجا دقیقاً همون جاییه که می‌تونی بهترین ابزارها و اسنیپت‌های آماده رو برای فروشگاه ابزارهای ما پیدا کنی و کارایی پروژه‌هات رو چندین برابر کنی. بزن بریم که کدهای جذاب و کاربردی رو با هم ببینیم!

🗺️ نقشه راه سریع و جامع Local Storage 🗺️

مفهوم کلیدی اهمیت و کاربرد فوری
Local Storage چیست؟ ذخیره ماندگار داده‌ها در مرورگر (تنظیمات کاربر، وضعیت UI)
عملیات پایه (`setItem`, `getItem`) اساس ذخیره، بازیابی و مدیریت داده‌ها
توابع کمکی پیشرفته (Utility) کار با آبجکت‌ها و آرایه‌ها، مدیریت خطا به‌صورت امن
بررسی و عیب‌یابی استفاده از DevTools و رفع مشکلات رایج (مثل پر شدن فضا)
ملاحظات امنیتی جلوگیری از ذخیره داده‌های حساس (رمز عبور، توکن‌های مهم)

📞 نیاز به یه راهنمایی فوری یا مشکلی پیش اومده؟ همین حالا با تیم پشتیبانی ما تماس بگیر!

سلام رفیق برنامه‌نویس! اگه مدت زیادیه که با جاوااسکریپت و توسعه وب سروکار داری، حتماً اسم Local Storage به گوشت خورده. این گنجینه کوچیک اما قدرتمند مرورگر، به ما اجازه می‌ده اطلعات کاربر رو به‌صورت محلی و ماندگار (حتی بعد از بسته شدن مرورگر) ذخیره کنیم. از تنظیمات شخصی کاربر گرفته تا وضعیت فرم‌ها یا توکن‌های احراز هویت، Local Storage مثل یه دفترچه یادداشت دائمی برای اپلیکیشن ما عمل می‌کنه. اما خب، همیشه کار باهاش اونقدرها هم ساده نیست، مخصوصاً وقتی می‌خوایم کد تمیز و بهینه‌ای داشته باشیم. توی این مقاله قراره بهترین کدهای آماده و اسنیپت‌های خفن رو با هم بررسی کنیم تا مدیریت Local Storage برات مثل آب خوردن شه. این کدهای آماده و اسنیپت‌ها که می‌تونی توی پروژه‌هات استفاده کنی، کار رو برات خیلی راحت‌تر می‌کنن.

گاهی اوقات، بدون استفاده از ابزارهای درست و کدهای بهینه، ممکنه با چالش‌هایی مثل از دست رفتن داده‌ها، خطاهای تبدیل فرمت یا حتی کندی عملکرد مواجه بشیم. اینجاست که داشتن یه مجموعه از کدهای آماده و تست‌شده حسابی به دردت می‌خوره. پس بزن بریم تا عمیق‌تر به این موضوع شیرجه بزنیم و یاد بگیریم چطور از این قابلیت مرورگر نهایت استفاده رو ببریم.

Local Storage چیست و چرا برای ما مهم است؟

Local Storage یه نوع وب استوریج (Web Storage) در مرورگره که به اپلیکیشن‌های تحت وب اجازه می‌ده داده‌ها رو در داخل مرورگر کاربر ذخیره کنن. فرق اصلیش با Session Storage اینه که داده‌های Local Storage تاریخ انقضا ندارن و حتی بعد از بسته شدن مرورگر هم باقی می‌مونن. یعنی کاربر اگه امروز وارد سایت تو بشه، یه سری تنظیمات رو ذخیره کنه و فردا برگرده، اون تنظیمات هنوز سر جاشون هستن! این ویژگی اون رو برای مواردی مثل موارد زیر ایده‌آل می‌کنه:

  • ذخیره تنظیمات کاربر (مثلاً تم روشن/تاریک، زبان)
  • ذخیره وضعیت فرم‌ها برای جلوگیری از از دست رفتن اطلاعات
  • ذخیره توکن‌های احراز هویت (با رعایت مسائل امنیتی)
  • کش کردن اطلاعات کوچیک برای بهبود سرعت بارگذاری

خب حالا که فهمیدیم چی هست، بریم سراغ هسته اصلی کارمون: کدهای آماده!

کدهای آماده پایه برای مدیریت Local Storage

بهترین کدهای آماده برای مدیریت Local Storage در مرورگر — تصویر 2

اول از همه، با توابع اصلی Local Storage آشنا می‌شیم و بعد سراغ اسنیپت‌های آماده‌ای می‌ریم که کارمون رو حسابی راه می‌ندازن.

1. ذخیره داده با `setItem()`

این ساده‌ترین راه برای گذاشتن یه مقدار داخل Local Storage هست. یادت باشه، Local Storage فقط می‌تونه رشته (string) ذخیره کنه. اگه آبجکت یا آرایه داری، باید اول اونا رو به رشته JSON تبدیل کنی.


// ذخیره یک رشته ساده
localStorage.setItem('username', 'ali.ahmadi');

// ذخیره یک عدد (بصورت رشته ذخیره می‌شود)
localStorage.setItem('user_id', 12345);

// ذخیره یک آبجکت (باید به JSON تبدیل شود)
const userProfile = {
    name: 'سارا',
    email: 'sara@example.com',
    settings: {
        theme: 'dark',
        notifications: true
    }
};
localStorage.setItem('userProfile', JSON.stringify(userProfile));

// مثال: ذخیره وضعیت یک چک‌باکس
const rememberMe = true;
localStorage.setItem('rememberUser', String(rememberMe)); // یا JSON.stringify(rememberMe)
    

برای کپی کردن کد، روی دکمه “کپی کد” در گوشه بالا سمت راست بلاک کد کلیک کنید.

2. بازیابی داده با `getItem()`

برای خوندن داده‌ها از Local Storage، از `getItem()` استفاده می‌کنیم. اگه چیزی با اون کلید پیدا نشه، مقدار `null` برمی‌گردونه. یادت باشه، اگه قبلاً آبجکت یا آرایه رو به JSON تبدیل کرده بودی، حالا باید اون رو `JSON.parse()` کنی.


// بازیابی یک رشته ساده
const username = localStorage.getItem('username');
console.log(username); // خروجی: "ali.ahmadi"

// بازیابی یک عدد (بصورت رشته)
const userId = localStorage.getItem('user_id');
console.log(typeof userId, userId); // خروجی: "string", "12345"
console.log(Number(userId)); // برای تبدیل به عدد: 12345

// بازیابی یک آبجکت (باید از JSON تبدیل شود)
const userProfileString = localStorage.getItem('userProfile');
if (userProfileString) {
    const userProfile = JSON.parse(userProfileString);
    console.log(userProfile.name); // خروجی: "سارا"
} else {
    console.log('پروفایل کاربری یافت نشد.');
}

// بازیابی وضعیت چک‌باکس
const rememberUserString = localStorage.getItem('rememberUser');
const rememberUser = rememberUserString === 'true'; // یا JSON.parse(rememberUserString)
console.log(rememberUser); // خروجی: true
    

3. حذف یک داده با `removeItem()`

اگه دیگه به یه داده‌ای نیاز نداشتی، با `removeItem()` می‌تونی اون رو حذف کنی. این کار برای مدیریت فضای ذخیره‌سازی و همچنین حذف داده‌های موقتی کاربر خیلی مهمه.


// حذف آیتم "username"
localStorage.removeItem('username');
console.log(localStorage.getItem('username')); // خروجی: null
    

4. حذف همه داده‌ها با `clear()`

مواقعی پیش می‌یاد که می‌خوای تمام داده‌های ذخیره‌شده توسط اپلیکیشن رو از Local Storage پاک کنی. مثلاً وقتی کاربر از حسابش خارج می‌شه. `clear()` همه چیز رو پاک می‌کنه.


// فرض کنید چند آیتم ذخیره شده:
// localStorage.setItem('username', 'ali');
// localStorage.setItem('user_id', '123');

localStorage.clear();
console.log(localStorage.getItem('username')); // خروجی: null
console.log(localStorage.length); // خروجی: 0
    

کدهای آماده پیشرفته: Utility برای Local Storage

بهترین کدهای آماده برای مدیریت Local Storage در مرورگر — تصویر 3

کار کردن مستقیم با `localStorage.setItem` و `localStorage.getItem` برای آبجکت‌ها و آرایه‌ها می‌تونه تکراری و پر از خطا باشه، مخصوصاً وقتی مجبوریم دائم `JSON.stringify` و `JSON.parse` کنیم. برای همین، بهتره یه سری توابع کمکی (Utility Functions) بنویسیم که کار رو برامون ساده‌تر و مطمئن‌تر کنن. این اسنیپت‌های آماده، مثل یه جعبع ابزار حرفه‌ای، بهت کمک می‌کنن. اگه دنبال کدهای آماده و اسنیپت‌های بیشتر هستی، حتماً به بخش مربوطه سر بزن.

💡 نکته مهم:

این توابع کمکی رو می‌تونی توی یه فایل جداگانه (مثلاً `localStorage.utils.js`) تعریف کنی و هرجا که نیاز داشتی import کنی. این کار باعث سازماندهی بهتر کد و قابلیت استفاده مجدد می‌شه و کدت رو خواناتر می‌کنه.

1. تابع `ls.set(key, value)`: ذخیره امن آبجکت‌ها و هر نوع داده

این تابع می‌تونه هر نوع داده‌ای رو (حتی آبجکت یا آرایه) بگیره و قبل از ذخیره، اون رو به JSON تبدیل کنه. همچنین، یه بلاک `try-catch` هم داره که اگه مشکلی پیش اومد (مثلاً فضای Local Storage پر بود)، برنامه کرش نکنه و بتونی مدیریت خطا رو به عهده بگیری.


const ls = {
    set: (key, value) => {
        try {
            const serializedValue = JSON.stringify(value);
            localStorage.setItem(key, serializedValue);
            return true; // نشان‌دهنده موفقیت
        } catch (error) {
            console.error("Error setting item in Local Storage:", error);
            // می‌توانید در اینجا یک راه حل جایگزین ارائه دهید یا خطا را به کاربر نشان دهید
            return false; // نشان‌دهنده شکست
        }
    },
    // ... بقیه توابع
};

// مثال استفاده:
ls.set('userSettings', { theme: 'light', lang: 'fa' });
ls.set('cartItems', [{ id: 1, qty: 2 }, { id: 2, qty: 1 }]);
    

2. تابع `ls.get(key, defaultValue)`: بازیابی امن با مقدار پیش‌فرض

این تابع، داده رو بازیابی می‌کنه و اگه وجود نداشت یا تبدیل JSON با خطا مواجه شد، یه مقدار پیش‌فرض رو برمی‌گردونه. این کار از خطاهای `null` یا `undefined` جلوگیری می‌کنه و کدت رو قوی‌تر و پایدارتر می‌کنه.


const ls = {
    // ... تابع set
    get: (key, defaultValue = null) => {
        try {
            const serializedValue = localStorage.getItem(key);
            if (serializedValue === null) {
                return defaultValue;
            }
            return JSON.parse(serializedValue);
        } catch (error) {
            console.error("Error getting item from Local Storage:", error);
            return defaultValue; // در صورت خطا، مقدار پیش‌فرض را برمی‌گرداند
        }
    },
    // ... بقیه توابع
};

// مثال استفاده:
const settings = ls.get('userSettings', { theme: 'dark', lang: 'en' });
console.log(settings.theme); // اگر قبلاً تنظیم نشده باشد: "dark"

const items = ls.get('cartItems', []);
console.log(items.length); // اگر سبد خرید خالی باشد: 0
    

3. تابع `ls.remove(key)` و `ls.clear()`: حذف مطمئن

این توابع صرفاً Wrapper برای توابع اصلی `removeItem` و `clear` هستن، ولی با این تفاوت که می‌تونیم در آینده منطق بیشتری (مثل لاگ کردن یا اعتبارسنجی) بهشون اضافه کنیم و مدیریت خطا رو هم بهتر انجام بدیم.


const ls = {
    // ... توابع set و get
    remove: (key) => {
        try {
            localStorage.removeItem(key);
            return true;
        } catch (error) {
            console.error("Error removing item from Local Storage:", error);
            return false;
        }
    },
    clear: () => {
        try {
            localStorage.clear();
            return true;
        } catch (error) {
            console.error("Error clearing Local Storage:", error);
            return false;
        }
    }
};

// مثال استفاده:
ls.remove('userProfile');
ls.clear(); // همه چیز رو پاک می‌کنه
    

مدیریت و عیب‌یابی Local Storage در مرورگر

گاهی وقتا، مشکلاتی پیش میاد که نیاز به عیب‌یابی داره. به‌عنوان یه برنامه‌نویس، باید بدونی چطور می‌تونی Local Storage رو بررسی و مدیریت کنی.

بررسی Local Storage با ابزارهای توسعه‌دهنده مرورگر

مهم‌ترین ابزار برای مدیریت Local Storage، همون ابزارهای توسعه‌دهنده (Developer Tools) مرورگره.

  1. مرورگر رو باز کن.
  2. روی صفحه راست‌کلیک کن و “Inspect” یا “Inspect Element” رو انتخاب کن (یا کلید F12 رو بزن).
  3. به تب “Application” برو.
  4. در منوی سمت چپ، زیر بخش “Storage”، روی “Local Storage” کلیک کن.
  5. حالا می‌تونی تمام کلید-مقادیر ذخیره‌شده برای اون دامنه رو ببینی، ویرایش کنی، حذف کنی یا حتی کلید جدید اضافه کنی.

عیب‌یابی سریع (Troubleshooting)

حتی با بهترین کدهای آماده، ممکنه با مشکلاتی روبه‌رو بشی. اینجا چند تا مشکل رایج و راه‌حلشون رو برات می‌گم:

🚨 مشکل:

“فضا پر شده است” (Quota Exceeded Error): این خطا زمانی رخ می‌ده که سعی می‌کنی بیش از حد مجاز (معمولاً 5 تا 10 مگابایت) در Local Storage داده ذخیره کنی.

✅ راه‌حل:

  • فقط داده‌های ضروری رو ذخیره کن.
  • داده‌های قدیمی یا بی‌اهمیت رو پاک کن (`removeItem`).
  • از فرمت‌های فشرده‌تر برای ذخیره داده‌ها استفاده کن.
  • برای داده‌های حجیم‌تر، از IndexedDB استفاده کن.
  • توی تابع `ls.set` که بالا داشتیم، بلوک `try-catch` کمک می‌کنه برنامه کرش نکنه و بتونی به کاربر یه پیغام بدی.

🚨 مشکل:

داده‌ها به‌درستی ذخیره یا بازیابی نمی‌شوند (مثلاً آبجکت‌ها برمی‌گردند `[Object object]`):

✅ راه‌حل:

  • مطمئن شو که همیشه قبل از `setItem` از `JSON.stringify()` و بعد از `getItem` از `JSON.parse()` برای آبجکت‌ها و آرایه‌ها استفاده می‌کنی.
  • اسم کلیدها رو چک کن که املای درستی داشته باشن.
  • توی تابع `ls.get` ما، این مشکل حل شده چون همیشه `JSON.parse` رو تست می‌کنه و در صورت خطا مقدار پیش‌فرض رو می‌ده.

🚨 مشکل:

داده‌ها بعد از به‌روزرسانی صفحه یا بستن مرورگر از بین می‌روند:

✅ راه‌حل:

  • مطمئن شو که اشتباهاً از `sessionStorage` به جای `localStorage` استفاده نمی‌کنی. `sessionStorage` فقط تا زمانی که تب مرورگر بازه، دادع‌ها رو نگه می‌داره.
  • بررسی کن که کدهای پاک‌کننده (مثل `clear()` یا `removeItem()`) در جایی از برنامه‌ات به‌اشتباه فراخوانی نمی‌شن.

ملاحظات امنیتی

Local Storage برای ذخیره اطلاعات حساس مثل رمز عبور یا توکن‌های احراز هویت که نیاز به امنیت بالا دارن، جای مناسبی نیست. چون داده‌ها در Local Storage بدون رمزنگاری ذخیره می‌شن و توسط حملات XSS (Cross-Site Scripting) قابل دسترسی هستن. برای این نوع داده‌ها، گزینه‌های امن‌تری مثل HTTP-only cookies یا IndexedDB (با رمزنگاری مناسب) رو در نظر بگیر. این یه نکتع مهم امنیتیه که هیچوقت نباید فراموشش کنی. برای اطلاعات بیشتر یا راهنمایی در مورد مسائل امنیتی می‌تونی با تیم فنی ما تماس بگیری.

نتیجه‌گیری

مدیریت Local Storage با این کدهای آماده و توابع کمکی که برات گفتم، دیگه یه کابوس نیست. با استفاده از این اسنیپت‌های تمیز و قدرتمند، می‌تونی با خیال راحت داده‌های کاربرانت رو ذخیره و بازیابی کنی و تجربه‌ی کاربری بهتری رو فراهم کنی. همیشه یادت باشه که برای داده‌های پیچیده‌تر و حجیم‌تر، شاید نیاز به راه‌حل‌های پیشرفته‌تری مثل IndexedDB یا حتی ارتباط با سرور داشته باشی. ولی برای بیشتر نیازهای روزمره، Local Storage با این کدها، رفیق شفیقت خواهد بود.

اگه این مقاله برات مفید بود و بهت کمک کرد، خوشحال می‌شم سری به صفحه اصلی سایت ما بزنی و از بقیه مطالب و ابزارهای کاربردی‌مون هم دیدن کنی. همیشه سعی می‌کنیم بهترین منابع رو برای جامعه برنامه‌نویسی فراهم کنیم.

پرسش‌های متداول (FAQ)

Local Storage چه مقدار داده را می‌تواند ذخیره کند؟

معمولاً Local Storage بین 5 تا 10 مگابایت داده را می‌تواند ذخیره کند، البته این مقدار بسته به مرورگر متفاوت است.

آیا Local Storage برای ذخیره اطلاعات حساس امن است؟

خیر، Local Storage برای ذخیره اطلاعات حساس مانند رمز عبور یا توکن‌های احراز هویت توصیه نمی‌شود، زیرا اطلاعات بدون رمزنگاری ذخیره شده و در معرض حملات XSS قرار دارند.

تفاوت Local Storage و Session Storage چیست؟

Local Storage داده‌ها را به‌صورت دائمی ذخیره می‌کند و حتی پس از بسته شدن مرورگر نیز باقی می‌مانند، در حالی که Session Storage فقط تا زمانی که تب مرورگر باز است، داده‌ها را نگه می‌دارد.

چگونه یک آبجکت را در Local Storage ذخیره و بازیابی کنم؟

برای ذخیره یک آبجکت، ابتدا آن را با `JSON.stringify()` به رشته تبدیل کنید (`localStorage.setItem(key, JSON.stringify(object))`). برای بازیابی، ابتدا رشته را با `localStorage.getItem(key)` دریافت کرده و سپس با `JSON.parse()` آن را به آبجکت بازگردانید. توابع کمکی `ls.set` و `ls.get` که در مقاله معرفی شدند، این کار را برای شما به‌صورت خودکار و ایمن انجام می‌دهند.

 

بهترین کدهای آماده برای مدیریت Local Storage در مرورگر

وقتی صحبت از طراحی وب‌سایت‌های مدرن و پویا می‌شود، ذخیره‌سازی موقت داده‌ها در سمت کاربر یکی از دغدغه‌های اصلی برنامه‌نویسان است. لوکال استوریج (Local Storage) یک ابزار فوق‌العاده کاربردی در مروگر است که به شما اجازه می‌دهد تا اطلاعاتی مثل تنظیمات قالب تاریک، اطلاعات سبد خرید یا توکن‌های امنیتی را بدون تاریخ انقضا ذخیره کنید. اما استفاده مستقیم از متدهای پیش‌فرض جاوااسکریپت برای این کار، همیشه بهینه نیست و ممکن است در پروژه‌های بزرگ چالش‌برانگیز شود.

در این مقاله قصد داریم کاربردی‌ترین و بهترین کدهای آماده و بهینه را برای مدیریت حرفه‌ای Local Storage در اختیارتان قرار دهیم تا راندمان کدنویسی خود را به حداکثر برسانید.

خلاصه کاربردی: نقشه راه مدیریت Local Storage

۱. کلاس کمکی (Wrapper)

تبدیل خودکار آبجکت‌ها به رشته (JSON) و مدیریت خطاهای ناشی از Private Mode.

۲. منقضی‌سازی داده‌ها (TTL)

تعیین زمان انقضا برای داده‌ها (مثلاً حذف خودکار کش بعد از ۲۴ ساعت).

۳. مانیتورینگ حجم و خطایابی

محاسبه فضای مصرف شده و جلوگیری از کرش کردن مروگر با خطای پر شدن حافظه.

چرا به کدهای آماده برای Local Storage نیاز داریم؟

هر چند که استفاده از دستوراتی مثل localStorage.setItem() بسیار ساده به نظر می‌رسد، اما در دنیای واقعی و پروژه‌های تجاری با چالش‌های زیادی مواجه خواهید شد. برای مثال، لوکال استوریج فقط رشته‌ها (Strings) را می‌پذیرد. اگر بخواهید یک آرایه یا یک شیء (Object) را بدون تبدیل کردن به رشته ذخیره کنید، با مشکل مواجه می‌شوید.

مشکل دوم مدیریت خطاهاست. اگر مرورگر کاربر در حالت ناشناس (Private Mode) باشد یا حافظه ۵ مگابایتی لوکال استوریج پر شده باشد، مرورگر خطا صادر کرده و وب‌سایت شما ممکن است از کار بیفتد. برای رفع این چالش‌ها، بهرگیری از کدهای بهینه‌سازی شده و آماده در پروژه‌های وب امری حیاتی است. این کدها معمولاً در توسعه قالب‌های اختصاصی، وب‌اپلیکیشن‌ها و حتی در کدهای آماده وردپرس که با بخش فرانت‌اند در ارتباط هستند، بسیار پرکاربردند.

۱. کلاس Wrapper کامل (پیشرفته‌ترین ابزار مدیریت)

این کلاس آماده جاوااسکریپتی به شما کمک می‌کند تا بدون نگرانی از بابت نوع داده (آرایه، آبجکت، عدد یا بولین)، اطلاعات خود را ذخیره و بازخوانی کنید. این کد به طور خودکار عملیات تبدیل داده‌ها با JSON.stringify و JSON.parse را انجام می‌دهد. این متدها را می‌توانید در پروژه‌های بزرگ خود که با تکه‌کدهای جاوااسکریپت توسعه می‌دهید، ادغام کنید.

class CoolStorage {
    // ذخیره داده با تبدیل خودکار به رشته
    static set(key, value) {
        try {
            const serializedValue = typeof value === 'object' ? JSON.stringify(value) : value;
            localStorage.setItem(key, serializedValue);
            return true;
        } catch (error) {
            console.error("خطا در ذخیره‌سازی داده در لوکال استوریج:", error);
            return false;
        }
    }

    // بازخوانی داده با تبدیل خودکار به نوع اصلی
    static get(key) {
        const value = localStorage.getItem(key);
        if (!value) return null;
        
        try {
            // تلاش برای تبدیل به آبجکت یا آرایه
            return JSON.parse(value);
        } catch {
            // در صورتی که داده یک رشته معمولی باشد
            return value;
        }
    }

    // حذف یک کلید خاص
    static remove(key) {
        localStorage.removeItem(key);
    }

    // پاکسازی کل حافظه لوکال استوریج دامین
    static clear() {
        localStorage.clear();
    }
}
مثال واقعی استفاده:

// ذخیره کردن یک آرایه شلوغ
CoolStorage.set('user_roles', ['admin', 'editor', 'author']);
// دریافت اطلاعات به صورت آرایه واقعی و تمیز
const roles = CoolStorage.get(‘user_roles’); // output: Array

۲. ذخیره‌سازی داده‌ها با تاریخ انقضا (Expiry Time)

یکی از بزرگ‌ترین ضعف‌های Local Storage این است که داده‌ها تا زمان پاک کردن کش مرورگر توسط کاربر، به صورت دائمی باقی می‌مانند. کوکی‌ها دارای تاریخ انقضا هستند اما لوکال استوریج این قابلیت را ندارد. قطعه کد زیر یک سیستم انقضا (TTL یا Time-To-Live) روی لوکال استوریج پیاده‌سازی می‌کند تا پس از زمان مشخص، داده‌ها به طور خودکار باطل شوند.

const ExpirableStorage = {
    // ذخیره داده با تعیین زمان انقضا به میلی‌ثانیه
    setItem(key, value, ttl) {
        const now = new Date();
        const item = {
            value: value,
            expiry: now.getTime() + ttl, // زمان فعلی + مدت اعتبار به میلی ثانیه
        };
        localStorage.setItem(key, JSON.stringify(item));
    },

    // دریافت داده و بررسی وضعیت انقضای آن
    getItem(key) {
        const itemStr = localStorage.getItem(key);
        if (!itemStr) return null;

        try {
            const item = JSON.parse(itemStr);
            const now = new Date();
            
            // بررسی اینکه آیا زمان انقضا فرا رسیده است یا خیر
            if (now.getTime() > item.expiry) {
                localStorage.removeItem(key); // حذف خودکار داده منقضی شده
                return null;
            }
            return item.value;
        } catch {
            return itemStr; // اگر فرمت داده جی‌سان نبود
        }
    }
};
مثال استفاده برای کش کردن توکن احراز هویت به مدت ۱ ساعت:

const ONE_HOUR = 3600000; // ۶۰ دقیقه به میلی‌ثانیه
ExpirableStorage.setItem('auth_token', 'JWT_TOKEN_HERE', ONE_HOUR);
// فردا پس از یک روز این کد مقدار null برمی‌گرداند:
const token = ExpirableStorage.getItem(‘auth_token’);

۳. همگام‌سازی اطلاعات بین چند تب مرورگر به صورت زنده

تصور کنید کاربر شما دو تب مختلف از وب‌سایت شما را به صورت همزمان باز کرده است. اگر کاربر در تب اول از حساب کاربری خود خارج شود، تب دوم چطور باید متوجه این موضوع شود؟ با استفاده از رویداد storage می‌توانید تغییرات حافظه را مانیتور کرده و تب‌های دیگر را به صورت آنی هماهنگ کنید. این تکنیک تجربه کاربری بی‌نظیری خلق می‌کند و به صورت گسترده با کدهای آماده سی‌اس‌اس ترکیب می‌شود تا تغییر وضعیت تم‌های تیره/روشن بلافاصله در تمام تب‌ها رندر شوند.

// شنونده تغییرات حافظه در تب‌های جانبی
window.addEventListener('storage', (event) => {
    if (event.key === 'theme') {
        const newTheme = event.newValue;
        // اعمال تغییرات به صورت بلادرنگ در تب جاری
        if (newTheme === 'dark') {
            document.body.classList.add('dark-mode');
        } else {
            document.body.classList.remove('dark-mode');
        }
        console.log(`تم سایت در یک تب دیگر به ${newTheme} تغییر یافت!`);
    }
});

۴. متد بررسی ظرفیت و حافظه باقی‌مانده

ظرفیت استاندارد لوکال استوریج در اکثر مرورگرها بین ۵ تا ۱۰ مگابایت است. ذخیره بیش از حد اطلاعات باعث افت سرعت لود صفحات و یا بروز خطا در عملکرد فرانت‌اند وب‌سایت می‌شود. با استفاده از این قطعه کد فوق‌العاده کاربردی، می‌توانید دقیقاً بسنجید چه مقدار فضا توسط دامنه شما اشغال شده است.

function checkStorageLimit() {
    let totalSize = 0;
    for (let i = 0; i < localStorage.length; i++) {
        const key = localStorage.key(i);
        const value = localStorage.getItem(key);
        // محاسبه تقریبی بر اساس کاراکترهای یونیکد (هر کاراکتر ۲ بایت)
        totalSize += (key.length + value.length) * 2;
    }
    
    const sizeInKB = (totalSize / 1024).toFixed(2);
    const sizeInMB = (totalSize / (1024 * 1024)).toFixed(2);
    
    return {
        kb: sizeInKB,
        mb: sizeInMB,
        usagePercentage: ((totalSize / (5 * 1024 * 1024)) * 100).toFixed(2) + '%'
    };
}

// روش فراخوانی:
console.log("فضای اشغال شده:", checkStorageLimit());

مقایسه روش خام و استفاده از کدهای بهینه

در جدول زیر تفاوت استفاده از کدهای بهینه‌سازی شده آماده با توابع استاندارد جاوااسکریپت آورده شده است تا دلیل برتری روش‌های ارائه شده در این مقاله را بهتر درک کنید.

ویژگی / عملکرد متدهای خام مرورگر کلاس‌های بهینه (پست حاضر)
مدیریت آبجکت و آرایه غیرممکن (فقط به صورت رشته ذخیره می‌کند) هندل خودکار با JSON.stringify و parse
کنترل خطاهای سیستمی ندارد (باعث توقف کل کدهای JS می‌شود) استفاده از بلوک‌های امن try/catch
تعیین تاریخ انقضا پشتیبانی نمی‌شود (داده‌ها ابدی هستند) سیستم پیشرفته TTL برای انقضای موقت داده‌ها

عیب‌یابی سریع و رفع ارورهای متداول

اگر هنگام استفاده از Local Storage در کدهای خود دچار مشکل شدید، این لیست خطایابی سریع به شما کمک می‌کند تا ایراد را در کوتاه‌ترین زمان پیدا کنید:

  1. ارور QuotaExceededError چیست؟
    این ارور یعنی حافظه لوکال استوریج کاربر پر شده است. برای حل آن، حتماً از کدهای کنترل حافظه استفاده کرده و کش‌های قدیمی را پاک کنید.
  2. چرا در محیط SSR (مانند Next.js) ارور localStorage is not defined دریافت می‌کنم؟
    از آنجایی که فریم‌ورک‌های رندر سمت سرور ابتدا کدها را روی سرور اجرا می‌کنند و سرور به مرورگر دسترسی ندارد، این ارور رخ می‌دهد. برای رفع آن، کد خود را درون شرط if (typeof window !== 'undefined') قرار دهید.
  3. عدم نمایش داده در مرورگر سافاری نسخه iOS چیست؟
    در حالت Private مرورگر سافاری، لوکال استوریج به کل غیرفعال است یا ظرفیت آن صفر در نظر گرفته می‌شود. نوشتن یک کلاس Wrapper ایمن که از وقوع کرش جلوگیری کند ضروری است.

در نهایت، اگر می‌خواهید کدهای تمیزتر، ابزارهای کاربردی‌تر و پروژه‌های استانداردتری را خلق کنید، حتماً سری به بخش عظیم مجموعه کدهای آماده بزنید. در این منبع غنی می‌توانید به آرشیو گسترده‌ای از فایل‌های مورد نیاز برای فرانت‌اند وب دسترسی داشته باشید، از جمله سورس‌های آماده HTML که پیاده‌سازی این کدهای لوکال استوریج را برایتان چندین برابر سریع‌تر می‌کند. همچنین اگر به توسعه بک‌اند و پردازش اسکریپت‌ها علاقه‌مندید، بخش کدهای پایتون برای پروژه‌های پردازش داده و ذخیره‌سازی ابری بسیار مفید خواهد بود.

سوالات متداول کاربران

آیا اطلاعات ذخیره شده در لوکال استوریج امن هستند؟

خیلی خیر! اطلاعات موجود در Local Storage با جاوااسکریپت معمولی قابل خواندن هستند و نباید اطلاعات حساس مثل رمزهای عبور کاربران یا اطلاعات کارت بانکی را در آن ذخیره کرد.

تفاوت Local Storage با Session Storage در چیست؟

اطلاعات ذخیره شده در لوکال استوریج به صورت دائمی باقی می‌مانند، اما داده‌های Session Storage به محض بستن پنجره یا تب مرورگر به طور خودکار پاک می‌شوند.

آیا مرورگرهای مختلف ظرفیت‌های ذخیره‌سازی متفاوتی دارند؟

بله، اما استاندارد پیش‌فرض در بیشتر مرورگرها ۵ مگابایت است که برای کارهای رایج طراحی وب و نگه داشتن تنظیمات بسیار فراتر از نیاز است.

Table of Contents

آخرین نوشته‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *