مقدمه:
این روزها با قابلیت اتصال به اینترنتهای پر سرعت دیگر لازم نیست نگران سرعت اینترنت ،اندازه فایلها و صفحات باشیم.
با این حال نباید گفت که نیازی به سرعت بخشیدن به سایتمان نیست.اگر خواستار کاهش بار از روی سرور ،همچنان کاهش تعداد درخواستهای HTTP و افزایش تعداد بازدیدکننده ها هستید.چند تکنیک وجود دارد که می توانید از آنها استفاده کنید.این مقاله تعدادی از فوت و فن های PHP نظیر فشرده سازی و caching رو پوشش میدهد.
۱-ادغام CSS با PHP
به عنوان توسعه دهندگان وب،ما اغلب CSS را بین چندین فایل جداگانه به عنوان یک تفکیک منطقی و ایجاد تغییرات راحتر نگه داری میکنیم.با این حال،افزایش تعداد درخواستها از سرور باعث کند تر شدن بارگذاری صفحات میشود.با استفاده از PHP ما میتوانیم دو حالت بسیار خوب داشته باشیم; نگهداری چندین فایل و استفاده از یک درخواست برای بازیابی همه ی آنها.
شروع به کار:
قبل از اینکه ما بتوانیم فایل CSS رو بهینه کنیم ، ما به تعدادی فایل CSS برای کار کردن نیاز خواهیم داشت.بنابراین اجازه دهید تا سه فایل CSS ایجاد کنیم و کدهای CSS زیر را در آنها قرار دهیم.
// main.css // Just some sample CSS body { width: 800px; margin: 0 auto; color: grey; } #wrapper { margin-top: 30px; background: url(../images/cats.png); }
// typography.css // Just some sample CSS body { font-family: Arial, san-serif; font-weight: bold; } strong { font-size: 120%; }
// forms.css // Just some sample CSS form { position: relative; top: 400px; z-index: 99; } input { height: 50px; width: 400px; }
پی اچ پی
ما نیاز به محتویات این فایل ها و الحاق آنها به یکدیگر در مرحله تعیین شده داریم.کد زیر را دریافت کرده و داخل یک فایل با پسوند php قرار دهید.
<?php //Lets define some useful variables // --- NOTE: PATHS NEED TRAILING SLASH --- if (isset($_GET['q'])) { $files = $_GET['q']; // Got the array of files! //Lets just make sure that the files don't contain any nasty characters. foreach ($files as $key => $file) { $files[$key] = str_replace(array('/', '\', '.'), '', $file); } $cssData = ''; foreach ($files as $file) { $cssFileName = $cssPath . $file . '.css'; $fileHandle = fopen($cssFileName, 'r'); $cssData .= "n" . fread($fileHandle, filesize($cssFileName)); fclose($fileHandle); } } // Tell the browser that we have a CSS file and send the data. header("Content-type: text/css"); if (isset($cssData)) { echo $cssData; echo "nn// Generated: " . date("r"); } else { echo "// Files not avalable or no files specified."; } ?>
فرار از down شدن
چنین به نظر می رسد که این کار، امری پیچده است،اما اگر با من تا آخر همراهی کنید خواهید دید واقعا خیلی سادست.
<?php //Lets define some usefull variables // --- NOTE: PATHS NEED TRAILING SLASH --- $cssPath = './css/'; if (isset($_GET['q'])) { $files = $_GET['q']; // Got the array of files! //Lets just make sure that the files don't contain any nasty charactors. foreach ($files as $key => $file) { $files[$key] = str_replace(array('/', '\', '.'), '', $file); }
این تکه کد مسیر پوشه css را تنظیم و بررسی میکند که ما فایلی برای کار کردن داریم یا نه.مسیر CSS نیاز به یک بک اسلش دارد در غیر اینصورت ما خودمان را در دریایی از خطاهای بارگذاری (Load) خواهیم یافت.اگر ما بخواهیم می توانستیم به صورت خودکار بررسی کنیم و یک اسلش “/” در صورت نیاز اضافه شود.با این حال به خاطر سادگی این کار را حذف کردم.
سپس ما نام هر فایل و رفع هر گونه مشکل و اسلش “/” را بررسی میکنیم.این امر موجب ممانعت افراد از مرور فایل سیستم توسط درخواست نام پرونده ها نظیر ‘../../secret/file’ میشود.
$cssData = ''; foreach ($files as $file) { $cssFileName = $cssPath . $file . '.css'; $fileHandle = fopen($cssFileName, 'r'); $cssData .= "n" . fread($fileHandle, filesize($cssFileName)); fclose($fileHandle); }
combine کردن فایلهای css طرح خیلی خوبیه ولی به نظر من سایتهایی که ویزیت بالایی ندارن نیاز به این کار ندارن و سایتهایی که ویزیت بالایی دارن این کار باعث میشه که داپم لود فایلها رو داشته باشن مگر اینکه خروجی اسکریپت روی سرور کش بشه.
من این کار روی سایتی که ۱۲۰ ویزیت در روز داشت تست کردم.
cacti بهم نشون داد که بدون کش کردن خوندن از روی هارد وقت بیشتری می گیره.
در کل از مقالتون خیلی استفاده کردم.
موفق باشید.
منظورم از ۱۲۰ – ۱۲۰ هزار بود