PDA

View Full Version : آموزش: ۴ تکنیک جدید برای افزایش کارایی بافر کردن با PHP



soroush.r70
پنج شنبه 31 فروردین 1391, 12:03 عصر
اگر تا اواسط برنامه نویسی php رفته باشید،احتمالا سری نیز به کوچه بافر زده اید.به صورت خلاصه بافر به شما امکان می دهد تا خروجی مورد نظر را قبل از نمایش در مرورگر ،ذخیره کنید و یا آنرا تغییر دهید.پس در مواقعی می تواند حکم نوشدارو را داشته باشد.مثلا وقتی اطلاعاتی را به صورت صفحه بندی از دیتابیس می خوانید و برای کاربر نمایش می دهید.حالا هوس می کنید که امکان خروجی pdf را نیز فراهم کنید.کافیست درابتدای بخش نمایش اطلاعات،کار بافر کردن را شروع کنید و در انتها نیز آن را پایان دهید.حالا همین بخش را به تابعی pdf بفرستید تا فایل pdf را تحویل تان دهد.

البته قصد ما در این مطلب آموزش بافر در php نیست.بلکه می خواهیم ۴ تکنیک خوب و بدردبخور را معرفی کنیم که می توانید در عملیات بافر از آنها استفاده کنید.

به صورت ساده عمل بافر در php به صورت زیر انجام می شود:

<?php
// start output buffering at the top of our script with this simple command
// we've added "ob_postprocess" (our custom post processing function) as a parameter of ob_start
ob_start('ob_postprocess');
flush();
ob_clean();
?>

<html>
<body>
<p>Hello world!</p>
</body>
</html>

<?php
// end output buffering and send our HTML to the browser as a whole
ob_end_flush();

// ob_postprocess is our custom post processing function
function ob_postprocess($buffer)
{
// do a fun quick change to our HTML before it is sent to the browser return $buffer;
}
?>

در مثال های بعدی از تابع ob_postprocess استفاده می کنیم.

۱.بهینه سازی HTML با حذف فضاهای خالی

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

function ob_postprocess($buffer)
{
$buffer = trim(preg_replace('/\s+/', ' ', $buffer));
return $buffer;
}

2.فشرده سازی HTML با gzip

فشرده کردن خروجی بوسیله GZIP،توصیه اکید هر شخصی است که به کارایی وب سایت می اندیشد.

function ob_postprocess($buffer)
{
// check if the browser accepts gzip encoding. Most do, but just in case
if(strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)
{
$buffer = gzencode($buffer);
header('Content-Encoding: gzip');
}
return $buffer;
}

3.اضافه کردن acronyms به HTML

function ob_postprocess($buffer)
{
$acronyms['html'] = 'hypertext markup language';
$acronyms['css'] = 'cascading style sheets';
foreach($acronyms as $acronym => $meaning)
{
$buffer = preg_replace('/(\b' . $acronym . '\b)(?=[^>]*<)/i', '<acronym title="' . $meaning . '">\\1</acronym>', $buffer);
}
return $buffer;
}

4.انکود کردن کاراکترها

function ob_postprocess($buffer)
{
// add styled double quotes
$buffer = preg_replace('/"(?=[^>]*<)([^"]*)"(?=[^>]*<)/u', '“\\۱”', $buffer);
// add styled apostrophes
$buffer = preg_replace("/'(?=[^>]*<)/i", "’", $buffer);
// add ellipses
$buffer = str_replace('...', '…', $buffer);
// encode ampersands
$buffer = str_replace('&', ' & ', $buffer);
return $buffer;
}


منبع : fotolia

MMSHFE
پنج شنبه 31 فروردین 1391, 12:37 عصر
ضمن تشکر، فقط یک نکته که به ذهنم رسید اینکه در تکنیک 1، باید مراقب باشیم که فاصله های خالی داخل عبارات حذف نشن و فقط فواصل خالی اضافه رو حذف کنیم. مثلاً بعضی جاها ممکنه عبارت داخل تگ pre باشه و فواصل خالی تکراری عمداً گذاشته شده باشه.
موفق باشید.