کش کردن هوشمند دادهها در وردپرس با Transients API
در این قسمت به نحوه اصولی کشکردن دادهها در وردپرس با Transients APIرا بررسی میکنیم.
اگر درسایت خود به دادهای نیاز دارید که به ندرت به روزرسانی میشوند و در تهیه هر بار این دادهها زمان زیادی صرف می شود ولی نیازی نیست که هربار این اطلاعات ساخته شوند میتوانید از Transients API برای ذخیره موقت این دادهها استفاده کنید تا در هر بار استفاده از این داده نیازی به تولید دوباره آن نداشته باشید. با این کار میتوانید زمان لود صفحات را کاهش داده و درصد استفاده سایت از منابع سرور را کاهش دهید.
این تابع سه متغیر ورودی دارد. نخست $transientکه نام قطعه دادهای است که باید کش شود. این نام در واقع شناسه یکتای آن داده است که در آینده از آن برای بازیابی دادههای کش شده استفاده میکنیم. متغیر دوم $valueهمان دادهای است که قصد کش کردن آن را داریم و از متغیر سوم یعنی $expirationبرای تعیین بازه زمانی که میخواهیم دادهها کش شوند استفاده میکنیم. توجه داشته باشید که مقدار این پارامتر بر حسب ثانیه است و وردپرس بعد از اتمام این زمان دادهها را از بانک اطلاعاتی حذف میکند.
زمانی که شما دادهای را ذخیره کردید میتوانید به راحتی با تابع get_transient و شناسه آن داده، داده را بازیابی کنید.
همان طور که قبلتر اشاره کردیم برای بازیابی دادهها به شناسه یکتای آن داده نیاز داریم. با ارسال این شناسه به تابع get_transient میتوانیم به آن داده دسترسی پیدا بکنیم. این تابع دو نوع خروجی دارد. اول مقدار داده کش شده است و یا اینکه مقدار false به همین دلیل بعد از استفاده از این تابع میبایست بررسی کنیم که چه نوع دادهای در آن وجود دارد. میبایست در کدهای خود تمهیداتی را برای زمانی که دادههای کش حذف شدهاند در نظر بگیرید.
نکته ظریفی که در این قسمت وجود دارد این است که Transients API در هنگام عدم وجود داده مقدار false منطقی که با صفر مشخص میشود را به خروجی ارسال نمیکند چون این امکان وجود دارد که مقدار صفر همان دادهای باشد که آن را کش کرده باشید و به همین دلیل مقدار false را در یک آرایه قرار داده و آن را به خروجی ارسال میکند که برای تشخیص آن میتوان از عملگر شناسایی یکتا (===) به جای عملگر برابری (==) استفاده کرد. به صورت زیر:
در مرکز کد و در قسمت if بررسی میکنیم که دادهای از قبل در کش وجود دارد و در صورت عدم وجود در قسمت else دوباره لیست آیتمهای آن فید را تولید میکنیم
Transients API چیست؟
Transients API یک روش ساده و استاندارد را برای ذخیره دادهها به صورت موقت در پایگاه داده با یک نام و بازه زمانی زندگی برای آن دادها، فراهم میکند. بعد از به پایان رسیدن زمان تعیین شده اطلاعات حذف میشوند و دیگر قابل دستیابی نیستند.اگر درسایت خود به دادهای نیاز دارید که به ندرت به روزرسانی میشوند و در تهیه هر بار این دادهها زمان زیادی صرف می شود ولی نیازی نیست که هربار این اطلاعات ساخته شوند میتوانید از Transients API برای ذخیره موقت این دادهها استفاده کنید تا در هر بار استفاده از این داده نیازی به تولید دوباره آن نداشته باشید. با این کار میتوانید زمان لود صفحات را کاهش داده و درصد استفاده سایت از منابع سرور را کاهش دهید.
نحوه ذخیره و بازیابی دادههای کش بوسیله Transients API
توابع اصلی که در هنگام ذخیره و بازیابی دادههای مد نظر جهت کش شدن استفاده میکنیم توابع set_transient و get_transient هستند. تابع set_transient که از آن برای ذخیره داده کش استفاده میکنیم.
|
این تابع سه متغیر ورودی دارد. نخست $transientکه نام قطعه دادهای است که باید کش شود. این نام در واقع شناسه یکتای آن داده است که در آینده از آن برای بازیابی دادههای کش شده استفاده میکنیم. متغیر دوم $valueهمان دادهای است که قصد کش کردن آن را داریم و از متغیر سوم یعنی $expirationبرای تعیین بازه زمانی که میخواهیم دادهها کش شوند استفاده میکنیم. توجه داشته باشید که مقدار این پارامتر بر حسب ثانیه است و وردپرس بعد از اتمام این زمان دادهها را از بانک اطلاعاتی حذف میکند.
زمانی که شما دادهای را ذخیره کردید میتوانید به راحتی با تابع get_transient و شناسه آن داده، داده را بازیابی کنید.
|
همان طور که قبلتر اشاره کردیم برای بازیابی دادهها به شناسه یکتای آن داده نیاز داریم. با ارسال این شناسه به تابع get_transient میتوانیم به آن داده دسترسی پیدا بکنیم. این تابع دو نوع خروجی دارد. اول مقدار داده کش شده است و یا اینکه مقدار false به همین دلیل بعد از استفاده از این تابع میبایست بررسی کنیم که چه نوع دادهای در آن وجود دارد. میبایست در کدهای خود تمهیداتی را برای زمانی که دادههای کش حذف شدهاند در نظر بگیرید.
نکته ظریفی که در این قسمت وجود دارد این است که Transients API در هنگام عدم وجود داده مقدار false منطقی که با صفر مشخص میشود را به خروجی ارسال نمیکند چون این امکان وجود دارد که مقدار صفر همان دادهای باشد که آن را کش کرده باشید و به همین دلیل مقدار false را در یک آرایه قرار داده و آن را به خروجی ارسال میکند که برای تشخیص آن میتوان از عملگر شناسایی یکتا (===) به جای عملگر برابری (==) استفاده کرد. به صورت زیر:
if ( false === ( $value = get_transient( 'value' ) ) ) {
// this code runs when there is no valid transient set
}
// this code runs when there is no valid transient set
}
حذف دادههای کش شده بوسیله Transients API
برای حذف دادههای کش شده از تابع delete_transient استفاده میکنیم که
شکلی یکسان با تابع get_transient که پیشتر بررسی کردیم دارد با این تفاوت
که این تابع با دریافت شناسه داده کش شده آن را حذف میکند.
|
استفاده از Transient API در عمل
در اینجا میخواهیم برای شفافیت موضوع نحوه استفاده عملی از Transients API
را بررسی کنیم. در این مثال میخواهیم دادههای یک فید را دریافت و آنها
را نمایش دهیم. دانلود این فید در هر بار نمایش و ساختن یک لیست HTML از
آیتمهای آن کار مناسبی نیست چون در هر بار دانلود و ساختن لیست خروجی آن
فید زمان زیادی صرف دانلود و ساختن کد خروجی میشود که اینکار مخصوصا در
سایتهای پر بازدید میتواند باعث افت سرعت لود صفحات گردد. اما میخواهیم
با استفاده از Transients API این فید را یکبار دانلود و برای ۲ ساعت از آن
اطلاعات استفاده کنیم و پس از ۲ ساعت دوباره آن را دریافت کنیم و به همین
منوال…با اضافه کردن چند خط کد میتوان از دانلود هزاران بار این اطلاعات
جلوگیری کرد. در کد زیر این کار را به صورت عملی پیادهسازی کرده ایم.
// 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(10); $items = $rss_itemslist ->get_items(0, $max_items ); // Generate HTML liat of feed items $fresh_list = " ; foreach ( $items as $item ) $fresh_list .= ' '; $fresh_list .= '' ; // save fresh feed items list set_transient( "wp_feed" , $fresh_list ,60*60*2 ); // print fresh feed items list echo $rss_itemslist ; } ?> |
در مرکز کد و در قسمت if بررسی میکنیم که دادهای از قبل در کش وجود دارد و در صورت عدم وجود در قسمت else دوباره لیست آیتمهای آن فید را تولید میکنیم
آدرس : کرج – گوهردشت – خیابان اصلی گوهردشت – بین خیابان نهم و دهم غربی– بالای بانک مهر– پلاک252 – واحد11
تلفن تماس :34483769- 026, 34496534- 026, 34496506- 026
ایمیل : Karaj@azaranweb.com
وب سایت:www.karaj.azaranweb.org
[ بازدید : 87 ] [ امتیاز : 0 ] [ امتیاز شما : ]