hiromasa.zone : o)

2006/10/20 Friday 投稿時の月齢:27.6  月名:二十八日月  潮汐:中潮 Moon:27.6[二十八日月]今日の心技体 : 好調期低調期好調前不安定期

wp-mosquito (lightweight archive plugin for WordPress) リリース! このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 曇時々雨(13/10) ひろまさ @ 1:51

高速かつ低機能(!!)な WordPress 用、エントリ・アーカイブ表示プラグインをリリースしました。

WordPress Plugins/JSeries > wp-mosquito

非常に軽量ですが非常に低機能なエントリ・アーカイブ表示プラグインです。

多くのアーカイブ系プラグインはエントリ表示のため大量の SQL を発行します。 レンタルサーバ上エントリ数の多いブログで運用を行うと、これが負荷となりサーバに強制切断されたり表示に時間がかかる場合があります。 もしそのような理由でアーカイブの表示が出来ない場合は、このプラグインを試してみてください。

このプラグインは極力クエリを発行せず、またなるべくメモリを使ってアーカイブ出力を処理するため、特にエントリの多いブログでは低負荷、高速に表示を行うことが出来ます。

逆に言うと、負荷で困っていない方にはただただ低機能なアーカイブプラグインです。 😛

出力形式は、年/月ごとのサマリーのみとなっています。

必要はコーディングの母…。 というわけで、あるところに同じ悩みをもつ男が2人がいました。

aka さんとひろまさ。

aka さんは、出力時の2500超の SQL がロリポおじさんの顔を曇らせ、ひろまさは MySQL に接続をたたきおとされていました。

エントリ・アーカイブ表示ができない。 orz

yutaka さんにも「壊れているよぉ」とご指摘をうけてから、数ヶ月。 ついに立ち上がるときがきました。 軽量なアーカイブ表示をつくったる。

原因はおおよそ分かっていました。 多くのプラグイン、そして標準のテンプレートタグでアーカイブを作成しようとすると、必ずエントリ名からのリンク作成のため、 WordPress のコアに存在する、get_permalink 関数を呼び出します。

コードを見ている方はご存じだと思いますが、この関数はパーマリンクを含むエントリへのリンクを返す関数で、 必ずその作成に必要な情報を DB に SELECT しにいきます。 これが何を意味するかというと、アーカイブなどの多くのエントリを表示しようとすると、たとえば 300 エントリあれば 300 個 SQL をなげてしまうのです。 また、パーマリンクの構成によってはそれよりも数倍の SQL をなげることもあります。

近代プログラミング(?) 的にはこれで全然かまわなくって、へんに hackish なコードを書くべきではないと思います。 ただ、ね。 アーカイブの表示にはちょっとそぐわないのです。 必要な情報さえあればパーマリンクは作成できますので、この変が改良点になります。

というわけで、Tiny な get_permalink を作って不要な SQL を削減。 また、メモリ上になるべく情報をもってループで SQL を投げないように注意しています。 ただ、PHP のメモリリミット(多くのサーバでは 8M Limit)もありますので、この辺が悩ましいところ。 1年分くらいのエントリなら、どこのブログでも大丈夫だろうということで、1年分づつループ処理しています。

というわけで、yutaka さん動きましたヨ!(←動作図) うちのサイトだとサイト全体で、30 クエリ前後で動くようです。

コード自体はわずかな時間で作ったもので、もともとが hackish な考えなのでいまいちきれいじゃないですが、、他にもそんなひとがいたら、とおもい置いてみます。(バクってたら教えてください)

エントリ増えたらアーカイブ表示ができなくなった!! なんてときはこのエントリのこと思い出してください。 🙂

9 Comments

Trackback

  1. From: TSJ付゛録゛II - 2006/10/20 Friday Nighttime (Trackback)

    【WordPress ME】軽量版ブログ・アーカイヴ表示プラ…

     またまたひろまさ氏が凄いWordPressプラグインを世に送り出してくださいました。
    ●wp-mosquito @ WordPress Plugins/JSeries (more…)

  2. From: 2006 » October » 20 « :: plasticdreams :: - 2006/10/20 Friday Nighttime (Pingback)

    […] こんなやり取りでできたのが WP-Mosquito( wp-mosquito (lightweight archive plugin for WordPress) リリース!) […]

  3. From: 思考の端末で - 2007/1/8 Monday Daytime (Trackback)

    wp-mosquitoのリンク切れを直した…

    WordPressのインストール位置を変えると、wp-mosquitoはリンクURIを間違えてしまう様子。一行だけ更新して、正しいリンクURIになるようにした。… (more…)

Comment

  1. From: yutaka - 2006/10/20 Friday Morning (Comment)

    おお縲怩キげぇや縲怐@原因を元から断つということですか!
    確かhiromasaさんのところにエントリーがあったなぁと思っても、探すのが大変でした。プラグインやエントリーが増えるといろいろ問題が出てくるんですねぇ(うちは当分心配ないが):oops:

  2. From: ひろまさ - 2006/10/22 Sunday Nighttime (Comment)

    yutaka さん、しばらくご迷惑おかけしておりました。。 😳

    共有レンタルサーバはメモリと DB リソースのせめぎあいですね。 海外は結構あまりんですかね。 豪快なプラグインが多い気がします。(笑)

  3. From: ぼの - 2006/10/29 Sunday Nighttime (Comment)

    ひろまささん、こんにちは。(^-^)
    いろいろテクニックがあるんですねー。今は「動けばオッケー」みたいなことばかりやっているけれど、ちゃんとこういう配慮が出来るようになりたいなあと思いました。
    「Tiny な get_permalink」、ほすぃです。。。(*’-‘*)

  4. From: ひろまさ - 2006/10/30 Monday Nighttime (Comment)

    ぼのさん、こんばんわ。 :grin: 返信おくれてごめんなさい。

    このプラグイン、パーマリンクの条件によって動かない人もいるので完全じゃないんですよね。。 まぁまぁこれこそ、「動けばオッケー」(笑

    Tiny な get_permalink はこのプラグインからぱくっていただければと思います。 :mrgreen:

  5. From: tenpura - 2006/11/5 Sunday Nighttime (Comment)

    こんばんは、ひろまささん。初めて書き込みさせて頂きます。
    えー、get_permalink() というか get_post() は、$GLOBALS[‘post’] もしくは $post_cache[$post] が正しく設定されるようにきっちりLoopを組んでやれば SELECT しに行かないはずです。
    Google Sitemap Generator の場合は、get_permalink($post->ID) を get_permalink($post) に、 $postRes=$wpdb->get_results() で SELECT するカラム名を * (もしくは必要なもの)に変えてやれば良いかと思われます。ほとんどテストしてないので何か問題があるかもしれませんが、とりあえず概要説明ということで…:twisted:

  6. From: ひろまさ - 2006/11/5 Sunday Nighttime (Comment)

    tenpura さん、こんばんは。 初めまして。 🙂

    どうもありがとうございます!!。 非常に参考になりました。
    なるほど項目キャッシュしているんですね。 get_post() もうちょっと読んでみます。

    なにかありましたらばしばし指摘お願いいたします。 コード読める方がいると心強いです。 今後ともよろしくお願いいたします。


このサイトはコンテンツをフリーズしました。トラックバック・コメントは閉じられています。

新しいサイトは、

hiromasa.another :o)

です。 :-)

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

31 queries. 0.086 seconds.

このページの先頭へ