عند استخدام Spring Boot + FreeMarker لتطوير مشاريع الويب ، تكون بعض الملفات الثابتة كبيرة نسبيًا ، وإذا تم الوصول إليها على جهاز كمبيوتر ، فستكون السرعة أبطأ بكثير عند الوصول إلى الهاتف المحمول ، وخاصة عند استخدام حركة المرور ، وسوف تستهلك الكثير من حركة المرور.
عن طريق التقاط الطلب ، يمكنك أن تجد أنه في كل مرة تقوم فيها بإدخال صفحة ، تحتاج إلى تحميل ملف ثابت. إذا كانت الشركة التي لا تقل عن المال يمكنها وضع الملف الثابت على CDN لتسريع الوصول ، أو استخدام Nginx لتخزين الملفات الثابتة.
اليوم سأقدم لك طريقة تحسين ذاكرة التخزين المؤقت المختلفة. من خلال آلية ذاكرة التخزين المؤقت في الربيع ، يتم تخزين الملفات الثابتة. لتكوين ذاكرة التخزين المؤقت للملفات الثابتة في صندوق الربيع ، تحتاج فقط إلى إضافة التكوين التالي إلى ملف التكوين:
# وقت ذاكرة التخزين المؤقت للموارد ، الوحدة ثواني spring.resources.cache-period = 604800 # تمكين Gzip ضغط spring.resources.chain.gzipped = True # تمكين cache spring.Chain.cache = خطأ
يمكنك الرجوع إلى الوثائق الخاصة بالتكوين: قسم معالجة موارد الربيع في https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/
بعد إضافة تكوين ذاكرة التخزين المؤقت ، بعد الوصول إلى الصفحة ، سيتم تخزين الموارد الثابتة المحملة. خلال الزيارة الثانية ، لن نطلب التنزيل مرة أخرى. من خلال اصطياد الحزمة ، يمكننا أن نرى أنه قد تم تخزينه مؤقتًا بالفعل.
في عمود الحجم ، هناك من ذاكرة التخزين المؤقت للذاكرة. يتم تخزين المورد مؤقتًا في ذاكرة المتصفح ، ويتم تخزين بعض الملفات مؤقتًا على القرص ، أي من ذاكرة التخزين المؤقت للقرص.
الغرض من التحسين هو تحقيقه ، ولكن هناك مشكلة صغيرة لم يتم حلها ، أي إذا تم تغيير ملف المورد الخاص بي ، مثل ملف CSS ، وعندما يطلق الخادم الخاص بي ، سيظل هناك ذاكرة التخزين المؤقت على المستخدم.
أفضل تأثير هو عندما يتغير الملف أو عند إعادة تشغيل برنامج الخادم ، يحتاج طلب المستخدم إلى تنزيل أحدث الموارد على الخادم. عندما لا يكون هناك إعادة تشغيل ، استخدم المحتوى المخزنة مؤقتًا ، بحيث يمكن للمستخدم رؤية أحدث محتوى مباشرة بعد التغيير.
يمكننا استخدام رقم الإصدار لحل هذه المشكلة ، وهو إضافة رقم الإصدار بعد المورد الثابت ، وتغيير رقم الإصدار عندما يتغير المورد ، لذلك لن تكون هناك مشكلة.
كيفية استخدامه على النحو التالي:
<link rel = "stylesheet" href = "css /main-app.css؟ version = $ {version!}" rel = "nofollow" />الاستخدام بسيط للغاية ، والمفتاح هو من أين تأتي قيمة الإصدار؟
يمكننا تعيين هذه القيمة من خلال الرمز قبل البدء:
System.SetProperty ("الإصدار" ، الإصدار) ؛يمكن تمرير هذه القيمة من خلال Args للطريقة الرئيسية وتم نقلها ديناميكيًا إلى البرنامج في البرنامج النصي الذي يبدأ المشروع. يمكن أن يحصل البرنامج النصي بدء التشغيل على قيمة MD5 لجرة البرنامج كرقم الإصدار. وبهذه الطريقة ، عند إعادة تشغيل برنامج الخادم ، يتغير رقم الإصدار ويصبح ذاكرة التخزين المؤقت غير صالح.
ثم احصل على هذه القيمة في المرشح وقم بتعيينها على الطلب ويمكنك استخدامها في كل صفحة.
string person = system.getProperty ("الإصدار") ؛ req.setattribute ("الإصدار" ، الإصدار == null؟ "1.0.0": الإصدار) ؛بالإضافة إلى هذه الطريقة من تمرير المعلمات ، يمكنك أيضًا استخدام المكونات الإضافية المعبأة المخصصة لاستبدال الإصدار بمحتوى محدد عند العبوة.
الطريقة أعلاه هي التحكم في تغييرات الملفات عن طريق إنشاء الإصدار بنفسك. في الواقع ، قدمت Spring MVC وظيفة إدارة الإصدار للملفات الثابتة. هناك طريقتان. واحد هو إنشاء رقم الإصدار من خلال MD5 من المورد. إذا تغير محتوى الملف ، فسيتغير MD5 بالتأكيد أيضًا. طريقة أخرى هي بادئة المورد برقم إصدار.
MD5
أضف التكوين التالي إلى ملف الخصائص:
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
معالجة إضافة عنوان URL:
controlleradvicepublic class controlerconfig {AuutOwired ResourceUrlprovider ResourceUrlprovider ؛ modelattribute ("urls") urlsurlprovider urls () {return this.resourceurlprovider ؛ }}استخدام الصفحة كما يلي:
نسخة الكود كما يلي:
<link rel = "stylesheet" type = "text/css" href = "$ {urls.getForLookuppath ('/css/main-app.css')}" rel = "nofollow">
بعد التجميع ، سيصبح المحتوى التالي:
نسخة الكود كما يلي:
<link rel = "stylesheet" type = "text/css" href = "/css/main-app-4v371326bb93ce4b611853a309b69b33.css
رقم الإصدار
أضف التكوين التالي إلى ملف الخصائص:
spring.resources.chain.strategy.fixed.enabled = truespring.resources.chain.strategy.fixed.paths =/js/** ،/v1.0.0/** spring.resources.chain.strategy.fixed.version = v1.0.0
استخدام الصفحة كما يلي:
<script type = "text/javaScript" src = "$ {urls.getForLookuppath ('/js/main.js')}"> </script>بعد التجميع ، سيصبح المحتوى التالي:
<script type = "text/javaScript" src = "/v1.0.0/js/main.js"> </script>
بغض النظر عن الطريقة التي تستخدمها ، يمكنك تحقيق التأثير ولن يكون عبء العمل كبيرًا جدًا. سيكون التحسين بلا نهاية وسيتم القيام به.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.