اذهب إلى المحتوى
  • 0

مشكلة تخزين الصور في الذاكرة المؤقتة وإختيار الـ dynamic caching المناسب

Samer Alashqar

السؤال

السلام عليكم..

لدي موقع يحتوي على صفحة marketplace وهذه الصفحة يستطيع اي شخص مصرح له باضافة منتج فيها عن طريق صورة المنتج. المشكلة هي انني لا اريد ارسال request للسيرفر باستمرار لجلب صورة المنتج لكل شخص يدخل هذه الصفحة، بل اريد تخزينه بال cache.

حاولت ان اخرج بحل لكن لم اعرف والسبب هو انه من الممكن اضافة منتج في اي وقت من قبل المستخدمين.

بالاضافة عند اضافة اي منتج اريد جلبه مباشرة الى ال marketplace لذلك لا اريد استخدام expiration time لل cache.

هل هناك حل ؟

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

نعم، يمكنك حل المشكلة باستخدام تقنية "صورة مؤقتة" (Image Cache)، حيث تقوم بتخزين الصورة المرسلة من قبل المستخدمين في الذاكرة المؤقتة للخادم لفترة محددة، دون الحاجة لإجراء طلبات مستمرة لجلب الصورة.

استخدم مكتبة مؤقتة في Python مثل cachetools لإنشاء ذاكرة مؤقتة لتخزين الصور.

from cachetools import TTLCache

# إنشاء ذاكرة مؤقتة بحجم محدد وبدون وقت انتهاء صلاحية
image_cache = TTLCache(maxsize=1000)

عند استلام صورة من المستخدم، قم بتخزينها في ذاكرة المؤقتة واستخدم معرف فريد لكل صورة (مثل اسم الملف أو رقم الصورة) لاسترجاعها فيما بعد.

def store_image(image_id, image_data):
    image_cache[image_id] = image_data

عندما يقوم أي مستخدم بزيارة صفحة الـ Marketplace، قم بالتحقق من وجود الصورة المطلوبة في ذاكرة المؤقتة واسترجعها مباشرة دون الحاجة لإرسال طلب للسيرفر.

def get_image(image_id):
    return image_cache.get(image_id)

عند إضافة منتج جديد في الـ Marketplace، قم بتخزين الصورة المصاحبة في ذاكرة المؤقتة لتكون متاحة مباشرة للعرض في الصفحة.

def add_product(product_data, product_image):
    # تخزين بيانات المنتج
    # ...
    
    # تخزين الصورة في ذاكرة المؤقتة
    store_image(product_id, product_image)

بهذا الحل، ستتمكن من تخزين الصور في الذاكرة المؤقتة واسترجاعها مباشرة منها دون الحاجة لإرسال طلبات للسيرفر في كل مرة يتم فيها عرض الصفحة. و

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكن استخدام تقنية caching في تخزين الصور المستخدمة في صفحة marketplace، وذلك بتخزين الصور في cache عندما تتم تحميلها لأول مرة. وعندما يتم طلب الصورة مرة أخرى، يتم استخدام الصورة المخزنة في cache بدلاً من إرسال طلب جديد إلى السيرفر لجلب الصورة.

لتفعيل caching في صفحة marketplace، يمكن إضافة header إلى الاستجابة الخاصة بالصور، والذي يحدد مدة صلاحية الصورة في cache. ولكن، في حالة marketplace التي تسمح بإضافة المنتجات في أي وقت، فإن استخدام expiration time لل cache ليس مناسبًا، بسبب أن الصور المضافة حديثًا لن تكون متاحة بشكل دائم في نفس الوقت.

لذلك، يمكن استخدام تقنية caching المتصفح الخاص بالمستخدم لتخزين الصور المستخدمة في صفحة marketplace، وذلك بتحميل الصورة مرة واحدة فقط وتخزينها في cache. وعندما يتم طلب الصورة مرة أخرى، يتم استخدام الصورة المخزنة في cache بدلاً من إرسال طلب جديد إلى السيرفر لجلب الصورة.

يمكن تنفيذ هذا الأمر باستخدام JavaScript، وذلك عن طريق إضافة معرف فريد للصورة، مثل رقم الدخول الفريد للمستخدم الذي قام بتحميل الصورة. وعندما يتم تحميل الصفحة مرة أخرى، يمكن استخدام هذا المعرف للبحث عن الصورة المخزنة في cache، وإضافتها إلى الصفحة.

بالإضافة إلى ذلك، يمكن استخدام خدمة CDN (Content Delivery Network) لتخزين الصور، وهي خدمة تسمح بتخزين الملفات الكبيرة مثل الصور وتوفيرها من سيرفرات مختلفة حول العالم، مما يؤدي إلى تحسين سرعة تحميل الصفحة.

ومن الممكن أيضًا استخدام تقنية lazy loading لتحميل الصور بشكل تدريجي بمجرد الوصول إلى الجزء المرئي من الصفحة، وبالتالي تجنب تحميل الصور الغير مرئية في الصفحة مما يوفر استخدام الـ cache بكفاءة أكبر.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لما لا تستخدم cache ذا طابع زمني (time-based cache)، بدلاً من تخزين الصورة نفسها في الذاكرة المؤقتة، أي بتخزين رابط (URL) الصورة في الذاكرة المؤقتة مع معلومات إضافية مثل وقت إضافة المنتج ورقم المستخدم الذي أضافه، وعند طلب الصفحة marketplace، قم بفحص الذاكرة المؤقتة للحصول على رابط الصورة المخزنة.

وإذا تم إضافة منتج جديد، عليك بتحديث الرابط المخزن في الذاكرة المؤقتة بالرابط الجديد، مع معلومات الوقت ورقم المستخدم، وبالطبع ستحتاج إلى تحديث الذاكرة المؤقتة بشكل متزامن وآمن للتأكد من عدم حدوث تضارب في البيانات.

أو  استخدام استراتيجية التعتيم المستندة إلى التجزئة (Hash-based Invalidation) لتخزين صور المنتجات في الذاكرة المؤقتة.

أي يجب عليك أولاً إنشاء تجزئة (Hash) لملف صورة المنتج، حيث تُستخدم تلك التجزئة كمفتاح لتخزين صورة المنتج في الذاكرة المؤقتة.

وعندما يقوم مستخدم بإضافة منتج جديد، ستقوم بإنشاء تجزئة لملف صورة المنتج والتحقق مما إذا كان موجودًا في الذاكرة المؤقتة، وإذا لم يكن موجودًا، ستقوم بتخزين صورة المنتج في الذاكرة المؤقتة باستخدام التجزئة كمفتاح.

وعند طلب صورة المنتج من قبل مستخدم آخر، ستقوم أولاً بالتحقق مما إذا كانت الصورة موجودة في الذاكرة المؤقتة، فإذا كانت موجودة، ستقوم بتقديم الصورة مباشرة من الذاكرة المؤقتة، وإذا لم تكن موجودة، ستقوم بجلب الصورة من الخادم وتخزينها في الذاكرة المؤقتة.

وبإمكانك الاستعانة بـ CDN (شبكة توزيع المحتوى) أو وكيل عكسي (reverse proxy).

وانتبه إلى أن الـ hash-based caching والـ time-based caching هما طريقتان مختلفتان.

فالـ hash-based caching يستخدم التجزئة (hash) للمورد لتحديد ما إذا كان مخزنًا في الذاكرة المؤقتة، والتجزئة هي معرف فريد للمورد، وتُستخدم لضمان تقديم الإصدار الصحيح للمورد.

أما الـ time-based caching يستخدم وقت آخر تعديل للمورد لتحديد ما إذا كان مخزنًا في الذاكرة المؤقتة، وإذا لم يتم تعديل المورد منذ آخر مرة تم فيها تخزينه في الذاكرة المؤقتة، يتم تقديم النسخة المخزنة في الذاكرة المؤقتة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...