PHPのセッション機能は遅いので使わない件について(PHP at Yahoo!を読む)
いしなお!さんのトコから。
「PHPのセッション機能は遅いので使わない」の詳細が知りたい。もちろんセッションハンドラをかますよりも、Cookieのみで処理した方が速いだろうけど、制約も大きそう。それともその辺も独自のエクステンションで解決していたりするんだろうか? PHPコードでエンコード&デコードしてたらクソ遅そうだもんな。
PHPが標準で提供しているセッション拡張モジュールは内部的にserialize / unserializeで処理しているので、それなのかな?と思ってみたり(参考文献)。
自分もPHPのセッション機能は使っていない派ですね(独自のセッション管理)。色々理由があるけど、主にセキュリティと運用面(遅いのが理由ではない)。
運用面は自分の都合なんだけど、そんなにクソ遅くもないので今に至っています。
コンテナはFILEとDB(MySQL・PostgreSQL・Oracle)のどちらかを選択できるようにしていて、複数サーバで負荷分散環境を考慮してNFS領域に置いても大丈夫(セッションIDがバッティングせずに一意を保つ)なようにセッションIDの生成に一工夫いれています。その分、セッションIDが少し長くなるのが難点だけど。
「パラメーターのプロパティ渡し」でプログラムを読みやすくする、というアイデアはどうだろうを読んでみて
この辺(1・2・3・4・5)を読んでみて思った事。
要は呼び出し側で引数が多いと呪文のように見えるので何とかしたいねぇ、という風に解釈しました。
しもさんを初め色んな方が案を出していますが、これで事足りるのではないだろうか。。。超適当なんですが、要は分かりやすければ良い訳なので。
% cat ./tako1.php <?php final class Fish { public function __construct( $speed, $direction, $x, $y, $minDistance, $maxInfluence ) { echo "spped is ". $speed ."\n"; echo "direction is ". $direction."\n"; echo "x is ". $x."\n"; echo "y is ". $y."\n"; echo "minDistance is ". $minDistance."\n"; echo "maxInfluence is ". $maxInfluence."\n"; echo "---------------------------------------------\n\n"; } } $fish = new Fish( $speed = 2, $direction = 180, $x = 20, $y = 20, $minDistance = 16, $maxInfluence = 40 ); echo "spped is ". $speed ."\n"; echo "direction is ". $direction."\n"; echo "x is ". $x."\n"; echo "y is ". $y."\n"; echo "minDistance is ". $minDistance."\n"; echo "maxInfluence is ". $maxInfluence."\n"; echo "---------------------------------------------\n"; ?> 結果 ---- spped is 2 direction is 180 x is 20 y is 20 minDistance is 16 maxInfluence is 40 --------------------------------------------- spped is 2 direction is 180 x is 20 y is 20 minDistance is 16 maxInfluence is 40 ---------------------------------------------
変数汚染が非常にダサい。低レベルで失礼しました。<(_ _)>
ただ、変数名が適当になると(どのみち)一緒なんじゃないのかなぁ。。。と思ってみたり。
cat ./tako2.php <?php final class Fish { public function __construct( $no1, $no2, $no3, $no4, $no5, $no6 ) { echo "no1 is ". $no1 ."\n"; echo "no2 is ". $no2 ."\n"; echo "no3 is ". $no3 ."\n"; echo "no4 is ". $no4 ."\n"; echo "no5 is ". $no5 ."\n"; echo "no6 is ". $no6 ."\n"; } } $fish = new Fish( $no1 = 2, $no2 = 180, $no3 = 20, $no4 = 20, $no5 = 16, $no6 = 40 ); ?> 結果 ---- no1 is 2 no2 is 180 no3 is 20 no4 is 20 no5 is 16 no6 is 40
変数名は超重要、という事で。
個人的には渡すパラメータが多い場合は連想配列にして渡しています。
そろそろPHPにも引数の数が一致していない場合はワーニングを出すようにして欲しい今日この頃。