PEAK XOOPS - Re: kernel/module.php のキャッシュが効いてないバグ in englishin japanese

Top  >  Comments  >  News comment ()

Re: kernel/module.php のキャッシュが効いてないバグ

  • As this forum is only for commentation, you cannot open a new topic
  • Guests cannot post into this forum
Target News
Subject kernel/module.php のキャッシュが効いてないバグ
Summary サブメニューの実験をやっていて気づいたのですが、あるモジュールの xoops_version.php が2度も3度も読み込まれてしまいます。xoops_version.phpにロジックが書いてあるモジュールも多いので、二重読込はそのままオーバーヘッドになります。ただ、kernel/module.php を...
Previous post - Next post | Parent - Children.1 .2 | Posted on 2007/3/6 9:45
minahito  二等兵   Posts: 10
のおおおっ orz

普通に考えればパッチしても問題ないはずですが、100%の確証が持てないのが XOOPS2 の恐ろしいところ...;;

preload で xoops_gethandler() が返却するカーネルを差し替えることができる仕様を使用して、テスター向けに preload を配布しましょうか...
(テスター向けということなら差分ファイル配ったほうが早いか)
Votes:4 Average:2.50
Previous post - Next post | Parent - No child | Posted on 2007/3/6 12:39
GIJOE  先任軍曹   Posts: 4110
むしろ今まで動いていた方が不思議なくらいなので、パッチしちゃっても、大丈夫じゃないかとは思いますが、すでにステージがRCなだけに…
Votes:1 Average:10.00
Previous post - Next post | Parent - Children.1 | Posted on 2007/3/6 16:58 | Last modified
domifara  一等兵   Posts: 19
んー、たしかに、staticの使い方がおかしいみたいです
と思ったのですが
Quote:
100%の確証が持てないのが XOOPS2 の恐ろしいところ
鋭い、
どうもphpバージョン違いとかサーバー違いの実動作の検証が必要そうです

というのが、
どこかで聞いたと覚えがあるけどと思い、
過去のトラッカーを探してみました
CVS
http://xoops.cvs.sourceforge.net/xoops/xoops2/kernel/module.php?r1=1.11.2.1&r2=1.11.2.2

たぶん xoops2.0.9からかな?
「モジュールハンドラのキャシュが効いてない」
のクレームに対して、
static を宣言することで直ったかのように書いているのですが?
なぜ、
もともとが
$this->_cachedModule_mid
で維持しようとした

だけど前はキャシュ動作が出来ていないとバグトラッカーに報告がある
phppp (#1044971)さんと、mithyt2 (#989462)さんですね

ソースを見る限り、今見ると原因は謎に思えます

今のphpマニュアルを見ると
&get

&getByDirname

でスコープの違う
static
になるので
それぞれに
&get

&getByDirname
で、別のものを見ていることになるので

(もしかして、前はスコープは?一つだった?)

staticでないと維持できないという実状があるのなら?

staticに維持するところを、別関数一つに
インスタンスの確認とセットをまとめるとか?

でも
たまたま今日そのあたりphpマニュアル見てたら
http://jp.php.net/manual/ja/language.variables.scope .別の問題ですが
phpマニュアルに
「PHP4を駆動するZend Engine 1では
static変数にリファレンスの値は保持できない」
でサーバーの違いも考慮が必要かと
(これは、いつ追加されたのかな?
Zend Engine 1では意図せぬ動きをするらしいと
書いてるから、んーそうなのでしょう)
Votes:2 Average:10.00
Previous post - Next post | Parent - Children.1 | Posted on 2007/3/6 18:16
GIJOE  先任軍曹   Posts: 4110
sourceforge.net でのやりとりは追ってませんが、(不毛そうなので

Quote:

http://jp.php.net/manual/ja/language.variables.scope .別の問題ですが
phpマニュアルに
「PHP4を駆動するZend Engine 1では
static変数にリファレンスの値は保持できない」

これは初めて知りました。(勉強になります!)

ただこのケースは、staticにリファレンスが保持できるかどうかだけの問題じゃなかったりします。

少なくとも、従前のコードでは、

最初のgetObjects()で1個。
次のget()で1個。
最後にgetByDirname()で1個。

と、1つのモジュール(dirname)につき、3個のモジュールオブジェクトが作成されていたのを確認しました。

これは、Zend Engine 1 側の不具合うんぬんというより、純粋にコーディングミスだと思います。ZE2以上でも、同様に3個のオブジェクトが作られるはずです。
Votes:0 Average:0.00
Previous post - Next post | Parent - Children.1 | Posted on 2007/3/28 12:36
minahito  二等兵   Posts: 10
これ、やっちゃうことにしました。
RC がなんだぁ〜(おい

static と global で引っ張った変数には直接リファレンスはとれないのですが、 static $t = array() にして $t['foo'] =& ... は OK みたいです。これは直接リファレンスを収録しているのは array() メモリ空間なので...

なので、ハンドラ自体のキャッシュは(現時点では) xoops_gethandler にまかせて、 static で別々にとっている発行オブジェクトのキャッシュをメンバでとる方向(つまり GIJOE's patch)で大丈夫そうです。

2.1 系から本家へレポートしたほうがいいバグもすごくたくさんあるんですが(途中で把握しきれなくなった orz 都度やっとけばよかった)、これは忘れずレポートしたほうがよさそうですね。まぁでも PEAK は読まれているから大丈夫だと思いますが...
Votes:1 Average:0.00
Previous post - Next post | Parent - No child | Posted on 2007/3/29 3:43
GIJOE  先任軍曹   Posts: 4110
Quote:

minahito wrotes:
これ、やっちゃうことにしました。
RC がなんだぁ〜(おい
判断を尊重いたします〜
とりあえず、多くのサイト(いずれもX2)にパッチを当てましたが、どれも正常に動いているみたいですよ。
Legacy2.1へのパッチも、今を外すと辛そうですから。

Quote:
static と global で引っ張った変数には直接リファレンスはとれないのですが、 static $t = array() にして $t['foo'] =& ... は OK みたいです。これは直接リファレンスを収録しているのは array() メモリ空間なので...
私もこれはちょっと勘違いしていたみたいです。ただ、ローカルなstaticに別々に保存してあるのは確かなので、各モジュールについて、最大3個ずつのインスタンスってことですね。

Quote:
2.1 系から本家へレポートしたほうがいいバグもすごくたくさんあるんですが(途中で把握しきれなくなった orz 都度やっとけばよかった)、これは忘れずレポートしたほうがよさそうですね。まぁでも PEAK は読まれているから大丈夫だと思いますが...

少なくともこの件は、同じオブジェクトじゃないのは「気持ち悪い」というレベルで、最悪でもパフォーマンスだけですから、あまり重要じゃないかもしれませんね。
Votes:0 Average:0.00

  Advanced search


Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!