ارتقا عملکرد وب سایت با PhpFastCache — به زبان ساده
در این مقاله قصد داریم به بررسی کتابخانه PhpFastCache بپردازیم که امکان پیادهسازی عملیات «کَش» (caching) در اپلیکیشنهای PHP را فراهم میسازد و بدین ترتیب به بهبود عملکرد کلی وبسایت و زمان بارگذاری صفحه کمک میکند.
PhpFastCache چیست؟
PhpFastCache کتابخانهای است که به پیادهسازی کش کردن در اپلیکیشنهای پیاچپی کمک میکند. استفاده از این کتابخانه آسان است و کتابخانه قدرتمندی محسوب میشود که چندین API برای کمک به پیادهسازی راهبرد کش انتخابی شما بدون نیاز به تلاش فراوان ارائه کرده است.
البته نباید به اشتباه این تصور در شما ایجاد شود که PhpFastCache صرفاً عملکردی مشابه طرح کَش File System سنتی دارد. در واقع PhpFastCache از بسیاری از آداپترها استفاده میکند که امکان انتخاب از میان آنها وجود دارد و بکاندهایی با عملکرد بالایی مانند Memcache ،Redis ،MongoD ،CouchDB و موارد دیگر را شامل میشود.
در ادامه به بررسی برخی از محبوبترین آداپترها میپردازیم:
- file system
- Memcache ،Redis و APC
- CouchDB و MongoDB
- Zend Disk Cache و Zend Memory Cache
اگر آداپتر محبوب شما در لیست فوق نیست، نباید نگران شوید زیرا به راحتی میتوانید یک درایور سفارشی بسازید که به صورت افزونه روی این کتابخانه نصب شده و بدون نیاز به تلاش زیاد کار کند. کتابخانه PhpFastCache، علاوه بر کارکرد فوق یک ساز و کار رویداد نیز ارائه میکند که امکان پاسخ دادن به رویدادهای از پیش تعریف شده مشخص را دارد. برای نمونه زمانی که چیزی از کش حذف میشود، میتوانید این رویداد را دریافت کرده و دادههای مرتبط را رفرش یا حذف کنید.
در بخشهای بعدی این نوشته قصد داریم به نصب و پیکربندی PhpFastCache همراه با نمایش چندین مثال بپردازیم.
نصب و پیکربندی
در این بخش به نصب و پیکربندی کتابخانه PhpFastCache میپردازیم. روشهای مختلفی برای اجرای این رویکرد در یک پروژه وجود دارد. اگر صرفاً میخواهید نسخه zip. یا tar.gz. کتابخانه را بدون نیاز به تلاش زیاد دانلود کنید میتوانید به سایت رسمی (+) آن مراجعه کرده و آن را به راحتی دانلود کنید.
از سوی دیگر میتوانید آن را به صورت یک بسته Composer نصب کنید. این کار باید یک روش ترجیحی باشد، چون موجب میشود که ارتقا و نگهداری در آینده نیز آسانتر باشد. اگر هنوز Composer را نصب نکردهاید، باید ابتدا این کار را انجام دهید.
زمانی که Composer را نصب کردید، میتوانید کتابخانه PhpFastCache را با استفاده از دستور زیر دریافت کنید:
$composer require phpfastcache/phpfastcache
به محض این که دانلود با موفقیت پایان یافت، میبایست دایرکتوری vendor را داشته باشید که شامل همه چیزهایی است که برای اجرای کتابخانه PhpFastCache نیاز دارید. از سوی دیگر اگر هر یک از اکستنشنها یا کتابخانههای مورد نیاز PhpFastCache موجود نباشند، کامپوزر از شما خواهد خواست که ابتدا آنها را نصب کنید.
همچنین میتوانید فایل composer.json را مشاهده کنید که محتوای آن شبیه زیر است:
1{
2 "require": {
3 "phpfastcache/phpfastcache": "^6.1"
4 }
5}
مهم نیست که چه روشی برای نصب کتابخانه PhpFastCache انتخاب میکنید، تنها نکته ضروری این است که فایل autoload.php را در اپلیکیشن خود بگنجانید تا همه چیز درست شود.
اگر از گردش کار مبتنی بر Composer استفاده میکنید، فایل autiload.php در زیر دایرکتوری vendor قرار دارد:
1// Include composer autoloader
2require '{YOUR_APP_PATH}/vendor/autoload.php';
در سوی دیگر اگر بسته zip. یا tar.gz. را دانلود کردهاید، فایل autoload.php باید در آدرس src/autoload.php موجود باشد:
1// Include autoloader
2require '{YOUR_APP_PATH}/src/autoload.php';
به این ترتیب همه چیز برای آغاز کش کردن و بهرهمندی از مزیتهای کتابخانه شگفتانگیز PhpFastCache آماده است. در بخش بعدی به بررسی چندین نمونه میپردازیم که روش استفاده از PhpFastCache در اپلیکیشنها را نمایش میدهند.
نمونههایی برای استفاده از PhpFastCache
قبلاً اشاره کردیم که کتابخانه PhpFastCache از آداپترهای مختلفی برای کش کردن استفاده میکند. در این بخش استفاده از آداپترهای file system و Redis را نمایش خواهیم داد.
کش کردن با استفاده از آداپتر Files
در ابتدا باید یک فایل به نام file_cache_example.php با محتوایی که در ادامه میبینید ایجاد کنید. ما فرض کردهایم که شما از گردش کار کامپوزر استفاده میکنید و از این رو دایرکتوری vendor در همان سطحی است که فایل file_cache_example.php قرار دارد. اگر PhpFastCache را به صورت دستی نصب کردهاید، میتوانید ساختار فایل را به همان ترتیب تغییر دهید:
1<?php
2/**
3 * file_cache_example.php
4 *
5 * Demonstrates usage of phpFastCache with "file system" adapter
6 */
7
8// Include composer autoloader
9require __DIR__ . '/vendor/autoload.php';
10
11use phpFastCache\CacheManager;
12
13// Init default configuration for "files" adapter
14CacheManager::setDefaultConfig([
15 "path" => __DIR__ . "/cache"
16]);
17
18// Get instance of files cache
19$objFilesCache = CacheManager::getInstance('files');
20
21$key = "welcome_message";
22
23// Try to fetch cached item with "welcome_message" key
24$CachedString = $objFilesCache->getItem($key);
25
26if (is_null($CachedString->get()))
27{
28 // The cached entry doesn't exist
29 $numberOfSeconds = 60;
30 $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
31 $objFilesCache->save($CachedString);
32
33 echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
34 echo "The value of welcome_message:" . $CachedString->get();
35}
36else
37{
38 // The cached entry exists
39 echo "Already in cache!</br>";
40 echo "The value of welcome_message:" . $CachedString->get();
41}
در ادامه به بررسی کد فوق میپردازیم و کارکرد هر بخش آن را توضیح میدهیم. نخستین نکته بدیهی این است که فایل autoload.php گنجانده شده و فضای نامی که قرار است مورد استفاده قرار گیرد ایمپورت گشته است.
1// Include composer autoloader
2require __DIR__ . '/vendor/autoload.php';
3
4use phpFastCache\CacheManager;
زمانی که از کش فایلها استفاده میکنیم، باید مسیر دایرکتوری که فایلهای ایجاد شده از سوی سیستم کش در آن قرار میگیرند را تعیین کنیم. این کار دقیقاً همان است که در قطعه کد زیر پیکربندی کردهایم:
1// Init default configuration for "files" adapter
2CacheManager::setDefaultConfig([
3 "path" => __DIR__ . "/cache"
4]);
البته باید مطمئن شویم که دایرکتوری cache وجود دارد و از سوی وبسرور قابل نوشتن است. سپس وهلهای از شیء cache را ایجاد کرده و تلاش میکنیم آیتم کش شده را با کلید welcome_message بارگذاری کنیم.
1// Get instance of files cache
2$objFilesCache = CacheManager::getInstance('files');
3
4$key = "welcome_message";
5
6// Try to fetch cached item with "welcome_message" key
7$CachedString = $objFilesCache->getItem($key);
اگر این آیتم در کش موجود نباشد، میتوانیم آن را به مدت 60 ثانیه به کش اضافه کنیم و از کش نمایش دهیم. از سوی دیگر اگر در کش موجود باشد، کافی است آن را واکشی کنیم.
1if (is_null($CachedString->get()))
2{
3 // The cached entry doesn't exist
4 $numberOfSeconds = 60;
5 $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
6 $objFilesCache->save($CachedString);
7
8 echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
9 echo "The value of welcome_message:" . $CachedString->get();
10}
11else
12{
13 // The cached entry exists
14 echo "Already in cache!</br>";
15 echo "The value of welcome_message:" . $CachedString->get();
16}
این مرحله از راهاندازی کاملاً آسان است و در واقع کافی است فایل را اجرا کرده و نتایج را بررسی کنید. زمانی که فایل برای نخستین بار اجرا میشود، باید خروجی زیر را مشاهده کنید:
Not in cache yet، we set it in cache and try to get it from cache! The value of welcome_message: This website uses PhpFastCache!
در اجرای بعدی، خروجی چیزی مانند زیر خواهد بود:
Already in cache! The value of welcome_message: This website uses PhpFastCache!
بدین ترتیب کش کردن به وسیله آداپتر File System به راحتی پیادهسازی میشود. در بخش بعدی همان نمونه را این بار با آداپتر کش Redis پیادهسازی میکنیم.
کش کردن با استفاده از آداپتر Redis
پیش از آن که وارد این بخش شویم ابتدا باید بگوییم که فرض ما بر این است که شما قبلاً سرور ردیس را نصب کرده و آن را روی پورت 6379 اجرا میکنید که پورت پیش فرض برای Redis است. بدین ترتیب میتوانیم فایلی به نام redis_cache_example.php ایجاد کرده و محتوای زیر را در آن قرار دهیم:
1<?php
2/**
3 * redis_cache_example.php
4 *
5 * Demonstrates usage of phpFastCache with "redis" adapter
6 *
7 * Make sure php-redis extension is installed along with Redis server.
8 */
9
10// Include composer autoloader
11require __DIR__ . '/vendor/autoload.php';
12
13use phpFastCache\CacheManager;
14
15// Init default configuration for "redis" adapter
16CacheManager::setDefaultConfig([
17 "host" => '127.0.0.1',
18 "port" => 6379
19]);
20
21// Get instance of files cache
22$objRedisCache = CacheManager::getInstance('redis');
23
24$key = "welcome_message";
25
26// Try to fetch cached item with "welcome_message" key
27$CachedString = $objRedisCache->getItem($key);
28
29if (is_null($CachedString->get()))
30{
31 // The cached entry doesn't exist
32 $numberOfSeconds = 60;
33 $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
34 $objRedisCache->save($CachedString);
35
36 echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
37 echo "The value of welcome_message:" . $CachedString->get();
38}
39else
40{
41 // The cached entry exists
42 echo "Already in cache!</br>";
43 echo "The value of welcome_message:" . $CachedString->get();
44}
همچنان که میبینید، این فایل دقیقاً همانند مثال قبلی با File System است؛ به جز این که در این بخش پیکربندی خاصی برای آداپتر Redis صورت گرفته است.
1// Init default configuration for "redis" adapter
2CacheManager::setDefaultConfig([
3 "host" => '127.0.0.1',
4 "port" => 6379
5]);
البته اگر شما سرور ردیس را روی چیزی به جز localhost اجرا میکنید، میتوانید تنظیمات میزبان و پورت را برای مطابقت با الزامات خودتان تغییر دهید. در ادامه فایل redis_cache_example.php را اجرا کرده و طرز کار آن را ببینید. همچنین میتوانید آن را با بررسی کردن خروجی در CLI مرتبط به Redis تأیید کنید.
127.0.0.1:6379> KEYS * 1) "welcome_message"
اینک همه آنچه برای استفاده از آداپتر Redis مورد نیاز است را در اختیار داریم. شما از آداپترها و گزینههای دیگر نیز میتوانید به همین ترتیب استفاده کنید.
اگر این نوشته برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزش های برنامه نویسی PHP
- گنجینه برنامه نویسی PHP
- مجموعه آموزشهای برنامهنویسی
- مجموعه آموزشهای طراحی و توسعه پروژههای وب
- بهینه سازی عملکرد اپلیکیشن های PHP — به زبان ساده
- آموزش مقدماتی ساخت ربات تلگرام با PHP
- برنامهنویسی PHP و هر آنچه برای شروع باید بدانید — آموزش جامع
==