Head Cleaner(仮) を入れてみました

をかもとさん作の WordPress プラグイン、Head Cleaner(仮) を先日から導入してみています。

ブラウザがレンダリングに必要とする CSS ファイルや動作に必要な JS ファイルの多くはHTML の head 要素に集まっていますが、たとえばこれが大量にあるとブラウザは何度もサーバに対して読込みリクエストをだす必要があり、サイトの表示までに時間がかかるようになってきます。(head 読み終わらないと body にいかない)

このような head をうまく修正してブラウザのレンダリングを早くする手法はいくつもあるようなのですが、をかもとさんの Head Cleaner はプログラムに様々な最適化テクニックをつめこんで head などを自動解析し、サイトの表示を速くしてくれるプラグインです。

Head Cleaner (仮) : 独断と偏見の何でもレビュー

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

もちろん効用はサイトが高速に表示されるのもありますが、特に WordPress の場合、プラグインによって head にいろいろ追加されて、改行とかインデントとかも変なことになりがちなので、再パースしてきれいにしてくれるのも嬉しい効果です。

さて、この head 再パースですがこれは当然サーバ側の処理。 当然いくらかは時間がかかります。 サーバパース時間 < ブラウザの読込時間 となれば全体的に高速ということになります。

まぁネットワークとサーバ処理の競争なので、後者のほうが速いであろうことは確かです。

[tegaki]どれくらいかかるんだろう?[/tegaki]

をかもとさんもおっしゃっていました。

WordPress サイトのフロントエンドの処理速度が、結構改善されると思います。ただし、バックエンドに負担をかけますが

おし、調べてみましょう。 🙂

以前書きました、PHP 用の xdebug というデバッグモジュールですが、こいつはプロファイラの機能ももっています。 各処理にかかる時間とかを測定できる機能です。

これで動作ログをはかせて、WinCacheGrind というソフトでよませるときれいにサマって表示してくれるます。 (KDE 用のもあるのですが、ちょっと KDE 調子悪いので Windows にて。。)

profile01

head のパース処理のみしぼりこんでみてみました。

profile02

profile03

小さくて申し訳ない。。 一番右の累積時間をみれば良いと思います。 関数の呼び出し順もあるので単純に合計はできませんが、、、ははは、数ms 単位が並んでいるのが分かります。 ネットワークとは相手にならない速度でこりゃ高速化されるわけです!。 これであれば負荷もほとんど影響しないでしょう。

せっかくなので自分のプラグインも見てみました。 ぼくので一番重量級なのは、jrelated です。 あれは、辞書を全読みしないとだせないのでおもい。(といっても 多くても1000とか2000レコードオーダなのででかいアプリにくらべれば全然ですが)

profile04

上から順にメソッド呼ぶので全体で 66ms + α となると思います。 うちのサイト全体が 0.350ms くらいなので思ったよりおもくないですね!。

次は kougabu。(同期部のみ)

profile05

あら、こんなもんなんだ。(笑)

これは xdebug のプロファイル機能を ON にしている(負荷がかかる)状態なので、実際にはもう少し速くなると思われます。  PHP なかなかやるじゃん、と思った瞬間でした。(ぼくのほうはMySQL かもだけど。。

というわけで脱線してしまいましたが、Head Cleaner いれると体感的にも速くなるのが分かります。 すごいなぁ。 ぼくには絶対つくれない種類のプラグインなので、をかもとさんについていこうとおもいます。 🙂

Ubuntu 9.04 α をアップデート

現在メインで使っている PC は、次期 Ubuntu の 9.04 α がはいっています。 本日アップデートを実施してみたところ、いろいろな不具合がとれてだいぶいい感じになりました。 🙂 α4 相当になるとおもいます。

まず変わったなと思ったのが、notify-send がうわさどおり変わったことです。

ubuntu90 

以前のバルーンによる通知から、このようにフワっとうきあがって消えていく通知方法に変更されています。 これがおしゃれでなかなかよい。 🙂 上は notify-send を使っている twitte.rb からの通知の様子です。

うちの 9.04 は壊れかけの 8.10 からのアップデートインストールなのであまり参考になりませんが、この環境ではいくつか不具合もみつけました。

まずGTK のバージョンの関係か、ATOK の表示がおかしそうです。 以下はツールバーを縦表示にしてみたの図。

ubuntu91

[tegaki]そうきたか![/tegaki]

本来はボックスごと縦になるのですが、ボックス横のまま縦書きに。。(笑 ちなみにスクリーンショットとれなかったのですが、ATOK の変換候補でその単語の”意味”を表示する機能の窓でも同様の不具合がでるようです。

スクリーンショットといえばうちでは、Compiz いれた状態で gnome-screenshot を動かすとおちるようです。 動画キャプチャする gtk-record でも同様でしたので、OpenGL を撮ろうとするとなにか起きるのかもしれません。 nVIDIA のドライバとかうちのカードの関係の可能性もあります。

(追記、以上2点は yutaka さんが試したPCでのクリーンインストールではおきないそうです。ほっ 🙂

ただ、ただ、アップデート前まで、使っている GeForce 8200 では nVIDIA ドライバがうまく動かず、Compiz オンの状態では youtube はコマ落ちするは、VMWare は激重になるはで大変悲しい思いをしていたのですが(しかるに標準ドライバをつかっていた。。)、今回のアップデートで解決されました。 うれし~な~ 🙂

ゴウ Compiz!!

ubuntu92

…ありがとう、端末透過でしょこたんがみえるようになったよ。(←そこか

まじめな話では、 Mono は 2.0、(Sun) Java はアップデート12がはいるようです。

   1: hiromasa@hiromasa-cubex4:~$ mono --version
   2: Mono JIT compiler version 2.0.1 (tarball)
   3: Copyright (C) 2002-2008 Novell,
   4:  Inc and Contributors. www.mono-project.com
   5:     TLS:           __thread
   6:     GC:            Included Boehm (with typed GC)
   7:     SIGSEGV:       altstack
   8:     Notifications: epoll
   9:     Architecture:  x86
  10:     Disabled:      none
  11:  
  12: hiromasa@hiromasa-cubex4:~$ java -version
  13: java version "1.6.0_12"
  14: Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
  15: Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

Mono は 2.2 がでていてこちらは、Python みたいに C# をインタラクティブモードでつかえたり面白いのですが、2.0 でも C# 3.0 相当なので大勢に影響はないとおもれます。

(gjcネイティブ版ではない)Eclipse 3.4 / 3.5 をいれてみたのですが、まえにちらっとかいた、ファイルを開いただけで修正扱いになってしまう、という不具合はなおってないようです。 うーん、PDT 2.0 つかいたいんだけどなぁ、この点だけちょっと残念。 Eclipse 3.3 では問題ないです。

Ubuntu 64bit版でEclipse 3.4.1 – 逆噴射式

ファイルを開くと開いた瞬間問答無用で更新マーク(タブに*マーク)が付く。

閉じようとしたりビルドしようとしたりするとセーブしようとする(そしてヘッダをうっかり保存しちゃってフルビルドの罠)

何か入力してUndoで戻ると更新マークは消える。

変なオプションでもオンになってるのかと思ったけどどうも違うっぽい。

ということでうちだけじゃないようなのですが、どうも原因がいまいちつかめません。 海外は申告されていないようなので日本語特有の問題なのしょうか…。

あと、複数のネットワークカードを有効にしている場合に DHCP がとれないようです。 この場合は dhclient コマンドでとりなおせばいいようです。

   1: $ sudo dhclient -r eth0 && dhclient eth0

なんにせよフィーリング的に 9.04 は良さそうな感じがしてきました。 LST になるので期待しております。 🙂

ようやく wp-kougabu 1.00 リリース

あんまりあたため続けてもいまいちなので、 wp-kougabu を 1.00 として WordPress Plugins/JSeries のほうにリリースしました。 🙂 いくつか直したい部分もあったのですが(特に guid のところ)、まぁ RC にしちゃったし現状動いているからいいかということでそのままにしています。 次のバージョンがあれば修正します。

WordPress Plugins/JSeries » wp-kougabu (画像付きアーカイブ)

また、バージョン 1.00 よりテーマ内などで使える関数が新設されました。 テーマ内の任意の位置で、好みの大きさにリサイズしたランダムイメージなどが実現できます。 値のみを返値する指定もできるのでプログラムから呼びだして利用することもできます。

ということで、 1.00 beta とか RC をお使いの方は(ほとんど変わっていませんが) 上書きしていただければと思います。 0.50 な方は JSeries のほうにかきましたとおり、キャッシュディレクトリが変わっていますのでご注意ください。

1.00 では kougabu_get_image というテーマ内で使える関数で任意の位置に kougabu な画像を表示できるようになりました。 なのでギャラリーが別にいらない方でも遊べるかもしれません。

また、HTML を画面に出力するだけではなく array で値を取得できますので、ちょろっとプログラムかくと、うちの検索結果みたいに抜粋記事の前に画像をだしたりできると思います。

   1: <?php $images = kougabu_get_images(
   2:     array('array' => true, 'post_id' => array(500, 501, 502)
   3:         ,'max_width' => 100, 'max_height' => 100)); ?>

みたいにすると $images に post_id が 501、502、503 の画像リンク URL が配列に取得できます。 形は $images[ポストID][画像連番]、、

kougabu70

・・・です。

この手のプラグインはみなさん使い方の要件がいろいろ違うと思いますので、がんがんいじってお使いください、というたぐいのつくりです。 本題と関係ないめんどくさいところのロジックはだいたいあるとおもいますので、あとはいろいろ修正していただければと思います。 🙂

wp-kougabu はアルバムにぺたぺた写真をはるみたいな感覚が表現できて割とお気に入りのプラグインです。 写真と記事が連携しているのは、写真を撮る、そしてなによりその課程をとても大切にしているかの光画部の意志が働いています。

お楽しみください。

ぼのを「だからサンデーは…」

ひろまさ「すいません、すいません。。」