الفرق بين المراجعتين لصفحة: «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()));
}
}
});