ساخت سیستم کش در php

ساخت سیستم کش در php

اگر وب سایت شما مقدار زیادی ترافیک در طول روز دریافت می کند و بارگذاری وبسایت شما کند شده است ، شما احتملا به دنبال روش هایی مبنی بر سیستم کش cache برای بالا بردن سرعت لود سایت خود هستنید.

همانطور که می دانید هر درخواست کلاینت-سرور شامل تعداد زیادی کویری ، حلقه ها ، محاسبات و دستورات دیتابیس است . همه این ها بر روی هم زمان لود سایت را بالا می برد. راهکار ساده برای جلوگیری از همه اینها ساخت کش فایل و ذخیره آنها در یک دایرکتری جدا است ، که بعدا برای بارگذاری صفحات استاتیک به جای صفحات زنده و داینامیک استفاده شود .

 

ساخت سیستم کش در php

انجین های مختلفی برای سیستم کش در php مانند APC , Xcache یا Opcache برای افزایش بازدهی اپلیکیشن شما وجود دارد ، اما همه آنها کاملا متفاوت از هم کار می کنند ،

اگر شما کنجکاو هستید در مورد آنها بیشتر بدانید با یک جستجوی ساده مقالات زیادی را در وب می توانید پیدا کنید ، اما در این آموزش شما ساخت یک سیستم کش در php را به سادگی با استفاده از output Buffer و Filesystem یاد می گیرید . ترکیب این دو تابع یک سیستم کش عالی را برای شما ایجاد می کند.

 

PHP output Buffer : این قابلیت به طور قابل توجهی بازدهی را افزایش و مقدار زمان نیاز برای دانلود را کاهش می دهد ، چونکه خروجی در قسمت های کوچک برای مرورگر فرستاده نمی شود بلکه کل صفحه HTML در یک متغییر ارسال می شود . این متد بسیار ساده است نگاهی به کد زیر می ندازیم :

 

در خط اول ob_start() ، output buffering را فعال می کند یعنی اینکه بعد از این همه چیز در بافر ذخیره و محتویات بافر از طریق ob_get_contents() در دسترس خواهد بود . ob_end_flush() در اخر برای غیرفعال سازی بافرینگ استفاده شده است.

 

PHP filesystem : بخشی از هسته php است که به ما اجازی خواندن و تغییر محتویات فایل ها را می دهد

 

همانطور که می بینید در خط اول fopen() یک فایل را در مود رایت که با w مشخص شده است باز می کند (در صورتی که وجود نداشته باشد ، می سازد) . در خط دوم fwrite() رشته تعریف شده را در فایل اضافه می کند و در اخر fclose() با موفقیت فایل باز شده در ابتدای کد را می بندد.

 

پیاده سازی سیستم کش در php

حاله که شما به صورت واضح در مورد output buffer و filesystem اگاه شدید ، ما از هر دوی این متد ها برای ساخت سیستم کش در php استفاده خواهیم کرد. لطفا نگاهی به عکس زیر بیندازید ، فلوچارت زیر به شما ایده سیستم کش (cache)   را می دهد.

ساخت سیستم کش در php

زمانی که یک کاربر درخواست محتویات را میدهد ، اسکریپت به سادگی کش صفحه درخواستی را نشان می دهد ، اگر وجود نداشته باشید ، یک کپی جدید از آن ساخته و به مرورگر ارسال میکند.

در زیر یک مثال کامل از پیاده سازی سیستم کش در php را برای تست شما قرار دادیم ، می توانید این کد ها را در پروژه های خود استفاده کنید و انتظار کار کردن را به صورت کامل داشته باشید .می توانید زمان انقضا ، پسوند فایل کش (cache) و .. بنا به نیاز خود تغییر بدهید.

یک راهنمایی کوچک برای درک کد سیستم کش در php :

  1. دریافت آدرس URL صفحه و تبدیل آن به md5 برای نامگذاری فایلو
  2. بررسی اینکه آدرس جز اسامی نادیده گرفته نباشد
  3. بررسی برای فایل های کش انقضا نشده و جروجی gzip بافر.

 

جمع بندی

امیدوارم این اسکریپت به شما کمک کند که سیستم کش اختصاصی خودتان را بسازید، اما شما باید از کش کردن صفحاتی مثل حساب کاربری(بعد از لاگین) ، صفحات جستجو یا صفحاتی که زود به زود آپدیت میشوند(صفحه اصلی) خودداری کنید ، کاربران شما ممکن از این موضوع ناخوشایند راضی نباشند .

و به یاد داشته باشید فقط کش کردن صفحات کافی نیست ، ترکیب و فشرده سازی  فایل ها جاواسکریپت ، CSS برای افزایش بازدهی یا حتی چندین ترفند و نکته و استفاده از ابزارهای رایگان مثل PageSpeed  ، Chrome DevTools برای بررسی بازهی و سرعت سایت شما بسیار کاربردی و تاثیرگذار خواهند بود .

همچنین روش دیگری برای کش کردن صفحات وب در PHP معرفی کردیم که حتما مطالعه بفرمایید.

موفق و پیروز باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۴)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. امین ۲۶ آذر ۱۴۰۱

    سلام وقت بخیر ایا امکانش هست بخشی از کد رو به نحوی جلوگیری از کش شدنش کرد مثلا بگیم خط ۵۰ تا ۶۰ کش نشه و بقیه کش بشه با تشکر

    پاسخ
    1. حسن شفیعی ۲۶ آذر ۱۴۰۱

      سلام. ممنون
      در اینصورت باید برای فایل موردنظر کش جداگانه بنویسید و کدهای مربوط به کش کردن رو در همان فایل بنویسید

      پاسخ
  2. سینا ۲۵ دی ۱۳۹۶

    سلام سینا هستم از ملبورن
    من نیاز دارم یه فایل اکسل خیلی بزرگ با ۵۰ تا ۱۰۰ هزار ردیف رو تولید کنم تا کاستومر دانلود کنه.
    با توجه به محدودیت تایم سرور(۹۰ ثانیه) نمی تونم منتظر شم که تمام اطلاعات از API بیاد بعد من فایل رو درست کنم.
    چه جوری میتونم از بافرینگ استفاده کنم ممنون میشم کمکم کنید

    پاسخ
    1. حسن شفیعی ۲۵ دی ۱۳۹۶

      سلام . از توابع fopen و ob_clean برای دریافت خروجی استفاده کنید . همچنین قبل از اجرا حتما با set_time_limit() محدودیت زمان اجرا را افزایش بدید .
      https://netparadis.com/execution-time-limit-in-php


      ?php
      define("CHUNK_SIZE", 1024*1024); // Size (in bytes) of tiles chunk

      // Read a file and display its content chunk by chunk
      function readfile_chunked($filename, $retbytes = TRUE) {
      $buffer = "";
      $cnt =0;
      // $handle = fopen($filename, "rb");
      $handle = fopen($filename, "rb");
      if ($handle === false) {
      return false;
      }
      while (!feof($handle)) {
      $buffer = fread($handle, CHUNK_SIZE);
      echo $buffer;
      ob_flush();
      flush();
      if ($retbytes) {
      $cnt += strlen($buffer);
      }
      }
      $status = fclose($handle);
      if ($retbytes && $status) {
      return $cnt; // return num. bytes delivered like readfile() does.
      }
      return $status;
      }

      موفق باشید

      پاسخ
دوره های آموزشی