مساعدة مع العدوانية جافا سكريبت التخزين المؤقت

StackOverflow https://stackoverflow.com/questions/54475

  •  09-06-2019
  •  | 
  •  

سؤال

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

حتى يجبر المتصفح لمسح ذاكرة التخزين المؤقت لا أرى التغييرات.

هذا هو خادم ويب التكوين ؟ هل أنا بحاجة إلى تعيين ملفات جافا سكريبت أبدا ذاكرة التخزين المؤقت ؟ لقد رأيت بعض تقنيات مثيرة للاهتمام في Google Web Toolkit حيث أنها في الواقع خلق جديد جافا سكريبت اسم الملف في كل مرة يتم تحديث.وأعتقد أن هذا هو منع وكلاء المتصفحات من الحفاظ على الإصدارات القديمة من جافا سكريبت الملفات مع نفس الأسماء.

هناك قائمة من أفضل الممارسات في مكان ما ؟

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

المحلول

نحن إلحاق المنتج بناء عدد نهاية كل سكريبت (و CSS.... الخ) مثل ذلك:

<script src="MyScript.js?4.0.8243">

المتصفحات تجاهل كل شيء بعد علامة الاستفهام ولكن ترقيات يسبب عنوان URL جديد مما يعني ذاكرة التخزين المؤقت-تحميل.

وهذا له فائدة إضافية التي يمكنك تعيين رؤوس HTTP أن يعني "أبدا ذاكرة التخزين المؤقت!"

نصائح أخرى

فإنه يحمل على النسخ المخزنة مؤقتا في المتصفح ، على الرغم من ملقم ويب يحتوي على إصدار أحدث.

هذا هو الأرجح لأن HTTP تنتهي / Cache-Control رؤوس مجموعة.

http://developer.yahoo.com/performance/rules.html#expires

لقد كتبت عن هذا الموضوع هنا:

http://www.codinghorror.com/blog/archives/000932.html

هذه ليست نصيحة سيئة في حد ذاتها ، ولكن يمكن أن يسبب مشاكل كبيرة إذا كنت تحصل على خطأ.في مايكروسوفت IIS ، على سبيل المثال ، تنتهي الرأس هو دائما إيقاف افتراضيا ، ربما لهذا السبب بالذات.من خلال وضع تنتهي رأس HTTP الموارد تقولين العميل لم تحقق من الإصدارات الجديدة من هذا المورد -- على الأقل ليس حتى تاريخ انتهاء الصلاحية على رأس انتهاء الصلاحية. عندما أقول لم أقصد هذا المتصفح حتى لا نسأل جديد الإصدار ؛ سوف تحمل النسخة المخبأة جيدة للذهاب إلى العميل مسح ذاكرة التخزين المؤقت أو ذاكرة التخزين المؤقت يصل إلى تاريخ انتهاء الصلاحية. ياهو أنها تغيير اسم الملف من هذه الموارد عندما يحتاجون إليها منتعشة.

كل ما كنت حقا توفير تكاليف العميل تنفيذ الأمر ping الملقم للحصول على نسخة جديدة والحصول على 304 لا تعديل رأس مرة أخرى في حالة أن الموارد لم يتغير.هذا ليس بكثير علوية..إلا إذا كنت ياهو.بالتأكيد, إذا كان لديك مجموعة من الصور أو النصوص التي تقريبا لا تتغير أبدا ، بالتأكيد استغلال العميل التخزين المؤقت بدوره على رأس Cache-Control.التخزين المؤقت هو الحرجة إلى المتصفح الأداء ؛ كل مطور ويب يجب أن يكون لديك فهم عميق لكيفية التخزين المؤقت HTTP يعمل.ولكن فقط تستخدم في العمليات الجراحية محدودة طريقة تلك المجلدات أو الملفات المحددة التي يمكن أن تستفيد.من أجل أي شيء آخر ، مخاطر تفوق المنافع.انها بالتأكيد ليست شيئا كنت تريد تشغيل مثل بطانية الافتراضي على موقع الويب الخاص بك كامل..إلا إذا كنت ترغب في تغيير أسماء الملفات في كل مرة تغيير المحتوى.

@جايسون دارين

IE6 يعامل أي شيء مع سلسلة الاستعلام كما uncacheable.يجب أن تجد طريقة أخرى للحصول على رقم الإصدار في عنوان url ، مثل وهمية الدليل:

<script src="/js/version/MyScript.js"/>

فقط إزالة هذا أول دليل المستوى بعد js على جانب الملقم قبل تنفيذ الطلب.

تحرير:عذرا للجميع ؛ هو الحبار, لا IE6, لن ذاكرة التخزين المؤقت مع سلسلة الاستعلام.مزيد من المعلومات هنا.

لقد كتبت بلوق وظيفة حول كيفية التغلب على هذه المشكلة هنا:

تجنب جافا سكريبت و CSS Stylesheet مشاكل في التخزين المؤقت ASP.NET

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

أنا أيضا من طريقة من مجرد تسمية الأشياء.فإنه لا يفشل أبدا, و هو من السهل القيام به.

هو خادم الويب إرسال حق رؤوس تخبر المتصفح لديه نسخة جديدة ؟ لقد أضاف أيضا تاريخ querystring قبل.أي myscripts.js ؟ تاريخ=4/14/2008 12:45:03 (فقط تاريخ المشفرة)

@دارين التخزين المؤقت المشكلة قد حدثت على كل من IIS 6 & أباتشي 2-من مربع.أنا لست متأكدا مما إذا كان القرار السليم هو تعديل رؤوس استجابة HTTP, ولكن بدلا من أن تتخذ تسمية الطريق الموضحة في بعض الردود هنا.

@كريس نصيحة جيدة.ظننت سلسلة الاستعلام النهج كان جيدا, ولكن يبدو فريدة من نوعها الملف أو اسم الدليل هو ضروري لتغطية جميع الحالات.

مع كل إصدار ، ونحن ببساطة prepend على زيادة مفردة النغمة صحيح أن مسار الجذر من جميع ثابت الأصول ، الأمر الذي يفرض على العميل تحديث (لقد رأينا سلسلة الاستعلام طريقة كسر في IE6 من قبل).على سبيل المثال:

  • الإصدار 1:http://www.foo.com/1/js/foo.js
  • الإصدار 2:http://www.foo.com/2/js/foo.js

فإنه يتطلب rejiggering الروابط مع كل إصدار ، لقد بنيت الوظيفة تلقائيا تغيير الروابط إلى أدوات النشر.

بمجرد القيام بذلك, يمكنك استخدام تنتهي/Cache-Control الرؤوس التي تسمح ذاكرة التخزين المؤقت العميل شبيبة الموارد "إلى الأبد" ، منذ المسار يتغير مع كل إصدار ، والتي أعتقد أنها ما @JasonCohen في الحصول على.

بعض التقنيات المفيدة في هنا حتى إذا كنت لا تخطط لاستخدام powershell لأتمتة عملية النشر.

لما يستحق ، رأيت الوسام الموقع جدا واحدة كبيرة بما يخدم JS الملفات 54504.js.أنا فقط التحقق و نرى الآن أنها تخدم لهم كما v6core.css ؟ -5855446573 v6core_jc.js ؟ 4150339741.... الخ

إذا كانت المشكلة من سلسلة الاستعلام يأتي من الخادم ، أعتقد أن أكثر أو أقل.

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