الوسم cache في Twig
أضيف الوسم
cache
إلى محرك القوالب Twig في الإصدار 3.2.
الوسم cache
يخبر Twig أن يخزن جزءًا من القالب تخزينًا مؤقتًا:
{% cache "cache key" %}
تُخزن تخزينًا دائمًا وفقًا لاستخدام الذاكرة المؤقتة.
{% endcache %}
إذا أردت أن تنهي الذاكرة المؤقتة بعد مدة معينة فحدد هذه المدة بالثواني من خلال المعدِّل (modifier) ttl()
:
{% cache "cache key" ttl(300) %}
تُخزَّن لمدة 300 ثانية
{% endcache %}
يمكن أن يكون مفتاح الذاكرة المؤقتة أي سلسلة نصية لا تستخدم المحارف المحفوظة التالية {}()/\@:
، والأفضل وضع بعض المعلومات المفيدة في المفتاح تسمح للذاكرة المؤقتة كي تنتهي تلقائيًا عند الحاجة إلى تحديثها:
- أعط كل ذاكرة مؤقتة اسمًا فريدًا واجعل فضاء اسمها (namespace) مثل القوالب الخاصة بك.
- أدخل عددًا صحيحًا تزيده تدريجيًا كلما تغيرت شيفرة القالب كي تلغي صلاحية جميع الذواكر المؤقتة الحالية تلقائيًا.
- أدخل مفتاحًا فريدًا يُحدَّث كلما حدث تعديل في المتغيرات المستخدمة في القالب.
على سبيل المثال، قد أستخدم
{% cache "blog_post;v1;" ~ post.id ~ ";" ~ post.updated_at %}
من أجل تخزين جزء من قالب محتوى المدونة، حيث تصف blog_post
جزء القالب، وتمثل v1
النسخة الأولى من شيفرة القالب، وpost.id
هو معرِّف منشور المدونة، بينما يعيد post.updated_at
العلامة الزمنية (timestamp) التي تمثل آخر وقت لتعديل المنشور.
إن مثل هذه الاستراتيجية في تسمية مفاتيح الذاكرة المؤقتة تجنبنا استخدام ttl
، فهي تشبه استخدام خطة تحقق "Validation" بدلًا من خطة إنهاء "Expiration" في ذواكر HTTP. إذا كان تطبيق الذاكرة المؤقتة الخاص بك يدعم الوسوم فيمكن إضافتها إلى عناصر الذاكرة المؤقتة:
{% cache "cache key" tags('blog') %}
شيفرة ما
{% endcache %}
{% cache "cache key" tags(['cms', 'blog']) %}
شيفرة ما
{% endcache %}
ينشئ وسم cache
نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:
1
2
3
4
5
6
7
8
9
10
{% set count = 1 %}
{% cache "cache key" tags('blog') %}
{# cache لن تتأثر قيمة العد خارج وسم #}
{% set count = 2 %}
شيفرة هنا
{% endcache %}
{# Displays 1 #}
{{ count }}
لاحظ أن وسم cache جزء من CacheExtension، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:
$ composer require twig/cache-extra
تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة twig/extra-bundle
:
$ composer require twig/extra-bundle
أو إضافة التوسيع صراحة في بيئة Twig:
use Twig\Extra\Cache\CacheExtension;
$twig = new \Twig\Environment(...);
$twig->addExtension(new CacheExtension());
أما إذا لم تكن تستخدم Symfony فيجب أن تسجل وقت تشغيل التوسيع (extension runtime):
1
2
3
4
5
6
7
8
9
10
11
12
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
use Twig\Extra\Cache\CacheRuntime;
use Twig\RuntimeLoader\RuntimeLoaderInterface;
$twig->addRuntimeLoader(new class implements RuntimeLoaderInterface {
public function load($class) {
if (CacheRuntime::class === $class) {
return new CacheRuntime(new TagAwareAdapter(new FilesystemAdapter()));
}
}
});