2010年09月12日(日)デンターシステマ

ガリ勉でもダメ。心技体。文武両道とは良く言った物で。脳味噌と身体はリンクしている。そう言う事を書きたい今日この頃。日記?あぁ、「ネタなら」多数ありますが。
ありますが最近のとまむさんはサイトを構築しているPHPの書き換えを行っておりましてその分日記を書く時間がありませんでした。見た目ではなく中身の書き換え。

「高速化」「変数の命名ルールをある程度統率」「アクセス解析をCGIからPHP化する事に伴う新規書き起こし&新しい解析方法の実現の為の手直し」

大体そんな所ですか。そのおかげで体感速度上ではとまむさんのサイトが表示されるスピードが速くなった訳なんで。これ以上の高速化はサーバー移転とか
そっち方面での別ベクトルで実行するぐらいしか思いつきませんみたいな所での展開なんで。これ以上を求めるとするならばそもそもPHPを使わないでHTMLで書いて
ファイルをFTP経由でアップすると言う「ホームページビルダー的な作り方」で実行するしかないんで。それだと更新が外から出来ないだとか色々と問題なんで。

結局の所新規に書き起こしたアクセス解析のスクリプトも当初2000バイト未満だった訳だが今や3500バイト程度と言う事で。CGIで解析していた時代には
「解析スクリプト」「各種設定スクリプト」だとか諸々を含めて100KB程度はあったと記憶してるんで。それと比較すれば相当なダイエットが結果的には実現されましたと。

その他にはとまむさんの日記にあるカレンダーも高速表示と言う事で。カレンダーを表示する為に展開しているループの出力内容が「while、checkdate(for)、while」
と言う事になっていて「forが間に入る分若干遅いと感じている」と言うのが俺なんで。この順番を「while、checkdate(while)、while」に変更した。これで高速化。

「forを全く使わないで書いたPHPスクリプトでのカレンダー表示」っと言うスクリプトが世の中には無かった。俺の探した範囲では。大体世の中に出回っている物は
「checkdateを掛けながらforで回す」みたいな内容でスピード優先みたいな物が無い。まぁそう言う書き方が普通だもんな。俺マイノリティなんで。またコンフリクトか。

普通はcheckdateを掛けながら「forで」回す。俺はマイノリティなんで「whileで」回す。高速表示の為にforではなくwhileを使いたいんでwhileで行けるカレンダーを作る。
それだけ。ファイルバイト数は8736バイトが8817バイトと81バイト増えたものの高速表示が実現されると言うのは気持ちがいいですなとか言う展開を実現したんで。

丁寧に段落とか開けてスクリプト書いたら増えて当たり前なんで。キツキツに書くと言うよりも空間を広げて書きましょうね。って言う様な概念も同時進行してるんで。
その分も含めればこれぐらい増えて当たり前。checkdateをforで使ったカレンダーと日付の表示を比較して「内容は同じだな」と確認もした。数年先の内容までは
いちいち比較しておりませんがとりあえず1年先まではチェックを掛けて表示が同じ事を確認したんで。これでforでループを掛けている箇所が消えました。

現状は9割whileで1割foreach。forのスピードを1とすると今使ってるサーバー上では「while:0.125」「foreach:0.2」ぐらいの感覚なんで。マイクロ秒単位ですけど。

但しループする回数が増えれば増える程foreachは遅くなる。「forとforeachの速度が逆転するのが大体ループ出力数200前後」と言う実験結果を出したんで。
それよりも少ない回数であればforeachの方が一応は高速。そんなにループもしないけど。ループ出力数200前後と言う事は簡単に説明すると
「0と言う数字をループで1ずつ増やしていく」として「0、1、2、3、(中略)、198、199、200」と出ていく訳ですが。大体そこら辺でforとforeachが逆転すると。

でも普通そんなに大量には出力しないんで。数字をループで1ずつ増やしていく?それを「スクリプトの中で実用的に使って行けるシチュエーション」が思いつかない。
「1位2位3位4位(中略)198位199位200位」とかそう言う事?普通その手の順位表示なら「1位から20位」ぐらいで止めておくだろ?人間工学的に考えて。

「PHPのサンプルスクリプトを書いている奴は教科書をサルベージした様な内容に留まっていてそれを実用する際に使えるか使えないかと言う側では判断してない」

と言う内容に注目するのがとまむさんみたいなマイノリティの感覚なんで。本当にとまむさんって日常的からコンフリクトだらけなんですね。まぁそれが俺だから。
そう言う訳で「そんな出力したって意味ねぇだろ」みたい展開はしないんで。基本的にはwhileが最も高速でループの中身を出力する事が可能だから。

コードが汚くなるのと無限ループに陥りやすい文章構造なのが弱点なんで。結局は「PHPのループ出力に関しては状況に応じて使い分けましょう」そう言う結論なんで。

2010年09月12日(日)21時43分26秒