الفرق بين المراجعتين لصفحة: «Twig/cache»
أسامه-دمراني (نقاش | مساهمات) إدخال 2.0 تمام المحتوى وانظر أيضًا والتصانيف والمصادر. |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<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"> | <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" %} | {% cache "cache key" %} | ||
تُخزن تخزينًا دائمًا وفقًا لاستخدام الذاكرة المؤقتة. | تُخزن تخزينًا دائمًا وفقًا لاستخدام الذاكرة المؤقتة. | ||
سطر 9: | سطر 9: | ||
</syntaxhighlight>يمكن أن يكون مفتاح الذاكرة المؤقتة أي سلسلة نصية لا تستخدم المحارف المحفوظة التالية <code>{}()/\@:</code>، والأفضل وضع بعض المعلومات المفيدة في المفتاح تسمح للذاكرة المؤقتة كي تنتهي تلقائيًا عند الحاجة إلى تحديثها: | </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"> | إن مثل هذه الاستراتيجية في تسمية مفاتيح الذاكرة المؤقتة تجنبنا استخدام <code>ttl</code>، فهي تشبه استخدام خطة تحقق "Validation" بدلًا من خطة إنهاء "Expiration" في ذواكر HTTP. إذا كان تطبيق الذاكرة المؤقتة الخاص بك يدعم الوسوم فيمكن إضافتها إلى عناصر الذاكرة المؤقتة:<syntaxhighlight lang="twig"> | ||
سطر 26: | سطر 26: | ||
{% endcache %} | {% endcache %} | ||
</syntaxhighlight>ينشئ وسم <code>cache</code> نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:<syntaxhighlight lang="twig"> | </syntaxhighlight>ينشئ وسم <code>cache</code> نطاقًا جديدًا للمتغيرات، بمعنى أن التغييرات ستكون محلية لذلك الجزء من القالب:<syntaxhighlight lang="twig"> | ||
{% set count = 1 %} | {% set count = 1 %} | ||
سطر 46: | سطر 36: | ||
{# Displays 1 #} | {# Displays 1 #} | ||
{{ count }} | {{ count }} | ||
</syntaxhighlight>لاحظ أن وسم cache جزء من | </syntaxhighlight>لاحظ أن وسم <code>cache</code> جزء من <code>CacheExtension</code>، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:<syntaxhighlight lang="twig"> | ||
$ composer require twig/cache-extra | $ composer require twig/cache-extra | ||
</syntaxhighlight>تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة | </syntaxhighlight>تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة <code>twig/extra-bundle</code>:<syntaxhighlight lang="twig"> | ||
$ composer require twig/extra-bundle | $ composer require twig/extra-bundle | ||
</syntaxhighlight>أو إضافة التوسيع صراحة في بيئة Twig:<syntaxhighlight lang="twig"> | </syntaxhighlight>أو إضافة التوسيع صراحة في بيئة Twig:<syntaxhighlight lang="twig"> | ||
سطر 55: | سطر 45: | ||
$twig = new \Twig\Environment(...); | $twig = new \Twig\Environment(...); | ||
$twig->addExtension(new CacheExtension()); | $twig->addExtension(new CacheExtension()); | ||
</syntaxhighlight>أما إذا لم تكن تستخدم Symfony فيجب أن تسجل وقت تشغيل | </syntaxhighlight>أما إذا لم تكن تستخدم Symfony فيجب أن تسجل وقت تشغيل التوسعة extension runtime:<syntaxhighlight lang="php"> | ||
use Symfony\Component\Cache\Adapter\FilesystemAdapter; | use Symfony\Component\Cache\Adapter\FilesystemAdapter; | ||
use Symfony\Component\Cache\Adapter\TagAwareAdapter; | use Symfony\Component\Cache\Adapter\TagAwareAdapter; | ||
سطر 84: | سطر 62: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Twig/intro|مقدمة عن محرك القوالب Twig | * [[Twig/intro|مقدمة عن محرك القوالب Twig]] | ||
* [[Twig/internals|المكونات الداخلية لمحرك القوالب Twig | * [[Twig/internals|المكونات الداخلية لمحرك القوالب Twig]] | ||
* [[Twig/coding standards|معايير كتابة الشيفرات في Twig]] | * [[Twig/coding standards|معايير كتابة الشيفرات في 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()));
}
}
});