YSlow」タグアーカイブ

Head Cleaner (仮) で、なぜ速くなるのか?

WordPress Plugin には、WP-Cacheや、WordPress Super Cache と言った高速化を実現するためのプラグインが多数あります。
これらのプラグインは、本来は動的に生成している WordPress のコンテンツをサーバ上にキャッシュしておいて、サーバ負荷を減らし、クライアントからのリクエストに対して、素早く返答しようというモノです。
つまりは、サーバ側の処理(バックエンド)の高速化。

Head Cleaner (仮) は、これらのプラグインとは違い、クライアント側の処理(フロントエンド)を高速化しようと言うのが狙いです。
多分、今まで無かったタイプの高速化プラグインでは無いでしょうか?
この辺のフロントエンドの高速化の解説は、以下のエントリが詳しいです。

これらで、提案されている基本的な技法は

  • クライアント側のキャッシュを活用したり、無駄な HTTP リクエストを減らして、ネットワークボトムを解消しよう
  • ページレンダリングに関連するもの(CSS)は先に読み込ませ、関係ないもの(JavaScript)は後で読み込んで、見た目の表示を速くしよう

と言うことになります。

では、 Head Cleaner (仮) の高速化技法について、当サイトのトップページを例に検証してみましょう。
続きを読む

Head Cleaner (仮) – ここまでのまとめ

さて、先日から「Head Cleaner (仮)」を、夜半になると Twitter 上で公開しては修正、機能アップを繰り返してきたのですが、盛り込みたかった機能もかなり盛り込めたので、これより熟成期間に入ります。
で、熟成期間に入る前に今までの経緯をまとめておきます。
まずは、このプラグインの基本的な動作原理。

  1. WordPress のテーマテンプレート inex.php や single.php に <?php get_header(); ?> って記述があると思いますが、これが呼ばれた時に動作を開始します。
    この時は、まだ ob_start で、バッファ取得開始するだけ。
  2. header.php の <?php wp_head(); ?> が呼ばれた時点でバッファ取得を終了し、書き出された文字列を解析して整形します。

やってることは、これだけ。
まだまだ開発途上のプラグインですが、人柱になっていただいている方々、ありがとうございます m(_ _)m
不具合は色々と出てきましたが、私は元気です。

さて、では以降は今までの経緯のまとめ。
続きを読む

Head Cleaner (仮)

WordPress にプラグインをガンガンと突っ込んでいくと <head> 部に、JavaScript やら CSS やらが、ドンドン追加されて、カオスなことになってしまいます。
そんな状態の自サイトを「YSlow for Firebug」で診断してみると、とても低いスコアになったりしてガックリ来るわけです。
プラグインを外したりしたくなかったりするので、チマチマと修正したりして使っていたんですが、プラグインのバージョンアップのたびに修正するのも面倒です。

そんな折、「WordPress Head Cleaner」というプラグインを見かけました。
これは、ひょっとして <head> 部を自動でキレイにしてくれるのか?と期待してダウンロードしてみたんですが、ソースを見てガッカリ。
ついカッとなって、こんなプラグインを作ってしまいました。

ダウンロード

Head Cleaner@WordPress Plugins
または
Head Cleaner (最適化&高速化)@JSeries

[2/24 6:00 追記] コメント蘭での、ゆりこさんからの指摘により、 Safari では拡張子が .gz の css, JavaScript を認識できないことが判明。
多分 「.gz」の Content-Type が 「text/javascript」 or 「text/css」 になっていないからだと思われます。
Ver.0.3.2 以降で、Safari に対しては gzip 圧縮されたファイルを転送しないように修正しました。
なお IE, Firefox, Opera, Chrome では、問題無いようです。

[2/25 8:00 追記]Ver. 0.4.0 から CSS もすべて結合することができるようになりました。
# ただし、デフォルトでは OFF になっています。
CSS 内の画像ファイル等への相対パスはすべて絶対パスに置き換えます。
制限事項としては、media 属性を気にせずにすべて結合し、media="screen" にしてしまうため、想定外の表示になる可能性もあります。
この辺は、後々修正します。

[2/26 12:30 追記]Ver. 0.5.x から、CSS と JavaScript をそれぞれ CSSTidyjsmin-php で圧縮できるオプションを付けました。
また、コメント欄でのゆりこさんからの指摘により、ユーザエージェントに「AppleWebKit」を含むブラウザ(ただし chrome は除く)からのリクエストがあった場合は .gz ファイルを転送しないように修正しました。
あと、簡単な注意書きを書いた「readme_ja.txt」を同梱したので、読んでやってください。

[3/4 18:30 追記]正式版のリリース準備版を公開しました。
今まで、php ファイルを直接修正していた各種設定は、管理画面の「設定」>「Head Cleaner」から行えます。
また、競合が報告されているプラグインと、その対処法について「readme_ja.txt」に書いてあります。
そちらも、ご一読ください。

[3/5 23:00 追記]正式版リリースしました。
続きを読む

コードのサイズを圧縮する!

JavaScript のコードから、不用な文字を削除してコードのサイズを小さくしようと言う提言。
JavaScript圧縮ツールや難読化ツールを用いれば、比較的簡単にできます。
これは、かなり効果が期待できるので、是非対応したいところ。
難読化ツールだと、バグフィックスが面倒なので、圧縮ツールを使えばいいかと思われます。
オリジナルと別に圧縮したコードをサーバにおいておいて、mod_rewrite で置き換えてやれば、メンテナンスも問題ないでしょう。

私が、試してみた圧縮ツールはこの辺り。

続きを読む

scriptは下に!

script がダウンロードされている間は、それより下に配置されたコンテンツはレンダリングされないので、script は可能な限り下に配置しましょうと言う提言。

言ってることは分かるんですが、中々難しいですね。
特に各プラグインが挿入している script タグは念入りにテストしないと、おいそれと下方に配置はできませんね。

ちなみに WordPress のプラグインで、ヘッダに JavaScript 等を挿入している箇所は
add_action('wp_head','hogehoge');
なので、ここを
add_action('wp_footer','hogehoge');
にしてやれば、下方に配置させることができます。
# ただ、JavaScript と同時に CSS も HEAD 内に吐き出してることが多いので、注意が必要。

CSSは上に!

すべての CSS がダウンロードされるまで、ブラウザでのレンダリングが始まらないため、CSS はできるだけ上に書きましょうと言う提言。
また link 要素を使用せずに @import で CSS を読み込んだ場合は、IE で一瞬 CSS が適用されずに素のコンテンツが表示される FOUC (Flash of Unstyled Content) と言う問題が起こります。

これについては、ウチのサイトでは問題は無かった。
普通、スタイルシートは HEAD の外に置くようなことは無いので、あまり気にしなくてもいいのでは?

ただ FOUC については初耳だったので、今後は気をつけるようにしたい。

コンポーネントを圧縮しよう!

最近のブラウザであれば gzip 圧縮されたファイルを送信すれば、ブラウザが圧縮解除して解釈してくれるので、できるだけ gzip 圧縮して送信して転送量を減らそうと言う提言。
CSS / JavaScript / html などのテキストファイルについては、結構効果的だ。
Wordpress の記事本文については、管理画面で設定変更することによって gzip 圧縮転送ができるが、CSS / JavaScript に関しては、設定してやらなければ gzip 転送はされない。

Web サーバとして Apache を採用しているならば、mod_gzip または mod_deflate を設定するのが、現実的だろう。

が、さくらのレンタルサーバでは、どちらのモジュールも使用できない模様。

続きを読む

Expiresヘッダを追加しよう!

コンテンツの有効期限を遠い未来に設定し、クライアントのキャッシュを利用して HTTP リクエストを減らそうと言う提言。
Web サーバとして Apache を採用しているならば、mod_expires を設定するのが、現実的だろう。

が、さくらのレンタルサーバでは mod_expires は使用できない模様。

続きを読む

HTTPリクエストの数を減らそう!

HTTP リクエストの数を減らすための具体的な方法と対応を考えてみる。

パッと思いつくのは、こんな感じ?

  • 分散している JavaScript / CSS を一ファイルにまとめる
  • 画像ファイルを減らす
  • できるだけクライアントにキャッシュさせて、ファイル要求を減らす

続きを読む

サイトのパフォーマンスチューニング

YSlow for FirebugThirteen Simple Rules for Speeding Up Your Web Site(日本語訳)にて、言及されているものについて一つずつ計測して結果を出してくれる。
これに対応すれば、かなりサイトの高速化が図れると言うシロモノだ。

基本的なポリシーは、

  • クライアント側のキャッシュを活用したり、無駄な HTTP リクエストを減らして、ネットワークボトムを解消しよう
  • ページレンダリングに関連するもの(CSS)は先に読み込ませ、関係ないもの(JavaScript)は後で読み込んで見た目の表示を速くしよう

ってな感じだ。

続きを読む