سرعت یک وب سایت به المان های مختلفی از قبیل سرعت سرور و هاستینگ وب سایت، گرافیک های استفاده شده در سایت و همچنین کدهای موجود در صفحات , ... وابسته می باشد. در این مقاله چند روش را برای مبتدیان بیان می نمایم تا با استفاده از آن بتوانند سرعت وب سایت خود را بالا ببرند. البته آموزش های این مقاله مناسب برای سرورهای لینوکس و سایت های نوشته شده توسط PHP می باشد.
افزایش سرعت وب سایت با استفاده از کش PHP
php تابعی دارد که با استفاده از آن می توانید محتوای صفحات را کش نموده و به یکباره به مرورگر کاربر ارسال نمایید برای این کار می توانید از کد زیر استفاده نمایید:
ob_start(); // شروع بافر
/* محتوای صفحه*/
ob_get_contents(); // گرفتن خروجی صفحه
ob_end_flush(); // ارسال محتوای صفحه به خروجی و پایان بافر
?>
بافر در حقیقت اطلاعات و محتوای صفحه را در حافظه ای ذخیره می نماید و پس از فراخوانی به مرورگر کاربر ارسال می نماید. شما می توانید محتوای کش شده را در یک فایل ذخیره نموده و زمان درخواست مجدد فایل توسط کاربر فایل کش شده را به کاربر نمایش دهید. این کار را می توانید توسط کد زیر انجام دهید.
<?php
//settings
$cache_ext = '.html'; //فرمت فایل
$cache_time = 3600; //کش کردن فایل برای 1 ساعت و یا 3600 ثانیه
$cache_folder = 'cache/'; //فلدر برای نگهداری فایل های کش
$ignore_pages = array('', '');//در صورتی که نمی خواهید فایل خاصی کش شود
$dynamic_url = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // پیدا کردن آدرس صفحه
$cache_file = $cache_folder.md5($dynamic_url) . $cache_ext; // نام فایل کش
$ignore = (in_array($dynamic_url,$ignore_pages)) ? true:false; //چک کردن اینکه آیا فایل جزو فایل های درخواست نشده نباشد
if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) {
//check Cache exist and it's not expired.
ob_start('ob_gzhandler'); //فعال نمودن بافر با متغیر ob_gzhandler که محتوا را به صورت فشرده شده به خروجی می فرستد.
readfile($cache_file); //خواندن فایل کش
echo '<!-- cached page - '. date('l jS \of F Y h:i:s A', filemtime($cache_file)) . ', Page : '.$dynamic_url.' -->';
ob_end_flush(); //چاپ خروجی و پایان بافر
exit(); //خروج از حلقه در صورتی که فایل کش موجود و فعال می باشد.
}
//فعال سازی بافر توسط فشرده سازی gzip.
ob_start('ob_gzhandler');
######## محتوای وب سایت شما در بخش زیر#########
?>
<!DOCTYPE html>
<html>
<head>
<title>عنوان صفحه</title>
</head>
<body>
بدنه صفحه.
</body>
</html>
<?php
######## محتوای صفحه#########
if (!is_dir($cache_folder)) { //ایجاد یک فلدر برای نگهداری فایل های کش در صورتی که وجود نداشته باشد
mkdir($cache_folder);
}
if(!$ignore){
$fp = fopen($cache_file, 'w'); //باز نمودن فایل برای نوشتن
fwrite($fp, ob_get_contents()); //نوشتن محتوای بافر در یک فایل
fclose($fp); //بستن فایل
}
ob_end_flush(); //چاپ محتوای صفحه در خروجی
?>
با استفاده از روش بالا می توانید بار موجود بر روی سرور و همچنین سرور لود شدن صفحات را تا حد بسیاری افزایش دهید.
فعال نمودن فشرده سازی صفحات توسط htaccess
با استفاده از htaccess می توانید محتوای صفحه را به صورت فشرده به مرورگر کاربر ارسال نمایید. هم اکنون اکثر مرورگرها قابلیت خواندن اطلاعات به صورت فشرده سازی شده را دارند و با استفاده از امکانات htaccess می توانید این امکان را فعال نمایید. برای انجام می توانید کد زیر را در فایل htaccess خود کپی نمایید.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>
البته می توانید این کار را در فایل های php خود نیز انجام دهید:
این کار در حدود 60% حجم را کاهش می دهد.
فعال کردن کش در htaccess
با استفاده از mod_expires
توسط این ماژول می توانید تنظیمات کنترل کش خود را انجام دهید برای انجام این کار کافی است کد زیر را در فایل htaccess خود کپی نمایید:
ExpiresActive On
ExpiresDefault A300
# Expires after 1 month
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/pdf A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/plain A2592000
# Expires after 1 day
ExpiresByType text/css A86400
</ifModule>
خط ExpiresDefault می گوید فایل ها بعد از300 ثانیه اکسپایر گردند و خطوط ExpiresByType می گوید این فرمت های فایل برای 2592000 کش شوند.
با استفاده از mod_headers
با استفاده از mod_expires می توانید نوع کش را کنترل نمایید. برای انجام این کار کد زیر را در فایل htaccess خود کپی نمایید.
ExpiresActive On
# Expires after 1 month
<filesMatch ".(gif|png|jpg|jpeg|ico|pdf|js|htm|html|txt)$">
Header set Cache-Control "max-age=2592000"
</filesMatch>
# Expires after 1 day
<filesMatch ".(css)$">
Header set Cache-Control "max-age=86400"
</filesMatch>
</ifModule>
خط ExpiresActive اکسپایر شدن را فعال می نماید و توسط filesMatch می توانید فرمت های فایل خاصی را کنترل نمایید. توسط این ماژول می توانید از این هم فراتر روید و موارد بیشتری را تنظیم نماید:
# Turn on Expires and set default expires to 3 days
ExpiresActive On
ExpiresDefault A259200
# Set up caching on media files for 1 month
<filesMatch ".(ico | gif | jpg |jpeg|png|flv | pdf|swf|mov|mp3|wmv|ppt)$">
ExpiresDefault A2419200
Header append Cache-Control "public"
</filesMatch>
# Set up 2 Hour caching on commonly updated files
<filesMatch ".(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "private, must-revalidate"
</filesMatch>
# Force no caching for dynamic files
<filesMatch ".(php|cgi|pl|htm)$">
ExpiresDefault A0
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
</filesMatch>
</ifModule>
فعال نمودن Cache-Control به public به آن معناست که مرورگر می توانید فایل را کش نماید و private, must-revalidate به این معناست که مرورگر نمی بایست صفحه را کش نماید. بخش no-store, no-cache, must-revalidate, max-age-0 به مرورگر اعلام می نماید هرگز این نوع فایل ها را کش ننمایید.