PEAK XOOPS - あまり知られていない正しいxhldの使い方 in englishin japanese

Archive | RSS |
XOOPS
XOOPS : あまり知られていない正しいxhldの使い方
Poster : GIJOE on 2006-06-26 06:14:24 (38926 reads)

in englishin japanese
「xhldのせいでトップページが重い」
良く聞く言葉ですが、そのほとんどは、xhldの使い方を間違っているだけだと思います。
確かにXoopsHeadlineでは、表示の都度にXMLパースするなんておかしな作りになっているため、取得動作の有無にかかわらず「重い」のですが、xhldはすでに処理済みのデータを取り出すだけなので、基本的には「軽い」部類のモジュールです。

もちろん、サイトアクセスと同時に取得動作があれば、当然重く感じるでしょう。xhldの作りがどうであれ、キャッシュの切れたサイト数ものRSS/Atomを取得するのですから、その分の時間がかかるのは当たり前です。

でも、サイトアクセスが取得動作のトリガーとなる、ということ自体が本来おかしいのです。

実は、xhldにはcacheをアップデートする機能が備わっています。お使いのホスティングサービスが、cronを許可していれば、このようなcrontabを登録してください。(もちろん、ファイルのパスはご自身の環境に合わせて修正してください)


5 * * * * cd /home/yourhome/public_html/modules/xhld0/include;/home/yourhome/public_html/modules/xhld0/include/update_cache.sh >/dev/null 2>&1

この場合、1時間に1回、RSS/Atomを取得に行きます。ここで大事なのは、各フィードの取得時間が1時間を超えるように設定することです。取得時間が長い分にはいくら長くても構いません。update_cache.sh が実行された時点で、強制的に新規にキャッシュを生成します。

この設定がうまくいかない場合は、まずはシェル上で実行してみてください。その時に出たーエラーで対応が別れるでしょう。ありがちなパターンを列挙しておきます。

- パーミッションに実行権限がない ... この場合、700がお勧めです
- /usr/local/bin/php がない ... CLI版またはCGI版PHPのパスを調べて、update_cache.shの1行目を書き換えてください
- Can't use fastestcache というエラーが出る ... fastestcache hackとのバッティングですね。最新版xhldには、それに対応したupdate_cache.shが含まれています
- cronが許可されていない ... 他のサイトからcronで読みに行く、なんて手もあります

RSS/Atom表示機能は確かに便利ですが、そのためにサイト閲覧者にストレスをかけるような真似は避けたいものです。ぜひ一度、cronによる取得をお試しください。

(……って、ドキュメントに書き忘れている私が一番悪いのですが

Printer friendly page Send this story to a friend

Comments list

sarah  Posted on 2007/1/25 11:41 | Last modified
GIJOE さん、レスありがとうございます。

Quote:
GIJOE wrotes:
そのモジュールの作り方次第でしょう。

強制的にキャッシュを作り直す機能を提供していれば、ドキュメントにその旨が書いてありそうです。なければ自分で作るか、誰かにお願いするしかないでしょう。

なるほど。
「強制的にキャッシュを作り直す機能」が備わっていれば、update_cache.sh の修正だけですむと。
なければ、「強制的にキャッシュを作り直す機能」を作る必要がある、ということですね。  ですよね?

勉強がてら、ちょっと探ってみます。
ありがとうございました。
GIJOE  Posted on 2007/1/25 4:34
Quote:

sarah wrotes:
ところで、この update_cache.sh を参考にして、他のRSS取得モジュール(例えばお天気モジュールなど)にも応用することは可能でしょうか?
#モジュールのphpファイルはいじらずにupdate_cache.sh の中だけで実装できるのでしょうか?
そのモジュールの作り方次第でしょう。

cronで定期的に自分自身を読みに行く、なんて手もありますが、キャッシュ更新のタイミングと合わなければ無駄になります。

強制的にキャッシュを作り直す機能を提供していれば、ドキュメントにその旨が書いてありそうです。なければ自分で作るか、誰かにお願いするしかないでしょう。

いずれにせよ、大して難しい話じゃありません。
sarah  Posted on 2007/1/24 10:52
GIJOEさん、お世話になっております。
古いコメントを掘り起こして恐縮なのですが・・・。
仕事が忙しくバタバタしておりましたのと、エラー出力方法を調査・理解するのに時間がかかっておりました。(^^;
ご報告が遅れ、申し訳ありません。

Quote:
GIJOE wrotes:
普通に考えればエラーが出ているんでしょう。

>/dev/null 2>&1 の部分を書き換えて、エラーを出力してみてください。

/dev/null  とはログを出力しないという意味だったんですね。(^^;
というわけで、ログを出力させてみたところ、パーミッションに実行権限がないと怒られていました。
update_cache.sh を700にしてエラーが出なくなりました。
xhldのテーブルの、headline_updated フィールドもcronで設定した時間に更新されているのを確認しました。
無事に動作するようになり、うれしいです。
サイトの表示もかなり速くなりました。すばらしい機能をありがとうございました。

ところで、この update_cache.sh を参考にして、他のRSS取得モジュール(例えばお天気モジュールなど)にも応用することは可能でしょうか?
#モジュールのphpファイルはいじらずにupdate_cache.sh の中だけで実装できるのでしょうか?

当方のスキルとしては、Javascriptが多少読み書きできる程度ですが、もしも応用が可能であるようなら挑戦してみたいと思っています。
GIJOE  Posted on 2006/9/5 6:38
コマンドラインが使用できない環境でのcronなんて悪夢みたいなものですが

普通に考えればエラーが出ているんでしょう。

>/dev/null 2>&1 の部分を書き換えて、エラーを出力してみてください。
sarah  Posted on 2006/9/2 21:32 | Last modified
GIJOEさん、返答ありがとうございます。

xhldのテーブルのheadline_updated フィールドを確認してみましたが、cronで設定した時間には取得できていませんでした。
変わらずサイトアクセスが取得動作のトリガーとなっているようです。

コマンドラインは使用出来ないのでuserminでの設定なのですが、cron設定後「今すぐ実行」を行っても特にエラーは出ていないようです。
cron設定についてはmysqlのバックアップを設定して実行されることを確認済みなので、設定方法などは間違えていないかと思っています。

PHPのパスも環境に合わせて書き換えましたし、fastestcache hackは使っていません。

他に考えられる原因はありますでしょうか?

サーバ環境
SERVER : Apache2.0
PHP : 4.3.9
MySQL : 4.1.20
XOOPS : XOOPS 2.0.13a JP
GIJOE  Posted on 2006/8/30 4:40
キャッシュはDBに保存されています。
xhldのテーブルの、headline_updated フィールドを見て、cronで設定した時間に取得出来ていれば、正常に動作していると判断できるでしょう。
sarah  Posted on 2006/8/29 16:19 | Last modified
最近私の使用しているサーバでもcronが許可されていることがわかり、こちらの設定を行ってみましたが、設定がうまくいっているのかどうかがよくわかりません。
cronによる取得がうまくいっているかどうかを確認するにはどこを確認すればわかるのでしょうか?
生成されたキャッシュはcacheフォルダに格納されるのでしょうか?(それらしいファイルは見当たりませんでしたが・・・。)
Bie  Posted on 2006/7/17 11:26
GIJOEさんにご回答いただいて感激です。
基本的なことでお手を煩わせて済みませんでした。
今後ともよろしくお願い申しあげます。
GIJOE  Posted on 2006/7/12 17:56
おそらくcronとはどういうものかご存じないだけなんでしょうね。

参考サイト:
http://x68000.q-e-d.net/~68user/unix/pickup?keyword=crontab&target=command&partial=on&...

どのファイルをHackするわけでもないですよ。
サイト上にすでに存在しているファイルを、定期的に実行するだけです。
Bie  Posted on 2006/7/12 11:08
これです!!
素晴らしいモジュールを提供してくださって感謝しております。でも、取得するRSS/ATOMの量が多すぎて、表示に時間がかかり悩んでおりました。早速このcrontabの技を使いたい・・・のですが、知識が足りません。
cronが許可されているサーバを使うとして、この記述はどのファイルのどこに挿入(登録)すればよいのでしょうか。./modules/xhld/index.phpかなと考えたのですが、どこに入れればよいかあいにくと検討がつきません。

それから、FCH(最速キャッシュハック)も、このようなxhldの表示速度の改善に有効であるように考えますが、いかがでしょうか。

お忙しいところ恐縮ですが、どうぞよろしくご教示くださいませ。
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!