เพิ่มความเร็วเว็บไซต์ด้วย GZip Compression

ออกตัวก่อนเลยว่าเหมาะกับ เบราเซอร์รุ่นใหม่ 
พวก IE 6, 7, 8 นี่เก่าไปละ IE 9 เองก็จะยังเก่าไปซะด้วยซ้ำ -_-"
ไปได้มาจาก Google นี่ล่ะ ทีแรกกะว่าจะใช้ APC, Memcache อะไรพวกนี้ซะอีก 
แต่ลองถึงคนที่ต้องเอาโค้ดเราไปคิดตั้ง บางทีเค้าจะคอมไพล์ APC ยังจะทำไม่เป็นซะด้วยซ้ำไปเลย Search ไปๆ มาๆ
ก็มาเจอวิธีแบบง่ายๆ อาศัยฟังก์ชั่นของ PHP ธรรมดานี่ล่ะ
* เช็กจาก $_SERVER['HTTP_ACCEPT_ENCODING'] ก่อนก็ได้ว่าเซิฟเวอร์ของเราเปิดใช้งาน gzip รึป่าว
** มา edit เพิ่มเติม
จากที่ลองเอาไปใช้งาน ถ้าจะให้เห็นผลที่ชัดเจนต้องเซ็ตค่าพวก header เข้าไปด้วยจะแหล่มมาก

// Calling function ob_gzhandler if server enable gzip

if(substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')>0){
    ob_start('ob_gzhandler');
    header('Content-Encoding: gzip');
    header('Accept-Encoding: gzip, deflate');
    $gz_enable = TRUE;
}else{
    ob_start();
    $gz_enable = FALSE;
}

// Set header
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: public');
header('Expires: '.gmdate("D, d M Y H:i:s", time()+3600). ' GMT');
header('Last-Modified: '.gmdate("D, d M Y H:i:s"). ' GMT');

header('Pragma: no-cache');


// Your template here
echo "Speed Test";


if($gz_enable==TRUE){
    // Get contents and length
    $content_ob = ob_get_contents();
    $gzip_size = ob_get_length();
    ob_end_clean();

    // Compress a string with gzcompress
    $content = substr(gzcompress($content_ob, 9), 0, - 4);

    echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
    echo $content;

    // pack data to binary
    echo pack('V', crc32($content_ob));
    echo pack('V', $gzip_size);
}else{
    $content_ob = ob_get_contents();
    ob_end_clean();
    echo $content_ob;
}

หลักการ แบบคร่าวๆ ก็น่าจะเป็น ทำ gzip ก่อน เสร็จแล้วก็แปลงเป็น binary เซิฟเวอร์ก็จะได้อ่านได้เร็วขึ้นประมาณนี้(ล่ะมั้ง  ฮ่าาาาา ก็แปลตาม function ที่เค้าใช้น่ะล่ะ)


Ref.

Comments