# ترحيل الأشكال المحفوظة القديمة عمدا

> حدّد كيفية قراءة البيانات التي حفظتها إصدارات سابقة من اللعبة، ورحّل الصيغ المعروفة قبل استخدامها.

- URL: https://oneshotgems.ai/ar/topics/local-storage-game-versioning
- الفئة: لمطوري الألعاب
- النوع: دليل
- آخر تحديث: 5 أكتوبر 2026

يسأل اختبار حالة الحفظ ما إذا كانت القيم المقصودة قائمة أم لا. يجيب إصدار الإصدار على سؤال مختلف: ما الذي يجب أن يحدث عندما يقرأ إصدار لاحق للعبة البيانات المكتوبة بواسطة إصدار أقدم؟ إذا قام الإصدار الأول بتخزين أفضل نتيجة كرقم وقام الإصدار الثاني بتخزين كائن ملف تعريف، فإن قراءة الشكل القديم كما لو كان جديدًا يمكن أن يؤدي إلى كسر القائمة أو تجاهل التقدم بصمت. ضع نسخة بجانب البيانات المحفوظة واكتب ترحيلًا صريحًا للأشكال السابقة المعروفة.

## احفظ القيم في كائن بيانات صغير ذي إصدار

بدلاً من حفظ النتيجة المجردة مثل 240، قم بتخزين كائن JSON مثل { version: 2, bestScore: 240, settings: { sound: true } }. عند التحميل، قم بتحليل النص، وتأكد من أنه كائن، وافحص نسخته قبل استخدام الحقول. يمكن لـ JSON.parse أن يلقي خطأ SyntaxError لـ JSON غير الصالح، لذا تعامل مع النص المشوه باستخدام احتياطي محدد بدلاً من السماح لبدء التشغيل بالتوقف قبل أن يتمكن المشغل من البدء.

اجعل كائن البيانات صغيرًا ووثّق معنى كل إصدار. لا تعتبر رقم الإصدار وحده تحققًا كافيًا؛ فقد تكون القيمة الموسومة بالإصدار 2 غير مكتملة أو من نوع خاطئ. تحقّق من الحقول التي يعتمد عليها الإصدار الحالي فعلًا، مثل bestScore التي يجب أن تكون عددًا منتهيًا غير سالب، وتفضيل الصوت الذي يجب أن يكون قيمة منطقية.

## اكتب عملية ترحيل لكل تنسيق قديم مدعوم

يمكن لعملية الترحيل من الإصدار 1 تحويل الرقم القديم إلى كائن البيانات الجديد، وإضافة إعداد افتراضي، ثم حفظه بتنسيق الإصدار 2. عند دعم عدة إصدارات سابقة، نفّذ عمليات الترحيل بالتتابع: من الإصدار 1 إلى 2، ثم من 2 إلى 3. اختبر كل حالة اختبار على حدة، بما في ذلك مفتاح مفقود، وJSON مشوه، وإصدار مستقبلي غير معروف، وقيمة لم تُكتب بالكامل. قرر ما إذا كنت ستحتفظ بالبيانات غير المعروفة أو تتجاهلها أو تعيد ضبطها، واعرض رسالة استرداد عند الحاجة.

## راعِ حدود تخزين المتصفح

تصف MDN localStorage بأنها بيانات مرتبطة بالأصل وقد تستمر بين جلسات المتصفح. لكن توفرها ومحتواها ليسا نسخة احتياطية مضمونة للحساب. لا تحفظ فيها أسرارًا أو قرارات يجب الوثوق بها. إذا تعذرت على اللعبة قراءة ملف الحفظ، فاسمح ببدء محدد من جديد وتجنب إعادة محاولة عملية الترحيل الفاشلة نفسها عند كل تشغيل.

## أسئلة

**هل يجب علي مسح جميع عمليات الحفظ عند تغيير التنسيق؟** فقط عندما يكون هذا قرارًا صريحًا بشأن المنتج. إذا كان من الممكن تعيين القيم المهمة بأمان، فيمكن لعملية ترحيل صغيرة تم اختبارها الحفاظ عليها؛ وإلا حدد احتياطيًا واضحًا واشرح إعادة التعيين.

**هل يجعل حقل الإصدار بيانات التخزين المحلي موثوقة؟** لا، فهو يحدد الشكل المتوقع حتى تتمكن اللعبة من ترحيله أو رفضه. قد تظل البيانات مفقودة، أو مشوهة، أو قديمة، أو غير متوفرة، لذا تحقق من صحتها قبل استخدامها.

## اتبع فضولك

- [اختبار حالة الحفظ في لعبة المتصفح](https://oneshotgems.ai/ar/topics/testing-game-save-state): تحقق مما تحفظه لعبة المتصفح، وما تتم إعادة تعيينه، وكيف تتصرف عندما تكون البيانات المخزنة مفقودة أو قديمة أو تتغير بين الجلسات.
- [اختبارات الانحدار للألعاب الصغيرة](https://oneshotgems.ai/ar/topics/game-regression-testing): حافظ على عمل اللعبة بعد التعديلات بقائمة قصيرة لاختبارات الانحدار تركز على آلية اللعب واحتساب النقاط وإعادة التشغيل والحالات الحدّية القريبة.

## للمزيد من القراءة

- [MDN التخزين المحلي](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)
- [MDN JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)

---
الصفحة الأساسية: https://oneshotgems.ai/ar/topics/local-storage-game-versioning
