الفرق بين المراجعتين لصفحة: «Twig/cache»

من موسوعة حسوب
1.0: إضافة عنوان الصفحة.
 
طلا ملخص تعديل
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الوسم cache في Twig}}</noinclude>
<noinclude>{{DISPLAYTITLE:الوسم cache في Twig}}</noinclude><blockquote>أض{{DISPLAYTITLE:الوسم cache في Twig}}يف الوسم <code>cache</code> إلى محرك القوالب Twig في الإصدار 3.2.</blockquote>ال{{DISPLAYTITLE:الوسم cache في Twig}}وسم <code>cache</code> يخبر Twig أن يخزن جزءًا من القالب تخزينًا مؤقتًا:<syntaxhighlight lang="twig">
{% cache "cache key" %}
    تُخزن تخزينًا دائمًا وفقًا لاستخدام الذاكرة المؤقتة.
{% endcache %}
</syntaxhighlight>إذا أردت أن تنهي الذاكرة المؤقتة بعد مدة معينة فحدد هذه المدة بالثواني من خلال المعدِّل (modifier) <code>ttl()‎</code>:<syntaxhighlight lang="twig">
{% cache "cache key" ttl(300) %}
    تُخزَّن لمدة 300 ثانية
{% endcache %}
</syntaxhighlight>يمكن أن يكون مفتاح الذاكرة المؤقتة أي سلسلة نصية لا تستخدم المحارف المحفوظة التالية <code>{}()/\@:</code>، والأفضل وضع بعض المعلومات المفيدة في المفتاح تسمح للذاكرة المؤقتة كي تنتهي تلقائيًا عند الحاجة إلى تحديثها:
 
* أعط كل ذاكرة مؤقتة اسمًا فريدًا واجعل فضاء اسمها namespace مثل القوالب الخاصة بك.
* أدخل عددًا صحيحًا تزيده تدريجيًا كلما تغيرت شيفرة القالب كي تلغي صلاحية جميع الذواكر المؤقتة الحالية تلقائيًا.
* أدخل مفتاحًا فريدًا يُحدَّث كلما حدث تعديل في المتغيرات المستخدمة في القالب.
 
على سبيل المثال، قد أستخدم ما يلي:<syntaxhighlight lang="twig">
{% cache "blog_post;v1;" ~ post.id ~ ";" ~ post.updated_at %}
</syntaxhighlight>من أجل تخزين جزء من قالب محتوى المدونة، حيث تصف  <code>blog_post</code> جزء القالب، وتمثل <code>v1</code> النسخة الأولى من شيفرة القالب، و<code>post.id</code> هو معرِّف منشور المدونة، بينما يعيد  <code>post.updated_at</code> العلامة الزمنية timestamp التي تمثل آخر وقت لتعديل المنشور.
 
إن مثل هذه الاستراتيجية في تسمية مفاتيح الذاكرة المؤقتة تجنبنا استخدام <code>ttl</code>، فهي تشبه استخدام خطة تحقق "Validation" بدلًا من خطة إنهاء "Expiration" في ذواكر HTTP. إذا كان تطبيق الذاكرة المؤقتة الخاص بك يدعم الوسوم فيمكن إضافتها إلى عناصر الذاكرة المؤقتة:<syntaxhighlight lang="twig">
{% cache "cache key" tags('blog') %}
    شيفرة ما
{% endcache %}
 
{% cache "cache key" tags(['cms', 'blog']) %}
    شيفرة ما
{% endcache %}
</syntaxhighlight>ينشئ وسم <code>cache</code> نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:<syntaxhighlight lang="twig">
{% set count = 1 %}
 
{% cache "cache key" tags('blog') %}
    {# cache لن تتأثر قيمة العد خارج وسم #}
    {% set count = 2 %}
    شيفرة هنا
{% endcache %}
 
{# Displays 1 #}
{{ count }}
</syntaxhighlight>لاحظ أن وسم <code>cache</code> جزء من <code>CacheExtension</code>، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:<syntaxhighlight lang="twig">
$ composer require twig/cache-extra
</syntaxhighlight>تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة <code>twig/extra-bundle</code>:<syntaxhighlight lang="twig">
$ composer require twig/extra-bundle
</syntaxhighlight>أو إضافة التوسيع صراحة في بيئة Twig:<syntaxhighlight lang="twig">
use Twig\Extra\Cache\CacheExtension;
 
$twig = new \Twig\Environment(...);
$twig->addExtension(new CacheExtension());
</syntaxhighlight>أما إذا لم تكن تستخدم Symfony فيجب أن تسجل وقت تشغيل التوسعة extension runtime:<syntaxhighlight lang="php">
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()));
        }
    }
});
</syntaxhighlight>
 
== انظر أيضًا ==
 
* [[Twig/intro|مقدمة عن محرك القوالب Twig]]
* [[Twig/internals|المكونات الداخلية لمحرك القوالب Twig]]
* [[Twig/coding standards|معايير كتابة الشيفرات في Twig]]
 
== المصادر ==
 
* [https://twig.symfony.com/doc/3.x/tags/cache.html صفحة الوسم Cache في توثيق Twig الرسمي.]
 
[[تصنيف:Twig]]
[[تصنيف:Twig Tags]]

المراجعة الحالية بتاريخ 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()));
        }
    }
});

انظر أيضًا

المصادر