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

من موسوعة حسوب
ط مراجعة
طلا ملخص تعديل
 
سطر 9: سطر 9:
</syntaxhighlight>يمكن أن يكون مفتاح الذاكرة المؤقتة أي سلسلة نصية لا تستخدم المحارف المحفوظة التالية <code>{}()/\@:</code>، والأفضل وضع بعض المعلومات المفيدة في المفتاح تسمح للذاكرة المؤقتة كي تنتهي تلقائيًا عند الحاجة إلى تحديثها:
</syntaxhighlight>يمكن أن يكون مفتاح الذاكرة المؤقتة أي سلسلة نصية لا تستخدم المحارف المحفوظة التالية <code>{}()/\@:</code>، والأفضل وضع بعض المعلومات المفيدة في المفتاح تسمح للذاكرة المؤقتة كي تنتهي تلقائيًا عند الحاجة إلى تحديثها:


* أعط كل ذاكرة مؤقتة اسمًا فريدًا واجعل فضاء اسمها (namespace) مثل القوالب الخاصة بك.
* أعط كل ذاكرة مؤقتة اسمًا فريدًا واجعل فضاء اسمها namespace مثل القوالب الخاصة بك.
* أدخل عددًا صحيحًا تزيده تدريجيًا كلما تغيرت شيفرة القالب كي تلغي صلاحية جميع الذواكر المؤقتة الحالية تلقائيًا.
* أدخل عددًا صحيحًا تزيده تدريجيًا كلما تغيرت شيفرة القالب كي تلغي صلاحية جميع الذواكر المؤقتة الحالية تلقائيًا.
* أدخل مفتاحًا فريدًا يُحدَّث كلما حدث تعديل في المتغيرات المستخدمة في القالب.
* أدخل مفتاحًا فريدًا يُحدَّث كلما حدث تعديل في المتغيرات المستخدمة في القالب.
سطر 15: سطر 15:
على سبيل المثال، قد أستخدم ما يلي:<syntaxhighlight lang="twig">
على سبيل المثال، قد أستخدم ما يلي:<syntaxhighlight lang="twig">
{% cache "blog_post;v1;" ~ post.id ~ ";" ~ post.updated_at %}
{% 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) التي تمثل آخر وقت لتعديل المنشور.
</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">
سطر 36: سطر 36:
{# Displays 1 #}
{# Displays 1 #}
{{ count }}
{{ count }}
</syntaxhighlight>لاحظ أن وسم cache جزء من CacheExtension، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:<syntaxhighlight lang="twig">
</syntaxhighlight>لاحظ أن وسم <code>cache</code> جزء من <code>CacheExtension</code>، وهذا لا يكون مثبتًا افتراضيًا، فاحرص على تثبيته أولًا:<syntaxhighlight lang="twig">
$ composer require twig/cache-extra
$ composer require twig/cache-extra
</syntaxhighlight>تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة <code>twig/extra-bundle</code>:<syntaxhighlight lang="twig">
</syntaxhighlight>تستطيع تفعيله تلقائيًا في مشاريع Symfony بتثبيت الحزمة <code>twig/extra-bundle</code>:<syntaxhighlight lang="twig">
سطر 45: سطر 45:
$twig = new \Twig\Environment(...);
$twig = new \Twig\Environment(...);
$twig->addExtension(new CacheExtension());
$twig->addExtension(new CacheExtension());
</syntaxhighlight>أما إذا لم تكن تستخدم Symfony فيجب أن تسجل وقت تشغيل التوسعة (extension runtime):<syntaxhighlight lang="php">
</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;

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

انظر أيضًا

المصادر