الوسم cache في Twig

من موسوعة حسوب
مراجعة 22:18، 24 أبريل 2021 بواسطة أسامه-دمراني (نقاش | مساهمات) (إدخال 2.0 تمام المحتوى وانظر أيضًا والتصانيف والمصادر.)

أضيف الوسم 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()));
        }
    }
});

انظر أيضًا

المصادر