ما هي واجهات برمجة التطبيقات العابرة؟
نشرت: 2020-12-16غالبًا ما يدور أداء موقع الويب حول فكرة التخزين المؤقت: تخزين البيانات في حالة جاهزة وأسرع للوصول إليها ، بحيث يتم إعادة إنتاجها بسرعة أكبر بواسطة المتصفحات. تعد واجهة برمجة تطبيقات WordPress Transients API أداة للتخزين المؤقت وطريقة قوية لتحسين أداء مواقع WordPress على الويب.
ما هو التخزين المؤقت ولماذا يتم استخدامه؟
عندما يطلب المستعرض صفحة ويب ، يجب أن يقوم خادم العرض بإجراء الكثير من العمليات الحسابية المعقدة والمستهلكة للوقت ، مما يؤدي إلى التأخير. بعد تنفيذ استعلام ، بفضل تقنية التخزين المؤقت ، يمكن للخادم تذكر النتيجة النهائية وبناءً على طلب ثانٍ ، قم بتزويد المتصفح دون الحاجة إلى إجراء نفس الحسابات مرة أخرى. لذلك ، فإن القدرة على تخزين الموارد السابقة وإعادة استخدامها أمر بالغ الأهمية لتحسين الأداء.
يوفر التخزين المؤقت بكل بساطة خيار تخزين المعلومات مؤقتًا في طبقة التخزين المؤقت.
ما هي أنواع التخزين المؤقت؟
هناك أنواع مختلفة من التخزين المؤقت وباستخدام مزيج منها ، ستحقق مستوى أعلى من الأداء.
متصفح التخزين المؤقت
قبل فتح محتوى صفحة الويب ، يحتاج متصفحك إلى مجموعة من الأشياء مثل ملفات JavaScript وأوراق الأنماط والخطوط وما إلى ذلك ، والتي يتم تنزيلها جميعًا بالإضافة إلى محتوى الصفحة.
إذا قام المستعرض بتخزين هذه الملفات مؤقتًا ، فلن تكون هناك حاجة لتنزيلها في كل مرة تقوم فيها بتحميل موقع الويب. يستغرق تحميل الموقع لأول مرة عادةً بضع ثوانٍ ، ولكن بعد أن يقوم المتصفح بتخزين هذه الملفات مؤقتًا ، يتم تقليل وقت التحميل بشكل كبير.
التخزين المؤقت للخادم
يعني التخزين المؤقت للخادم حفظ ملف HTML لصفحة معينة واستخدامه لكل طلب لاحق. هذا هو ما يسمى بذاكرة التخزين المؤقت للصفحة الكاملة.
هناك نوع آخر من ذاكرة التخزين المؤقت للخادم - ذاكرة التخزين المؤقت للكائنات ، والتي ، على عكس ذاكرة التخزين المؤقت للصفحة الكاملة ، تخزن فقط أجزاء (أجزاء) معينة من المعلومات.
التخزين المؤقت للصفحة
تعتبر ذاكرة التخزين المؤقت الأكثر فعالية. اسمها لا يحتاج إلى تفسير للطريقة التي يعمل بها. عندما يقوم المستخدم "أ" بزيارة إحدى الصفحات ، سيقوم موقع الويب ببنائها وإعادة محتواها إلى متصفح المستخدم. أثناء تشغيل ذاكرة التخزين المؤقت للصفحة ، يتم حفظ محتوى هذه الصفحة بحيث عندما يقوم المستخدم "ب" بزيارة نفس الصفحة ، فإن ذاكرة التخزين المؤقت للصفحة تعيد إنتاج المحتوى الذي تم إرساله مسبقًا.
تتمثل أكبر ميزة لـ Page Cache في أن الصفحة المخبأة تعود في لحظة الوصول تقريبًا. نتيجة لذلك ، تتم معالجة ملايين الطلبات وإعادة إنتاج الصفحات حتى على الخادم الأضعف مع أقل سرعة للذاكرة واستخدام أقل لوحدة المعالجة المركزية.
ولكن هذا النوع من ذاكرة التخزين المؤقت له أيضًا عيوبه: على سبيل المثال ، عدم القدرة على تخزين الصفحات مؤقتًا لمستخدم مرخص ، أو لمستخدم يعتمد محتوى صفحته على متغيرات المستخدم الحالية.
التخزين المؤقت لقاعدة البيانات
التخزين المؤقت لقاعدة البيانات هو عملية مدرجة في تصميم تطبيقات الكمبيوتر التي تنشئ صفحات الويب عند الطلب (ديناميكيًا) من خلال الوصول إلى قواعد البيانات الخلفية. تعمل ذاكرة التخزين المؤقت لقاعدة البيانات على تحسين قاعدة البيانات الأساسية عن طريق إزالة الضغط غير الضروري عليها ، عادةً في شكل بيانات مقروءة يتم الوصول إليها بشكل متكرر. يمكن أن تعمل ذاكرة التخزين المؤقت نفسها في عدد من المجالات بما في ذلك قاعدة البيانات أو التطبيق أو كطبقة مستقلة.
عندما يتم نشر هذه التطبيقات في بيئات متعددة المستويات تتضمن عملاء يعتمدون على المستعرض وخوادم تطبيقات الويب وقواعد البيانات الخلفية ، يتم استخدام التخزين المؤقت لقاعدة بيانات الطبقة الوسطى لتحقيق قابلية عالية للتوسع والأداء.
كائن التخزين المؤقت
يتضمن التخزين المؤقت للكائن في WordPress (ذاكرة التخزين المؤقت للكائنات) تخزين استعلامات قاعدة البيانات. إنها آلية نظام مدمجة تسمح لك بحفظ البيانات (الكائنات) من أي نوع واستعادتها عند الضرورة. تُستخدم ذاكرة التخزين المؤقت هذه لتخزين نتائج العمليات المعقدة.
عند تمكينه على موقع WordPress الخاص بك ، فإنه يساعد في تسريع أوقات تنفيذ PHP ، وتقديم المحتوى إلى زوار الموقع بشكل أسرع ، وتقليل الحمل على قاعدة البيانات.
CDN (شبكات توصيل المحتوى)
إنها بنية تحتية للشبكة موزعة جغرافيًا توفر تسليمًا سريعًا للمحتوى لمستخدمي خدمات الويب والمواقع. توجد الخوادم المضمنة في شبكة CDN جغرافيًا بطريقة تجعل وقت الاستجابة لمستخدمي الموقع / الخدمة ضئيلًا.
ما هي واجهة برمجة تطبيقات Transients في WordPress؟
Transients API هي طريقة لتخزين كتلة من المعلومات (سلسلة من التعليمات البرمجية ، محتوى HTML ، WP_Query Objects ، JSON) في قاعدة بيانات موقع الويب بدلاً من التخزين المؤقت للمستعرض. يشبه Transients API إلى حد بعيد واجهة API للخيارات ، ولكن الاختلاف الرئيسي هو أن Transients API لها وقت انتهاء صلاحية أو عمر أفضل.
العمليات الرئيسية الثلاث الخاصة بالمرحلين هي تحديد القيم والحصول على القيم وحذف القيم :
1. تعيين عابر -
set_transient ($ key، $ value، $ expires)؛
لتعيين مؤقت ، يمكنك استخدام دالة set_transient () التي تحتوي على ثلاثة مكونات:
- المفتاح - الاسم الفريد القصير للعابر. يجب أن يكون طوله 172 حرفًا أو أقل.
- القيمة - أي نوع من متغيرات PHP يحتوي على المعلومات التي سيتم تخزينها في قاعدة البيانات.
- وقت انتهاء الصلاحية (عمر) - مقدار الوقت الذي سيتم تخزين المعلومات فيه.
على سبيل المثال ، إذا أردنا حفظ استعلام منشورات القائمة ليوم واحد:
set_transient ('unique_listing_posts_query_results_name' ،$ list_posts_query_results ، DAY_IN_SECONDS) ؛
كما ترى ، فقد استخدمنا واحدًا (DAY_IN_SECONDS) من عدة ثوابت زمنية تم تقديمها في WordPress 3.5 للتعبير عن الوقت بسهولة. فيما يلي قائمة كاملة بثوابت كل الأوقات:
MINUTE_IN_SECONDS = 60 (ثانية) HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS
2. الحصول على عابر -
get_transient ($ key) ؛
للحصول على عابر محفوظ يمكننا استخدامه
get_transient ($ transient_name) ؛
في حالتنا ، يمكننا إحضار نتائج بحث قائمة منشوراتنا باستخدام:
get_transient ( ' unique_listing_posts_query_results_name ' ) ؛
سنرى المزيد عن ذلك لاحقًا في قسم الأمثلة لدينا.
3. حذف عابر -
delete_transient ($ key) ؛
كما أوضحنا في الأقسام الفرعية السابقة ، يمكننا استخدام Transients API للحصول على ردود بعيدة أو محلية (محتوى أو استعلام من قاعدة بياناتنا) وتخزينها على قاعدة بياناتنا.
ومع ذلك ، يأتي هنا السؤال عن كيفية حذف المحتوى المخزن القديم (عابر). هناك طريقتان لمسح (حذف) العابرين:
الحذف التلقائي
الشيء الرائع في العابرين هو أنها تنتهي صلاحيتها تلقائيًا إذا حددنا وقت انتهاء الصلاحية (العمر الافتراضي) . إذا حاولت استرداد عنصر مؤقت من قاعدة البيانات الخاصة بك بعد انتهاء صلاحيتها ، فسيقوم WordPress بحذفه تلقائيًا ، مما يمنع أي فوضى. سيتم إعادة إنشاء المؤقت بمجرد قيام شخص ما بفتح موقع الويب. بهذه الطريقة نضمن أن لدينا محتوى جديدًا من واجهة برمجة التطبيقات البعيدة أو المحلية.
الحذف اليدوي
سنحتاج أحيانًا إلى إجبار العابر على الموت مبكرًا عن طريق حذفه يدويًا. يكون هذا مفيدًا عندما يؤدي نشاط معين (إضافة عنصر قائمة جديد أو حفظ منشور أو تحديثه أو إضافة فئة أو تحديثها وما إلى ذلك) إلى جعل البيانات المخزنة مؤقتًا قديمة وبحاجة إلى التحديث:
الوظيفة التي يجب أن نستخدمها هي
delete_transient ($ transient_name)
وفي حالتنا يجب أن يكون:
delete_transient ( ' unique_listing_posts_query_results_name ' ) ؛
ملاحظة: من المهم عدم استخدام عابر لتخزين البيانات القيمة التي لا يمكن إعادة إنشائها!
لماذا يجب علينا استخدام واجهات برمجة التطبيقات العابرة؟
يمكننا استخدام Transients API كلما كان لدينا قيمة حسابية مكثفة لا تتغير كثيرًا وتريد تخزينها مؤقتًا. في WordPress ، عادةً ما يكون هذا هو الكائن الناتج من استعلام قاعدة البيانات ، ولكن يمكن أن يكون أي شيء تخزنه في متغير ، سواء كانت قيمة عددية أو مصفوفة أو كائنًا.

لذا فإن الكل في جميع العابرين يكون رائعًا عند إجراء استعلامات معقدة في السمات والمكونات الإضافية.
فوائد التخزين المؤقت للاستجابات المحلية أو البعيدة
استجابات API عن بعد
تقوم واجهات برمجة التطبيقات البعيدة دائمًا بإجراء العديد من المكالمات أو الطلبات للخوادم البعيدة وهناك بعض زمن الانتقال الإضافي. هذا يستغرق وقتًا ويسبب تأخيرات. أيضًا ، يمكن أن يكون لبعض واجهات برمجة التطبيقات البعيدة حدود للمعدل ، مما يعني أنه يمكنك الوصول إلى الحد الأقصى للطلبات خلال فترة زمنية معينة.
وكما تعلم بالفعل ، يمكننا الاستفادة من Transients API لتخزين الاستجابة (النتيجة) من الخادم البعيد وتخزينها في قاعدة البيانات الخاصة بنا. الآن يمكننا استخدام
get_transient () ؛
الطريقة وإظهار النتيجة / المحتوى المخزن (المخزن مؤقتًا) حيثما دعت الحاجة دون إجراء مكالمات أو طلبات أخرى عن بُعد.
كل هذا سوف:
- قلل مكالمات وطلبات HTTPS البعيدة
- تقليل استخدام خادم وحدة المعالجة المركزية
- تحسين وقت تحميل صفحة الموقع
استجابات API المحلية
- بشكل أساسي HTML أو نتائج الاستعلام من قاعدة البيانات. يمكنك استخدام Transients API ليس فقط للتخزين المؤقت للاستجابات البعيدة ولكن أيضًا لتخزين محتوى HTML أو نتائج الاستعلام في قاعدة البيانات المحلية. إنه مفيد للغاية إذا كنت ترغب في إظهار قسم HTML قابل للتكرار على موقع الويب الخاص بك (عناصر واجهة مستخدم وشرائح منزلقة وقوائم وما إلى ذلك) أو فقط لمنع تشغيل استعلامات قاعدة بيانات معقدة أو بطيئة في كل مرة يزور فيها شخص ما موقع الويب الخاص بك.
أين ومتى يتم استخدام العابرين؟
- استعلامات قواعد البيانات المعقدة والمخصصة
- قوائم التنقل في WordPress
- أدوات الشريط الجانبي التي تعرض معلومات مثل ؛ التغريدات ، قائمة زوار الموقع الجدد أو قائمة المشاركات من فئة معينة
- ذاكرة التخزين المؤقت علامة الغيوم
- التخزين المؤقت لطلبات HTTP الخارجية
الاستخدام والأمثلة
بعد العديد من التفسيرات حان الوقت للحصول على أمثلة حقيقية.
الاستخدام الأساسي
دالة get_my_data () { $ data = get_transient ('my_transient_name') ؛ إذا (خطأ === $ data) {// تم انتهاء صلاحية مؤقت / لم يتم تعيينه البيانات $ = fetch_my_data () ؛ // سحب البيانات من المصدر الأصلي set_transient ('my_transient_name' ، بيانات $ ، HOUR_IN_SECONDS) ؛ } إرجاع البيانات $؛ }
يمكن لوظيفة fetch_my_data () تخزين عنصر WP_Query وبيانات json ومحتوى html وما إلى ذلك.
مثال أساسي
كما أوضحنا بالفعل ، يعد هذا النوع من التخزين المؤقت مفيدًا لحفظ نتيجة العمليات الطويلة ، وأبسط مثال هو الوصول إلى واجهات برمجة التطبيقات الخارجية ، مثل Facebook.
تخيل أن لدينا الوظيفة التالية ، التي تصل إلى Facebook API ، وتطلب كائنًا (بشكل أكثر دقة ، صفحة) your-website.url وتعيد عدد مرات الإعجاب بالصفحة:
وظيفة get_facebook_likes () { نتيجة $ = wp_remote_get ('https://graph.facebook.com/your-website.url') ؛ نتيجة $ = json_decode (wp_remote_retrieve_body ($ result)) ؛ إرجاع نتيجة $-> الإعجابات ؛ } صدى "الإعجابات على Facebook:". get_facebook_likes () ،
يعتمد وقت تنفيذ هذه الوظيفة على العديد من العوامل ، بما في ذلك موقع الخادم الخاص بك بالنسبة إلى خوادم Facebook ، وحالة الشبكة وسرعتها ، وما إلى ذلك. في المتوسط ، يمكن أن تستغرق الوظيفة 1-3 ثوانٍ.
هذا يعني أنه عند استخدام هذه الوظيفة على الموقع ، سيزداد وقت تحميل كل صفحة بمقدار 1-3 ثوانٍ. علاوة على ذلك ، إذا استدعينا هذه الوظيفة أكثر من 500 مرة في 500 ثانية ، فسيبدأ Facebook في إنشاء خطأ بدلاً من نتيجة.
لتسريع هذه الميزة ، يمكننا استخدام WordPress Transients API وحفظ النتيجة لمدة ساعة واحدة:
وظيفة get_facebook_likes () { إذا (خطأ === (الإعجابات $ = get_transient ('fb_likes'))) { نتيجة $ = wp_remote_get ('https://graph.facebook.com/your-website.url') ؛ نتيجة $ = json_decode (wp_remote_retrieve_body ($ result)) ؛ إعجاب $ = نتيجة $-> إعجاب ؛ // تعيين عابر لمدة ساعة بالثواني set_transient ('fb_likes' ، إعجاب $ ، 1 * HOUR_IN_SECONDS) ؛ } إرجاع الإعجابات $ ؛ }
وبالتالي ، عند استدعاء هذه الوظيفة لأول مرة ، بعد تلقي طلب من Facebook ، سيقوم WordPress بكتابة النتيجة إلى قاعدة البيانات وفي المستقبل سيعيد هذه النتيجة من قاعدة البيانات لمدة ساعة دون تكرار الطلبات إلى خادم Facebook. وبعد ساعة ، ستتحول الوظيفة مرة أخرى إلى Facebook للحصول على البيانات.
باستخدام هذا النهج ، ستؤدي مكالمة واحدة فقط إلى هذه الوظيفة في الساعة إلى زيادة وقت الطلب بمقدار 1-3 ثوانٍ ، وسيتم إصدار المكالمات اللاحقة على الفور.
مثال أكثر تعقيدًا
تخيل أن لدينا موقعًا على الويب به حوالي 100 فئة وحوالي 50000 مشاركة ، وفي تصميم المنشور الفردي لموقع الويب لدينا عنصر واجهة مستخدم يعرض المنشورات ذات الصلة بـ N من الفئة التي يوجد بها المنشور الحالي. كما هو متوقع ، سيستغرق هذا الاستعلام المعقد بعض الوقت لأخذ النتيجة من قاعدة البيانات وإظهارها على موقع الويب.
تخيل الآن أن لديك 10000 مستخدم يدخلون إلى الموقع في نفس الوقت. هذا يعني أنه سيكون لدينا أكثر من 10000 طلب قاعدة بيانات يجب أن يقوموا بالاستعلام (هذا استعلام معقد لأنه سيبحث من خلال جداول wp_terms و wp_term_relationships و wp_term_taxonomy و wp_posts ، لذا فهم أكثر من 10000 استعلام) ، للحصول على نتيجة لـ N مشاركات من الفئة ذات الصلة وإظهارها في الواجهة الأمامية. سيؤدي هذا بدوره إلى زيادة التحميل على قاعدة البيانات وتأخير وقت التحميل الإجمالي للموقع ، وفي بعض الحالات يؤدي إلى تعطلها بسبب التحميل الزائد على قاعدة البيانات.
وهنا يأتي السؤال حول كيف يمكننا تحسين وتقليل عدد استعلامات وطلبات قاعدة البيانات. لماذا يكون لدينا العديد من الاستعلامات في كل مرة يمكننا فيها الاستفادة من Transients API ونقوم فقط بتخزين كائن الاستعلام مؤقتًا أو تخزين ناتج HTML بالكامل؟ بهذه الطريقة سنقوم بتقليل عدد استعلامات قاعدة البيانات وتحسينها ، مما سيؤدي إلى أداء أفضل لموقع الويب وتجربة مستخدم أفضل.
في حالتنا ، ستبحث الاستعلامات في جداول wp_terms و wp_term_relationships و wp_term_taxonomy و wp_posts للحصول على جميع النتائج المتوقعة.
فيما يلي مثال كامل لكيفية تحقيق ذلك:
وظيفة show_posts_from_category () { $ args = مجموعة ( 'cat' => 555، // معرّف الفئة العشوائية 'posts_per_page' => 8 ، // العدد العشوائي للمشاركات ذات الصلة المراد عرضها 'No_found_rows' => صحيح ، ) ؛ التجزئة $ = md5 ($ args ['cat']) ؛ // MD5 تجزئة معرف الفئة $ transient_key = 'category-'. التجزئة $؛ // مفتاح عابر إذا (خطأ === ($ posts_from_category_html = get_transient ($ transient_key))): // العابر انتهت صلاحيتها / لم يتم تعيينها $ the_query = WP_Query جديد ($ args) ؛ // احصل على الاستعلام ob_start () ، // تشغيل التخزين المؤقت للإخراج while (the_query $-> have_posts ()): $ the_query-> the_post ()؛ ؟> <div class = "item"> <div class = "bigthumb"> <a href="<؟php the_permalink()؛؟> "rel =" bookmark "title =" <؟ php the_title ()؛؟> "> <؟ php if (has_post_thumbnail ()) the_post_thumbnail ('big-thumb' ) ؛ ؟> </a> </div> <h3> <a href="<؟php the_permalink()؛؟> "rel =" bookmark "title =" <؟ php the_title ()؛؟> "> <؟ php the_title ()؛ ؟> </a> </h3> <؟ php the_excerpt ()؛ ؟> </div> <؟ php في الوقت نفسه $ post_from_category_html = ob_get_contents ()؛ // يحصل على محتويات المخزن المؤقت للإخراج بدون مسحه ob_end_clean () ، // يوقف هذا التخزين المؤقت للإخراج set_transient ($ transient_key، $ posts_from_category_html، $ transient_expire = 15 * MINUTE_IN_SECONDS) ؛ // ضبط الوقت العابر بوقت انتهاء الصلاحية 15 دقيقة wp_reset_postdata () ، إنهاء إذا؛ إرجاع $ post_from_category_html؛ }
افكار اخيرة
يعد التخزين المؤقت طريقة رائعة لتسريع الأمور ، ولكن عليك أن تعرف بالضبط ما تقوم بتخزينه مؤقتًا ، وأين يمكنك القيام به ، ومتى وكيف ، وإلا فإنك تخاطر بمواجهة عواقب غير متوقعة.
إذا لم تكن متأكدًا مما إذا كان شيء ما يعمل على النحو المنشود ، فانتقل دائمًا إلى التنميط - انظر إلى كل استعلام مقابل قاعدة البيانات ، وانظر إلى جميع استدعاءات وظائف PHP والتوقيت واستخدام الذاكرة.
تعد Transients API طريقة رائعة لتحسين وقت تحميل موقع WordPress الخاص بك ولتقديم تجربة مستخدم استثنائية. يعد استخدام العابرين في المكونات الإضافية والسمات أمرًا بسيطًا ويضيف فقط بضعة أسطر إضافية من التعليمات البرمجية. عند استخدامه في المواقف المناسبة - مثل استعلامات قاعدة البيانات الطويلة أو البيانات المعالجة المعقدة - يمكن أن يوفر ثوانٍ من أوقات التحميل على موقعك.