لقد قيل الكثير مؤخرا عن مزايا المواقع الثابتة . ولكن في كثير من الحالات ، يكون النهج الديناميكي ضرورة. سواء كان نظام إدارة المحتوى ، أو أداة علاقات العملاء ، أو المتجر عبر الإنترنت ، فإنها تسمح للمستخدمين النهائيين بالحفاظ على المواقع المعقدة بسرعة وبشكل مستمر. وعندما يتم تجميعها بشكل صحيح ، يمكنها منافسة المواقع الثابتة للسرعة.
أي تطبيق يحتاج إلى قراءة وكتابة البيانات بشكل متكرر سيؤدي إلى تأخير ملحوظ
أيا كان النظام الذي تستخدمه ، تتضمن المواقع الديناميكية عادةً عناصر متشابهة. هذه هي شكل من أشكال خادم الويب ، والخلفية ، والتطبيق ، مكتوبة بلغة برمجة واحدة أو أكثر. يعطي هذا المزيج من المكونات قدرًا كبيرًا من المرونة ، لكن كل منها يساهم في حمله الخاص ويزيد من وقت التحميل ، وهو أمر تريد جميع المواقع الحديثة تجنبه. هذا صحيح بشكل خاص مع الوصول إلى قاعدة البيانات ؛ أي تطبيق يحتاج إلى قراءة وكتابة البيانات بشكل متكرر سيؤدي إلى تأخير ملحوظ.
هذا حيث يساعد التخزين المؤقت واستراتيجية التخزين المؤقت المناسبة لحالة الاستخدام. الهدف الأساسي للتخزين المؤقت هو منع المكالمات المتكررة غير الضرورية بين طبقات قاعدة بيانات التطبيق واستخدام صفحات HTML ثابتة مسبقة الإنشاء بدلاً من ذلك ، والتي يتم عرضها بشكل أسرع في المستعرض.
أول ذاكرة تخزين يمكن أن يلاحظها مستخدم الويب هي ذاكرة التخزين المؤقت في المتصفح. كم عدد المرات التي يطلب منك المطورون إجراء "تحديث القوة" لمشاهدة التغييرات؟ مخابئ المتصفح بسيطة ولكنها نقطة بداية جيدة للبدء في شرح مفاهيم التخزين المؤقت. يخزن المستعرض تمثيلات لصفحات الويب التي تتم زيارتها على كمبيوتر المستخدم ، وعادةً ما يقوم بتحديثها مرة واحدة لكل جلسة إذا تم اكتشاف التغييرات أو أجبرها الموقع.
من الأدوات الشائعة المستخدمة من قبل مالكي المواقع ومسؤوليها "مخبأ الوكيل العكسي" الذي يقع بين طلبات الصفحات التي يقدمها متصفح الويب وتطبيق الويب. يقوم باعتراض الطلبات ويعرض نسخًا من الصفحات مباشرة من ذاكرة التخزين المؤقت ، مما يوفر زيادة سرعة ملحوظة.
هناك عدة خيارات رئيسية للذاكرة المؤقتة متوفرة للتثبيت الذاتي أو كـ "برامج كخدمة". (نحن نتجاهل مقدمي خدمة استضافة السحاب الذين عادة ما يقومون بتعبئة كل ما قد تحتاجون إليه في مكدس ويب مكتفي ذاتياً.)
تشمل خيارات ذاكرة التخزين المؤقت الشهيرة للوكيل ما يلي:
تكمن خيارات SaaS للتخزين المؤقت عمومًا في عالم شبكات تسليم المحتوى (CDNs) التي تعمل بدلاً من وضع ذاكرة تخزين مؤقت بين المستخدم ومكدس الويب ، على عرض مجموعات من المحتوى المخبأ الأقرب جغرافيًا لهم. إنه اختلاف بسيط ، لكنه اختلاف كبير بالنسبة للمواقع الكبيرة مع الجماهير العالمية.
ورنيش يتوفر في جميع مديري حزم Linux ، كصورة Docker والعديد من الخيارات الأخرى ، اقرأ صفحة تثبيت المشروع لمزيد من التفاصيل.
يقوم الورنيش بتخزين ملف تكوين افتراضي إما في /usr/local/etc/varnish/default.vcl أو /etc/varnish/default.vcl ، VCL (لغة تكوين ورنيش). يتم تجميع ملف التكوين هذا في برنامج صغير عبر مترجم C لزيادة السرعة أكثر.
اعتمادًا على كيفية تثبيت برنامج Varnish ، سيبدو ملف التكوين على النحو التالي:
backend default {.host = "127.0.0.1";.port = "8000";}
في أبسطها ، يحدد هذا الواجهة الخلفية الافتراضية المستخدمة من قبل Varnish ، وتحديد المضيف والمنفذ الذي يجب أن يستمع إلى المحتوى ويقاطعه.
ميزة واحدة مفيدة من الورنيش هو التحقق من فترات محددة مسبقا إذا الخلفية لا تزال صحية. يطلق عليه "Backend Polling" ويتم تهيئته عن طريق إضافة قسم مجس في تصريح الواجهة الخلفية:
.probe = {.url = '/';.timeout = 34ms;.interval = 1s;.window = 10;.threshold = 8;}
ما سبق هو الإعدادات الافتراضية التي يوفرها الورنيش وأخبرها بزيارة موقع .url معين كل نقطة اتصال ، وإذا كان على الأقل .عن طريق من .تحقيقات window ، يستجيب url في غضون .monthouttime ، ما زال يمثل الخلفية الخلفية سليمة. بمجرد اعتبار المحتوى "غير صحي" ، يتم عرض المحتوى من ذاكرة التخزين المؤقت لفترة محددة مسبقًا.
سنقوم بتغطية تغييرات محددة على التكوين الورنيش تحت كل خيار النظام الأساسي ، والآن دعونا نلقي نظرة على الخيارات العامة.
الموانئ
في البداية سيحتاج المنفذ الخاص بخادم الويب الخاص بك إلى التغيير من الوضع الافتراضي. على سبيل المثال في تهيئة Apache Vhost قم بتغيير المنفذ إلى 81 أو 8080.
بدء تشغيل البرنامج الخفي للورنيش باستخدام الأمر varnish أو باستخدام أداة خدمة. يحتوي البرنامج على خيارات للعلم ، أكثر الكائنات شيوعًا وفائدة:
التحقق من كل شيء يعمل
قم بتشغيل الأمر varnishstat أو قم بزيارة isvarnishworking.com للتحقق من خادم الورنيش الخاص بك هو جاهز والاستماع إلى الطلبات.
ما لا للذاكرة المؤقتة
هناك أجزاء معينة من موقع لا نريد تخزينه ، على سبيل المثال صفحات الإدارة. يمكننا استبعادها عن طريق إنشاء روتين فرعي vcl_recv في ملف default.vcl يحتوي على جملة if تحدد ما لا يجب تخزينه مؤقتًا:
sub vcl_recv {# URI of admin folderif (req.url ~ "^/url/"){return (pass);}return(lookup);}
إذا كنت تستخدم Varnish 4 ، فالأمر مختلف قليلاً ، بما في ذلك قيم الإرجاع. تقوم الدالة vcl_recv الآن بإرجاع قيمة ahash بدلاً من البحث.
sub vcl_recv {...return(hash);}
هذا أيضًا حيث نعين المواقع أو النطاقات الفرعية التي يجب أن يتجاهلها الورنيش بإضافة req.http.host ~ 'example.com' إلى العبارة if .
بسكويت
بشكل افتراضي ، لن يقوم "الورنيش" بالتخزين المؤقت للمحتوى من الواجهة الخلفية التي تقوم بتعيين ملفات تعريف الارتباط. وبالمثل ، إذا كان العميل يرسل ملف تعريف ارتباط ، فسيتجاوز ذلك الورنيش بشكل مستقيم إلى الواجهة الخلفية.
يتم استخدام ملفات تعريف الارتباط بشكل متكرر بواسطة المواقع لتتبع نشاط المستخدم وتخزين قيم محددة للمستخدم. بشكل عام ، لا تهم ملفات تعريف الارتباط هذه إلا رمز العميل ولا تهم الواجهة الخلفية أو الورنيش. يمكننا أن نقول للورنيش أن يتجاهل ملفات تعريف الارتباط ، إلا في مناطق معينة من الموقع:
if ( !( req.url ~ ^/admin/) ) {unset req.http.Cookie;}
تتجاهل عبارة if إذا كانت ملفات تعريف الارتباط ما لم تكن في منطقة المسؤول في الموقع ، حيث قد يكون تمرير ملف تعريف الارتباط أكثر استخدامًا (إلا إذا كنت تريد حقاً إحباط مسؤولي الموقع).
استثناءات أخرى
باستخدام التثبيت الافتراضي ، لا يقوم "الورنيش" أيضًا بتخزين صفحات محمية بكلمة مرور وطلبات GET و HEAD.
سننظر الآن في حالتي استخدام مثاليتين للورنيش: دروبال وماجنتو. كلاهما أنظمة ديناميكية للغاية تسمح للمستخدمين غير التقنيين بتنفيذ مجموعة واسعة من المهام المعقدة. هذا يمكن أن يؤدي إلى تحميل الصفحة الثقيلة الاستعلام عن قاعدة البيانات وسوف تصبح المواقع المزدحمة بطيئة بشكل ملحوظ. ستحتوي الصفحات النموذجية التي تم إنشاؤها باستخدام هذه الأنظمة على مزيج من المحتوى الذي يتم تحديثه بشكل متكرر وغير منتظم.
يحتوي دروبال على خيارات التخزين المؤقت الافتراضية التي تؤدي وظائف مماثلة للورنيش ، ولكنها لن توفر المرونة أو زيادة السرعة المطلوبة من قبل المواقع الأكبر أو الأكثر تعقيدًا.
بطريقة صحيحة دروبال هناك وحدة لمعالجة التكامل الورنيش لحفظ بعض التكوين اليدوي الموضح أعلاه.
قم بتثبيت الوحدة وتأكد من اتباع إرشادات التثبيت المضمنة في ملف Read me .
تأكد من أن الملف / etc / default / varnish به مجموعة خيارات الخفي التالية (والمسافة البادئة مهمة):
DAEMON_OPTS="-a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,128M"
تأكد من أن Apache وأي مضيفات ظاهرية مرتبطة بها تستمع على المنفذ 8080 ، وليس 80. قم بإعادة تشغيل كلتا الخدمة بعد إجراء هذه التغييرات.
قد تحتاج إلى ضبط "مفتاح التحكم في الورنيش" في صفحة تهيئة الوحدة. معرفة ما هو هذا المفتاح مع الأمر cat / etc / varnish / secret ولصقه في صفحة الإعدادات. حدد إصدار الورنيش الصحيح ، وحفظ الإعدادات ، ويجب أن ترى سلسلة من علامات التجزئة الخضراء في أسفل الصفحة.
تتفاعل الوحدة النمطية للورنيش مع إعدادات ذاكرة التخزين المؤقت الافتراضية في دروبال ، لذا تأكد من تمكينها وتهيئتها لحالة الاستخدام الخاصة بك.
تشغيل varnishstat من سطر الأوامر ، بدء التنقل في الموقع كمستخدم مجهول ويجب أن تشاهد إحصائيات تتغير في إخراج الأمر.
أحد المسارات التي لا نريد تخزينها في دروبال هي الصفحات الإدارية ، يمكننا القيام بذلك باستخدام روتين فرعي vcl_recv :
sub vcl_recv {# URI of admin folderif (req.url ~ "^/admin/"){return (pass);}unset req.http.Cookie;return(lookup);}
قد تحتاج إلى التفكير في عدم تخزين صفحات المستخدم (تسجيل الدخول) ، وصفحات تحديث النظام والصفحات الأخرى التي تم إنشاؤها بواسطة وحدات ديناميكية عالية مثل العلم الذي يستخدم بشكل مكثف من وظيفة ajax. قم بذلك عن طريق إضافة معلمات req.url أخرى إلى العبارة if .
التثبيت الافتراضي لسفن Magento مع نظام تخزين مؤقت داخلي يخزن إصدارات ثابتة لعناصر الموقع في مجلد محدد. توفر صفحة System -> Cache Management نظرة عامة حول حالة التخزين المؤقت الحالية بالإضافة إلى السماح لك بمسح كل ذاكرة التخزين المؤقت للمكونات الفردية. يمكنك مسح ملفات CSS و JS المجمعة وملفات الصور التي يتم إنشاؤها تلقائيًا من هذه الصفحة.
ستدعم النسخة القادمة 2 من Magento التخزين المؤقت للورنيش افتراضيًا ، ولكن في الوقت الحالي ، نحتاج إلى استخدام مكونات إضافية تابعة لجهة خارجية ، أوصي وحدة التربنتين . تأكد من قراءة الملف التمهيدي للمشروع كما يشير إلى بعض خطوات التهيئة الإضافية ، قد يؤدي تجاهلها إلى تعطيل موقعك.
وحدة Turpentine قابلة للتشكيل بشكل كبير وستقوم بإجراء التغييرات اللازمة على ملفات vcl و Configuration بالنسبة لك. بعض الخيارات الأساسية لتعيين:
ترتبط وحدة Turpentine بوحدة التخزين المؤقت الافتراضية لـ Magento ، لذا سيؤدي مسح ذاكرة التخزين المؤقت في صفحة ذاكرة التخزين المؤقت للورنيش إلى مسح مخابئ الورنيش ذات الصلة.
وبصرف النظر عن استخدام الورنيش مع أي من الأنظمة الديناميكية المذكورة أعلاه ، فإليك بعض النصائح المتنوعة الأخرى التي ستساعد على توفير ذاكرة التخزين المؤقت لأي موقع.
إذا كنت تعرض المحتوى نفسه في سياقات مختلفة ، فيجب استخدام نفس عنوان URL. على سبيل المثال ، لا تخلط بين استخدام article.html و article.htm والمادة ، على الرغم من أن نظام إدارة المحتوى الخاص بك قد يسمح بذلك. سيؤدي ذلك إلى ثلاثة إصدارات مختلفة مخزنة مؤقتًا لنفس المحتوى.
كما رأينا أعلاه ، من الصعب تخزين ملفات تعريف الارتباط ونادراً ما تكون ضرورية كما نعتقد. حاول أن تحد من استخدامها ورقمها إلى الصفحات الديناميكية.
يمكن أن يكون تحميل أصول الموقع من أكثر أجزاء عرض الصفحة استهلاكا للوقت ، وهناك نصائح بسيطة للحد من هذا العبء:
استخدام صورة CSS تساعد الصور المتحركة للرموز المصورة بدلاً من الملفات الصغيرة المتعددة في تقليل عدد زيارات الشبكة.
يعني استضافة مكتبات CSS وجافا سكريبت محليًا تقليل حركة مرور الشبكة والمزيد من التحكم في استراتيجيات التخزين المؤقت. يمكن أن يعني هذا زيادة في نفقات الصيانة للحفاظ على تحديث هذه الأصول. قم بتخزين هذه الأصول في مجلدات مسمّاة باستمرار حتى يمكن أن تكون المراجع إليها متسقة أيضًا.
آمل أن تكون هذه المقدمة لتسريع مواقعك الديناميكية مع التخزين المؤقت مفيدة. يستحق كسب الأداء فترة أولية من التكوين والتجريب والتغيير والتبديل. في هذا العصر من قصر الانتباه ونفاذ الصبر ، أي زيادة في السرعة يمكنك الضغط عليها من الإعداد الخاص بك سوف تحدث فرقا للمستخدمين والمنافسة.