الفرق بين المراجعتين ل"Twig/cache"
أسامه-دمراني (نقاش | مساهمات) (1.0: إضافة عنوان الصفحة.) |
أسامه-دمراني (نقاش | مساهمات) (إدخال 2.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) مثل القوالب الخاصة بك. | ||
+ | * أدخل عددًا صحيحًا تزيده تدريجيًا كلما تغيرت شيفرة القالب كي تلغي صلاحية جميع الذواكر المؤقتة الحالية تلقائيًا. | ||
+ | * أدخل مفتاحًا فريدًا يُحدَّث كلما حدث تعديل في المتغيرات المستخدمة في القالب. | ||
+ | |||
+ | على سبيل المثال، قد أستخدم | ||
+ | |||
+ | <code>{% cache "blog_post;v1;" ~ post.id ~ ";" ~ post.updated_at %}</code> من أجل تخزين جزء من قالب محتوى المدونة، حيث تصف <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"> | ||
+ | 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 }} | ||
+ | </syntaxhighlight>لاحظ أن وسم cache جزء من CacheExtension، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:<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="twig"> | ||
+ | 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())); | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | </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]] |
مراجعة 22:18، 24 أبريل 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
نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:
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()));
}
}
});