مرحبًا بالفريق،
يتولى فريقنا إدارة منتديات Discourse، ونواجه حاليًا مشاكل تتعلق بطلبات مكررة على متصفح Chrome، بينما لا تظهر هذه المشكلة على Firefox أو Safari. أظن أن هذه المشكلة مرتبطة بـ Service Workers - Workbox.
كيف يبدو الإعداد الحالي؟
- لدينا نطاق رئيسي: https://example.com
- تُستضاف الملفات النصية (scripts) في مسار فرعي: https://example.com/assets/myScript.js
- يقوم myScript بإجراء طلب GET إلى نقطة نهاية خارجية: https://foobar.com/
ما هي المشكلة؟
- عند زيارة المنتدى لأول مرة (أو عند التحديث القسري)، يُرسل المتصفح طلبًا واحدًا فقط.
- في الطلب الثاني، يُرسل المتصفح طلبين: أحدهما من الملف الذي يُقدَّم عبر Service Worker، والآخر من fetchWrapper.mjs - workbox/packages/workbox-core/_private/fetchWrapper.mjs at 194cdeb63d5abb21490f88f01f02f4bcf7e6d54b · GoogleChrome/workbox · GitHub
معلومات إضافية:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L18-L35 - هذا هو الإعداد المسؤول عن إنشاء Service Workers. يعتمد على استراتيجية “الشبكة أولاً” (Network first).
كيف يمكننا حل هذه المشكلة؟
تمامًا كما هو الحال مع المصادقة https://github.com/discourse/discourse/blob/master/app/assets/javascripts/service-worker.js.erb#L10، يمكننا تعريض مسار /analytics/ كطريق (route) أو جعله قابلًا للتكوين بحيث يسمح للمستخدمين بإرسال مصفوفة من المسارات المخصصة، والتي تُضبط على NetworkOnly. إعدادنا الحالي يعمل على Docker وEC2، لذا يجب تعريض هذا الإعداد هناك أيضًا.