کش کردن هوشمند دادهها در وردپرس با Transients API
در این مطلب نحوه اصولی کشکردن دادهها در وردپرس را بررسی میکنیم. با Transients API آشنا میشویم و با یک مثال نحوه استفاده عملی از آن را یاد میگیریم.
Transients API چیست؟
اگر برنامه نویس باشید با مفهوم کشینگ آشنا هستید و میدانید که برای چه از آن استفاده میشود در غیر اینصورت میتوانید به این صفحه در ویکیپدیا مراجعه کنید و با مفهوم کشینگ و انواع آن آشنا شوید. مستندات وردپرس Transients API را به صورت زیر تعریف میکند:
Transients API یک روش ساده و استاندارد را برای ذخیره دادهها به صورت موقت در پایگاه داده با یک نام و بازه زمانی زندگی برای آن دادها، فراهم میکند. بعد از به پایان رسیدن زمان تعیین شده اطلاعات حذف میشوند و دیگر قابل دستیابی نیستند.
اگر درسایت خود به دادهای نیاز دارید که به ندرت به روزرسانی میشوند و در تهیه هر بار این دادهها زمان زیادی صرف می شود ولی نیازی نیست که در هربار که این اطلاعات ساخته شوند میتوانید از Transients API برای ذخیره موقت این دادهها استفاده کنید تا در هر بار استفاده از این داده نیازی به تولید دوباره آن نداشته باشید. با این کار میتوانید زمان لود صفحات را کاهش داده و درصد استفاده سایت از منابع سرور را کاهش دهید.
نحوه ذخیره و بازیابی دادههای کش بوسیله Transients API
توابع اصلی که در هنگام ذخیره و بازیابی دادههای مد نظر جهت کش شدن استفاده میکنیم توابع set_transient و get_transient هستند. تابع set_transient که از آن برای ذخیره داده کش استفاده میکنیم.
<?php set_transient( $transient, $value, $expiration ); ?>
این تابع سه متغیر ورودی دارد. نخست $transient که نام قطعه دادهای است که باید کش شود. این نام در واقع شناسه یکتای آن داده است که در آینده از آن برای بازیابی دادههای کش شده استفاده میکنیم. متغیر دوم $value همان دادهای است که قصد کش کردن آن را داریم و از متغیر سوم یعنی $expiration برای تعیین بازه زمانی که میخواهیم دادهها کش شوند استفاده میکنیم. توجه داشته باشید که مقدار این پارامتر بر حسب ثانیه است و وردپرس بعد از اتمام این زمان دادهها را از بانک اطلاعاتی حذف میکند.
زمانی که شما دادهای را ذخیره کردید میتوانید به راحتی با تابع get_transient و شناسه آن داده، داده را بازیابی کنید.
<?php get_transient( $transient ); ?>
همان طور که قبلتر اشاره کردیم برای بازیابی دادهها به شناسه یکتای آن داده نیاز داریم. با ارسال این شناسه به تابع get_transient میتوانیم به آن داده دسترسی پیدا بکنیم. این تابع دو نوع خروجی دارد. اول مقدار داده کش شده است و یا اینکه مقدار false به همین دلیل بعد از استفاده از این تابع میبایست بررسی کنیم که چه نوع دادهای در آن وجود دارد. میبایست در کدهای خود تمهیداتی را برای زمانی که دادههای کش حذف شدهاند در نظر بگیرید.
نکته ظریفی که در این قسمت وجود دارد این است که Transients API در هنگام عدم وجود داده مقدار false منطقی که با صفر مشخص میشود را به خروجی ارسال نمیکند چون این امکان وجود دارد که مقدار صفر همان دادهای باشد که آن را کش کرده باشید و به همین دلیل مقدار false را در یک آرایه قرار داده و آن را به خروجی ارسال میکند که برای تشخیص آن میتوان از عملگر شناسایی یکتا (===) به جای عملگر برابری (==) استفاده کرد. به صورت زیر:
if ( false === ( $value = get_transient( ‘value’ ) ) ) {
// this code runs when there is no valid transient set
}
حذف دادههای کش شده بوسیله Transients API
برای حذف دادههای کش شده از تابع delete_transient استفاده میکنیم که شکلی یکسان با تابع get_transient که پیشتر بررسی کردیم دارد با این تفاوت که این تابع با دریافت شناسه داده کش شده آن را حذف میکند.
<?php delete_transient( $transient ); ?>
استفاده از Transient API در عمل
در اینجا میخواهیم برای شفافیت موضوع نحوه استفاده عملی از Transients API را بررسی کنیم. در این مثال میخواهیم دادههای یک فید را دریافت و آنها را نمایش دهیم. دانلود این فید در هر بار نمایش و ساختن یک لیست HTML از آیتمهای آن کار مناسبی نیست چون در هر بار دانلود و ساختن لیست خروجی آن فید زمان زیادی صرف دانلود و ساختن کد خروجی میشود که اینکار مخصوصا در سایتهای پر بازدید میتواند باعث افت سرعت لود صفحات گردد. اما میخواهیم با استفاده از Transients API این فید را یکبار دانلود و برای ۲ ساعت از آن اطلاعات استفاده کنیم و پس از ۲ ساعت دوباره آن را دریافت کنیم و به همین منوال…با اضافه کردن چند خط کد میتوان از دانلود هزاران بار این اطلاعات جلوگیری کرد. در کد زیر این کار را به صورت عملی پیادهسازی کرده ایم.
[codesyntax lang=”php”]
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ |
<? // get data $rss_itemslist = get_transient("wp_feed"); // for reading rss feed include_once(ABSPATH . WPINC . '/feed.php'); // when data cached if ($rss !== FALSE){ // print chached feed items list echo $rss_itemslist; } // when data not cached else{ // Download feed and generate items $rss_itemslist = fetch_feed("http://feeds.irtuts.com/irtuts/wp"); $max_items = $rss_itemslist->get_item_quantity(۱۰); $items = $rss_itemslist->get_items(۰, $max_items); // Generate HTML liat of feed items $fresh_list ="<ol>"; foreach ( $items as $item ) $fresh_list .= '<li> <a href="' . $item->get_link(); . '">' . $item->get_title();' .</a> </li>'; $fresh_list .= '</ol>'; // save fresh feed items list set_transient("wp_feed" , $fresh_list ,۶۰*۶۰*۲ ); // print fresh feed items list echo $rss_itemslist; } ?> |
[/codesyntax]
در مرکز کد و در قسمت if بررسی میکنیم که دادهای از قبل در کش وجود دارد و در صورت عدم وجود در قسمت else دوباره لیست آیتمهای آن فید را تولید میکنیم.
همین الان استفاده کنید
حال که نحوه از Transients API را آموختید میتوانید با استفاده از چند خط کد زمان لود صفحات خود را کاهش دهید که اینکار تاثیرات زیادی همچون SEO را نیز در بر دارد. تنها با همان چند خط کد میتوانید موقعیت بهتری را بین کاربران و موتورهای جستجو بدست آورید، آیا از این بهتر هم میشود.
لینک کوتاه این محصول : http://ipmg.ir/?p=897
thanks