PHPでgzip圧縮する方法 極限までの圧縮をかけて表示最速への道のりまとめ
久しぶりに新しいwebサービス作ろうと立ち上げた「Judge」またもやメディア形式のサービスとして出発しますが、このサービスはSharetubeでダメだったポイントを徹底的に潰してやろうとひとまず圧縮関連をやりましたので忘備録としてここに置いておきます。
圧縮の全体図
基本はgzipを使用して圧縮を行いますが、css、htmlも圧縮する前に無駄な改行などを省いて圧縮をしています。・css圧縮
・html圧縮
・gzip圧縮(html、gzファイル生成)
・キャッシュ
・画像圧縮
この5点で表示最速を目指します。
css圧縮
読み込みたいcssを変数化して合体させつつ圧縮していきます。
// 読み込みたいcssを変数化
$core_css = file_get_contents(PATH."assets/css/core.css");
$common_css = file_get_contents(PATH."assets/css/common/common.css");
$matome_css = file_get_contents(PATH."assets/css/matome/common.css");
$css = $core_css.$common_css.$matome_css;
// css圧縮
$css = preg_replace;
// コロンの後の空白を削除する
$css = str_replace;
// タブ、スペース、改行などを削除する
$css = str_replace( array("
", "", "
", " ", " ", " ", " "), "", $css);
これでひとまず圧縮したcssが完成しました。
html圧縮
上記で圧縮したcssを差し込みつつ圧縮したいhtmlを変数に入れて圧縮します。
$gzip_article_html = 上記で圧縮したcssを差し込み圧縮したいhtmlを入れる;
// HTML圧縮
$search = array(
"/>[^S ]+/s", // strip whitespaces after tags, except space
"/[^S ]+
"/(s)+/s" // shorten multiple whitespace sequences
);
$replace = array(
">",
"<",
"\1"
);
$gzip_article_html = preg_replace;
これでひとまず圧縮したhtmlが完成しました。
gzip圧縮
圧縮をかけたhtmlを更にgzipにて圧縮して最速を狙いましょう。
// articleファイル生成
file_put_contents;
$file_org = 生成したい場所/index.html";
$file_gzip = $file_org.".gz";
// 元ファイルの内容を読み込む
$code = file_get_contents($file_org);
// gzip圧縮処理して同一フォルダにファイルを作成
$gzip = gzopen($file_gzip ,"w9");
gzwrite($gzip ,$code);
gzclose($gzip);
関数:gzopen($file_gzip ,"w9");のw9という箇所を1〜9にすると圧縮率が変わりますので最適な圧縮率にしましょう。これでindex.htmlとindex.html.gzが生成されます
これだけでは動きませんので下記に書いた内容を忘れないでくださいね。
.htaccessでgzipを利用可能にする
RewriteEngineをOnにする
Options +FollowSymLinks
内部ディレクトリ非表示
Options -Indexes
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule .+ %{REQUEST_URI}.gz
ForceType text/css
AddEncoding x-gzip .gz
ForceType application/x-javascript
AddEncoding x-gzip .gz
ForceType text/html
AddEncoding x-gzip .gz
(.php) ForceType text/html
AddEncoding x-gzie>
材料ツナ缶 80g
ケーパー酢漬け 大さじ1
マヨネーズ 大さじ3
胡椒 少々