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

السؤال

نشر

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

أقوم حاليا بتنفيذ مشروع متجر إلكتروني باستخدام مكتبة React و إطار عمل Laravel

حاليا أحاول تنفيذ خاصية "السلة" - Cart, كالتالي: عندما يقوم المستخدم بالضغط على زر "أضف إلى السلة" الموجود على كل منتج فإن هذا المنتج سيتم إرساله إلى السلة و سيزداد عداد السلة بواحد

أريد أن أعرف ما هو المكان الأنسب لتخزين عناصر السلة

قمت بإستخدام قاعدة البيانات والـ API لهذا الغرض لكن عملية إرسال المنتج إلى السلة وزيادة عداد السلة بواحد يأخذ وقتا أكثر مما ينبغي (الوقت بين إستقبال السيرفر الطلب وإرساله الإستجابة)

فكرت في استخدام الكوكيز لكني علمت أن مساحة الكوكيز محدودة ولا تتجاوز 4096 بايت, فإذا قام المستخدم بإضافة الكثير من المنتجات فهذا سيسبب مشكلة حسب ما يبدو وكذلك Laravel تقوم بتشفير محتوى الكوكيز بالتالي لا أستطيع قرائته بجافاسكريبت

أما بالنسبة للـ session فالمشكلة فيه أن عناصر السلة ستختفي بمجرد أن يقوم المستخدم بإنهاء الجلسة (إغلاق المتصفح وما إلى ذلك)

فما هي إذن أنسب طريقة لتنفيذ هذه الخاصية؟

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

يوجد العديد من الطرق منها التي ذكرتها ومنها التي لم تذكرها وكل طريقة لها مميزات وعيوب وأيضا لها خصائص يجب توافرها لتنفيذها وأيضا تعتمد بشكل كبير على الخصائص التي تريدها في مشروعك.

فأولا لو أردت أن بيانات السلة تكون موجودة في حساب المستخدم أى إذا قام بتسجيل الدخول من أى مكان سواء الهاتف أو الحاسوب أو في أكثر من مكان وتريد تلك البيانات أن تكون متزامنة ومتاحة . أى نفرض أنه أضاف منتج من خلال الهاتف و من ثم فتح المتصفح على الحاسوب يجب حينها أن يرى المنتجات التي أضافها من خلال الهاتف . هنا يجب أن يتم تخزين تلك البيانات من خلال الخادم الخاص ب Laravel .أى يجب عليك هنا إستخدام قاعدة البيانات وتوفير API لإضافة المنتجات في السلة وإحضار تلك المنتجات. وهنا لن تنفع خاصية ال session أو ال cookies وغيرها والتي تعتمد على الجافاسكريبت .

أما إذا أردت أن تكون السلة غير متزامنه فيمكنك إستخدام جميع ما قلته ولكن لكل طريقة حدود .

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

أما ال cookies فيمكنك إيقاف تشفير تلك البيانات إذا أردت من خلال laravel ولكنها فقط لن تتجاوز 4096 بايت وهذا ليس جيدا ولا أنصح به.

أما بخصوص ال session يمكنك إستخدامها ولكن سيتوجب حفظ ال id الخاص بال session في قاعدة البيانات وبذلك عندما يقوم المستخدم في أى وقت بستجيل الدخول سيمكنك إستخدام ال session_id وإسترجاع تلك البيانات مباشرة ولكنها أيضا طريقة لا أنصح بها.

الأفضل لك هو إستخدام Local Storage حيث تقوم بحفظها في ال localstorage لديك ويمكنك إحضارها في أى وقت من خلال javascript ولا يتم مسحها إلا إذا إستخدمت كود جافاسكريبت أى لا تقلق من ناحية إنتهاء الوقت أو إغلاق المتصفح ولكن كما وضحت لك تلك الطريقة لن تجعل منتجات السلة متزامنة.

  • 0
نشر

من الأفضل الإعتماد على Local Storage وسيتم تخزين البيانات على جهاز المستخدم, وتستطيع الوصول إليها من خلال جافاسكريبت، وستبقى المنتجات موجودة في السلة  عند عودة المستخدم مرة أخرى.

لكن للإجابة على سؤالك بشكل جيد، تحتاج إلى الإجابة على هل منتجاتك محدودة العدد؟ بمعنى، هل تحتاج إلى حجز منتج لمدة 10 دقائق حتى يتمكن المستخدم من شرائه؟

هل تريد إجراء تحليلات عليها وإرسال رسائل بريد إلكتروني لاحقًا؟ هل تريد تذكرها عبر الأجهزة بحيث تصبح متزامنة على أجهزة المستخدم؟ هل تريد من المستخدمين تسجيل الدخول أم الشراء مباشرًة؟

عملية التخزين على جانب المتصفح تعمل بشكل جيد فقط في حال كان المشروع صغير لديك، ودائمًا من الأفضل حفظ عناصر السلة في جانب الخادم

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...