مهندس نرم افزار و برنامه نویس
آموزش پیاده سازی Page Caching در php از پایه
با خبرکاو همراه باشید
Page Caching چیست؟
Page Caching روشی است که می خواهد وقتی داده های اصلی برای واکشی یا محاسبه گران باشند (معمولاً از نظر زمان دسترسی) ،آنوقت مجموعه ای از داده های تکراری را ایجاد کند.
از آنجا که PHP یک زبان برنامه نویسی تفسیر شده است ، سرور مجبور است هر بار که یک صفحه PHP درخواست می شود ، کد را اجرا کند. بسته به پیچیدگی و طول فرایند کار مثلا دریافت و خواندن از بانک اطلاعاتی و آماده سازی اون ها و.. ، این عملیات می تواند به زمان زیادی نیاز داشته باشد و منابع زیادی را طلب کند. اگر وب سایت شما ترافیک زیادی دارد ، واقعاً می تواند سرور و سایت شما را کند و نا کارآمد کند.
اگر یک صفحه وب ذخیره شود ، اسکریپت بررسی می کند که فایل حافظه پنهانی مرتبط وجود دارد یا خیر. در صورت انجام این کار ، پرونده استاتیک ذخیره شده به مرورگر بازدید کننده ارسال می شود. اگر اینگونه نباشد ، اولین باری که توسط یک بازدید کننده درخواست می شود ، یک نسخه ثابت از صفحه پویا ایجاد می شود.
با ایجاد نسخه ایستا از صفحات پویا ، سیستم حافظه پنهان منابع زیادی را در سرور ذخیره می کند زیرا اسکریپت PHP فقط یک بار اجرا می شود ، به جای اینکه هر بار که صفحه درخواست می شود اجرا کند.
پرونده های حافظه پنهان دارای طول عمر خاصی هستند که توسط برنامه نویس تنظیم شده است. اگر طول عمر تعریف شده بیشتر شود ، سرور اسکریپت PHP را اجرا می کند و متعاقباً نسخه جدید ذخیره شده آن را تولید می کند
مرحله اول: پرونده head.php را ایجاد کنید
ما باید دو پرونده ایجاد کنیم. اولین مورد در اینجا آمده است: یک پرونده جدید به نام head.php ایجاد کنید و کد زیر را در آن قرار دهید:
$url = $_SERVER["SCRIPT_NAME"];
$break = Explode('/', $url);
$file = $break[count($break) - 1];
$cachefile = 'cached-'.substr_replace($file ,"",-4).'.html';
$cachetime = 18000;
// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
echo "\n"
readfile($cachefile);
exit;
}
ob_start(); // Start the output buffer
این کد چه کاری انجام می دهد؟ پنج خط اول نام پرونده cached را مطابق با پرونده PHP فعلی ایجاد می کنند. بنابراین ، اگر از پرونده ای استفاده می کنید list.php، صفحه وب ایجاد شده توسط صفحه ذخیره سازی نامگذاری می شود cached-list.html.
خط ششم $cachetime متغیر ایجاد می کند ، که عمر حافظه پنهان ساده ما را (زمان Cachefile) تعیین می کند.
خطوط نه تا سیزده عبارت شرطی است که به دنبال یک پرونده حافظه پنهان به نام $cachefile است. در صورت یافتن پرونده ، یک نظر درج می شود (خط ده) و $cachefile فایل درج می شود. سپس( exit تابع) اجرای اسکریپت را متوقف می کند و فایل برای مرورگر کلاینت ارسال می شود. این بدان معنی است که اگر یک فایل استاتیک یافت شود ، به هیچ کد پی اچ پی توسط سرور اهمبت داده نمی شود.
اگر خط 14 $cachefile یافت نشد ، خط 14 بافر ایجاد می کند . این همه کد برای head.php پرونده است.
مرحله دوم: پرونده footer.php را ایجاد کنید
اکنون یک فایل PHP جدید دیگر ایجاد کنید ، با نامگذاری شده footer.php و کد های زیر را در آن قرار دهید:
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush(); // Send the output to the browser
اگر یک فایل ذخیره شده به نام $cachefile در سرور شما یافت نشد ، این کد اجرا می شود و فایل کش را خود ایجاد می کند.
در نتیجه ، دفعه بعدی که صفحه خواسته شده ی $cachefile در خواست میشود ، به جای اینکه کل پرونده PHP را اجرا کند(یعنی به بانک برود و دیتا واکش کند و جمع کند و نمایش دهد) ، فایل کشی که ساخته شده و استاتیک است به مرورگر سرویس دهنده ارائه می شود و کاربر با سرعت بسیار زیاد آن را میبیند
مرحله سوم: پرونده های کش را در صفحه خود وارد کنید
اکنون که دو پرونده لازم را ایجاد کرده اید ، کافی است که آنها را در صفحه PHP مورد نظر برای ذخیره قرار دهید.
همانطور که احتمالاً حدس زده اید ، head.php پرونده باید در ابتدای صفحه PHP و footer.php در انتها ، همانطور که در زیر آمده است ، درج شود :
مثلا یک فایل index دارید اول فایل این عبارت را فراخوانی میکنید :
include('head.php');
و در آخر کد ها این عبارت را، بعد از این دیگه تمام محتوا خودکار کش میشه:
include('footer.php');
خب الان وقتی صفحه ی مورد نظر رو از مرورگر درخواست کنید پی اچ پی برای اولین بار میاد داده هارو از بانک و سرور میخونه و در یک فایل html که همون کش ماست ذخیره میکنه و در دفعات بعدی این فایل استاتیک که از دیتاهای داینامیک ساخته شده به کاربر و ریکوئست ها نشان داده خواهد شد، بعدش خواهید دید چقدر سایتتون بهینه و پر سرعت میشود
خب البته در پروژه های پیشرفته میتونید از سیستم های کش حافظه ای مثل : redis و memcached و غیره بهره ببرید ، این آموزش فقط آموزشی پایه از پیاده سازی کش روی بستر فایل بود در واقع File Caching
امیدوارم لذت کافی رو برده باشید :)
منبع مولف: مهدی نوروزی خبرکاو
مطلبی دیگر از این انتشارات
NGINX
مطلبی دیگر از این انتشارات
آزمایش حدس گلدباخ با پایتون 1
مطلبی دیگر از این انتشارات
پیچ و خم مسیر زندگی یک برنامه نویس نوجوان