إضافة إصدار يشير إلى أن الإصدار القديم المخزن مؤقتا من الملف الثابت محدث لتجنب استخدامه

تاريخ إنشاء الصفحة :

منذ المرحلة الأمامية طويلة، إذا كنت تريد أن ترى فقط البرنامج، يرجى تخطي ذلك.

وسط

استوديو مرئي
  • استوديو مرئي 2019
ASP.NET كور
  • 3.1 (صفحة الحلاقة، MVC)

حول التخزين المؤقت للملفات على صفحات ويب

عند زيارة صفحة ويب، بالإضافة إلى HTML، يتم تنزيل ملفات .js (جافا سكريبت) وملفات .css (أوراق الأنماط) وملفات الصور إلى العميل لعرضها وتنفيذها. ومع ذلك ، فإن بعض ملفات الصور كبيرة ، ويمكن أن يكون تنزيلها في كل مرة مكلفا. أيضا، غالبا ما تستخدم ملفات .js وملفات .css على صفحات أخرى، وليس هناك حاجة لتحميلها في كل مرة. قد يتم حفظ هذه الملفات مؤقتا في المستعرض الخاص بك بعد التنزيل. وهذا ما يسمى التخزين المؤقت.

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

المشاكل الناجمة عن التخزين المؤقت

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

فيما يلي مثال على مسار ملف. يتم تطبيق معلمات السمة href و src.

<!-- スタイルシート (.css) -->
<link rel="stylesheet" href="/css/site.css" />

<!-- 画像ファイル -->
<img src="/image/sample.png" alt="サンプル画像" />

<!-- JavaScript (.js) -->
<script src="/js/site.js"></script>

ومع ذلك، يمكن أن يكون هذا السلوك مشكلة.

على سبيل المثال، إذا كان لدى مستخدم ملف JavaScript الإصدار 1 عند الوصول إليه لأول مرة، يتم تخزين ملف JavaScript الإصدار 1 مؤقتا. ثم يقوم الملقم بنشر ملف JavaScript الإصدار 2. إذا كان مسار ملف JavaScript هو نفسه عند زيارة المستخدم لنفس الصفحة، قد يتم استخدام ملف Javascript الإصدار 1 المخزن مؤقتا دون تحميل ملف JavaScript الإصدار 2 من الخادم. وهذا يمكن أن يسبب العيوب التي لا ينوي الجمهور.

في هذا الوقت، أعتقد أنك غالبا ما ترى "محاولة حذف ذاكرة التخزين المؤقت" باعتبارها واحدة من التدابير المضادة على جانب المستخدم، ولكن هذا قد يكون السبب.

كيفية التعامل مع مشاكل ذاكرة التخزين المؤقت على جانب الملقم

كما ذكر أعلاه، ما إذا كان يتم استخدام الملفات المخزنة مؤقتا يعتمد إلى حد كبير على مسار الملف (URL).

ولذلك، عند تحديث ملف، يمكنك إجباره على تنزيل ملف جديد عن طريق تغيير اسم الملف.

على سبيل المثال، إذا كان ملف الإصدار 1

<link rel="stylesheet" href="/css/site.css" />

عندما تم تحديث الملف الإصدار 2

<link rel="stylesheet" href="/css/site2.css" />

الموقع2 .css على جانب العميل.

ومع ذلك، إذا قمت بذلك يدويا، يمكن أن يكون cumbersome وعرضة للخطأ لتغيير المسارات وإعادة تسمية الملفات الفعلية.

إضافة معلمات استعلام إلى مسار ملف

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

يمكن إلحاق معلمات الاستعلام بالمسار بالتنسيق التالي:

<!-- クエリパラメータなし -->
<link rel="stylesheet" href="/css/site.css" />

<!-- クエリパラメータあり -->
<link rel="stylesheet" href="/css/site.css?key=value" />

باستخدام هذه الآلية، تحتاج إلى تغيير المسار، ولكن لا تحتاج إلى إعادة تسمية الملف الفعلي.

إضافة معلمات الاستعلام تلقائيا في البرنامج (مثال سيئ)

بإضافة معلمة الاستعلام هذه تلقائيا في البرنامج، ليس عليك تغيير مسار الملف يدويا إذا قمت بتغيير الملف الثابت.

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

<link rel="stylesheet" href="/css/site.css?20210223120000" />

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

ASP.NET التحكم بالإصدار عن طريق إضافة معلمات الاستعلام في Core

Alcause لا يوجد ما قبل ASP.NET الأساسية يوفر حلا قياسيا لهذه المشكلة التخزين المؤقت.

تحتاج فقط إلى إضافة سمة إلى العلامة التي تصف asp-append-version="true" مسار الملف كما يلي:

<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
<img src="/image/sample.png" asp-append-version="true"/>
<script src="~/js/site.js" asp-append-version="true"></script>

إذا قمت بالفعل بزيارة الصفحة بعد نشرها على ويب، سيتم توسيع كما يلي:

<link rel="stylesheet" href="/css/site.css?v=S2ihmzMFFc3FWmBWsR-NiddZWa8kbyaQYBx2FDkIoHs" />
<img src="/image/sample.png?v=Z0tUqQmLt_3L_NSzPmkbZKxL8cMxglf08BwWb5Od5z4" />
<script src="/js/site.js?v=dLGP40S79Xnx6GqUthRF6NWvjvhQ1nOvdVSwaNcgG18"></script>

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

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

asp-append-version="true"بالمناسبة، هذه السمة قياسية فقط للملفات الثابتة الموضوعة في المجلد wwwroot. لاحظ أنه لا يتم توسيع سلاسل عشوائية عند تعيينها إلى ملفات أخرى.

حول برنامج العينة

قالب المشروع الافتراضي .js asp-append-version قالب الموقع. الموقع.css لا asp-append-version يوجد ملحق به.

يضيف البرنامج _Layout.cshtml عينة الموقع.js والموقع.css asp-append-version من الملف. نحن أيضا إضافة علامات img asp-append-version كمرجع.