سؤال

اليوم طُرح سؤال هنا وليس لدي إجابة واضحة.

افترض أننا نقوم بتسلسل وتصغير جميع ملفات الموارد (CSS وJavascript) والإعلان عنها في "الصفحة الرئيسية".

في تطبيق متعدد الصفحات، إذا تغير ملف CSS، فسيتم إعادة شحنه عند تحميل الصفحة الكاملة التالية.

في تطبيق من صفحة واحدة، يمكن للمستخدم الاستمرار في العمل لعدة أيام وعدم إعادة شحن الصفحة الرئيسية حيث يتم الإعلان عن ملفات CSS مطلقًا.لن يرى المستخدم التغييرات أبدًا حتى يتم إصدار Ctrl-F5.

أنا متأكد من أن هناك من فكر في هذا بالفعل ولديه تجربة لمشاركتها :)

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

لذلك، أي أفكار أي شخص؟:)

راجع للشغل، نحن نستخدم AngularJS إذا كان ذلك يمكن أن يساعد في حل معين.

شكرًا!

هل كانت مفيدة؟

المحلول

لدي من خلال هذه المشكلة نفسها. الحل الخاص بي الذي هو أمر آيني ولا يجوز الاستجابة لمعاييرك:

عندما أقوم بتعبئة تطبيقات My Front-App و My Server-App، أشارك ملف التكوين الذي يحتوي على الإصدار الحالي من التطبيق الأمامي.

الجانب الأمامي: 75٪ من طرقي تتغير بشكل ضئيل استدعاء WebService (تغيير الطريق حل). لذلك في كل مرة استدعاء الخادم الخاص بي، أدرج رأس HTTP مخصص (أو Post Param) يحتوي على إصدار العميل من التطبيق الأمامي.

جانب الخادم: أقارن إصدار التطبيق الأمامي (واحد في متصفح المستخدم، الذي تم تحميله آخر مرة يتم تحديث المستخدم / محمل الصبا) مع إصدار التطبيق الأمامي من ملف التكوين المشترك:

  • إذا تطابق الإصدار: لا أفعل شيئا.
  • إذا كان الإصدار لا يتطابق معه، فأرسل رمز خطأ حالة HTTP مخصص (418 على سبيل المثال)

ثم الجانب الأمامي: أضفت اعتراض استجابة تعترض أي رمز خطأ 418 وقم بإجراء تحديث للقوة من التطبيق بأكمله

هذا كل شيء. في الأساس الحدث الذي "تحقق" إذا كان إصدار التطبيق الأمامي هو الأحدث هو تغيير الطريق (يستدعي WS عبر Ajax). ولكن يمكنك إضافة بعض الفاصل الإضافي لا حصر له يدعو WS مخصصة لكل 5 دقائق أو نحو ذلك ... يمكنني إضافة بعض الكود إذا لزم الأمر.

نأمل أن يساعد هذا؛)

نصائح أخرى

بافتراض أنك تستخدم توجيه AngularJS عبر خدمة وموفر المسار $، فيمكنك استخدامه $routeChangeSuccess حدث لتنفيذ طلب الخادم إذا كانت هناك تغييرات مهمة تحتاج إلى تغيير؛إذا كان هناك أي منها، فيمكنك إجراء window.location.reload() لتحديث الصفحة والحصول على جميع الموارد ونصوص html المحدثة.

يمكن تغيير العملية التالية اعتمادًا على الطريقة التي تريد تنفيذها بها:

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

2.قم بإنشاء خدمة تحتوي على كافة المعلومات الضرورية (إصدارات الملفات من الخادم) وطرق تنفيذ طلب خادم إلى الخادم الخاص بك للتحقق من إصدارات الملفات الحالية المخزنة في الخدمة.

3.يستخدم $routeChangeSuccess حدث لتنفيذ طلب خادم باستخدام الخدمة التي قمت بإنشائها في الخطوة 2, ، إذا أعاد الطلب تأكيدًا صالحًا بوجود تغييرات، فقم بإعادة تحميل صفحة القوة عبر window.location.reload().

قررت إضافة أفكاري النهائية كإجابة هنا أيضا:

ذهبنا لحل مخفض الآن.

كما لدينا خدمة "وكيل" أي (مرة أخرى الآن)، فإن الوحيد الذي يتفاعل مع هذا التطبيق، أضفنا إصدار التطبيق على رأس HTTP لجميع الردود.إذا تلقينا إصدار أحدث، فسيظهر منبثق إخطار المستخدم ويتم إصدار تحديث الصفحة الكاملة ...

لن يعمل هذا الحل من أجل التطبيقات التي لا تملك خدمة "خاصة" الخاصة بها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top