الوسم cache في Twig

من موسوعة حسوب
< Twig
مراجعة 06:12، 11 مايو 2021 بواسطة جميل-بيلوني (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

أضيف الوسم 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 نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:

{% 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:

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()));
        }
    }
});

انظر أيضًا

المصادر