今は switch foreach if が入れ子状態で、
4階層くらいまで入れ子になってます。
foreach($a as $b){
で始まり、このループを「1周」するだけなら
なんとかなるのですが、
「3周」ほどすると、えらい時間がかかってしまいます。
いろいろ工夫してみてますが、
あまり劇的な進化ができなくて頭打ちになってしまいました。
処理速度をアップさせる方法で、
幅広くアドバイスを頂けるとうれしいです。
phpで外部ファイルを読み込み、処理し、出力しています。mysql等は使っていません。
関数や設定ファイルは別ファイルを読み込んでいます。
チューニングは実際のコード次第になりますが・・・
良くやるのはコードが冗長になっても、制御構造を減らすと言う方法ですね。 これは、共通部分の前後で同じ条件でifする場合に、1回のifにして共通部分も両方書いてしま等です。
for($i=0; $i<count($a); $i++)の様な処理を、for($i=count($a);$i>0; $i--)にする等も効果があったりしますね。 関数を読ぶとコストが増えるので、同じ結果を取るべき物は、一度変数に入れてしまってそれを使い回すわけです。
演算処理で求める値について、演算コストが高ければ、ある程度演算結果表を定義しておいて、そこから読み込むという方法等もあります。
また、出力処理はコストが高いので、内部で何度もecho等を使っている場合には、$out .= strの様にして、変数に連結していって、最後にecho($out)等とするのも効果がある場合があります。
どこで時間がかかってるのか測定してみてはいかがでしょう。
PEARのBenchmarkを使って、こまめに分割して計測してみれば、どの処理に時間がかかっているのか分かる可能性があります。
[参考]
その後、リファクタリングです。
どうもありがとうございます。
これは便利ですね。
早速使ってみたところ、時間のかかっているところが見えてきました。
PEARはホント便利ですね・・・。
使ってみると、ベンチマーク計るのが楽しくなってきました。
リファクタリングのサイトも参考に、改善してみます。
どうもありがとうございます!
どうもありがとうございます。
制御構造を減らす、ですね。
コードの可視性とスマートさ・後で見たときのわかりやすさメインにしていました・・・。
細分化して関数も無意味なものまであるのが微妙な原因ですね。
早速全ての項目についてチェックしてみますね。
どうもありがとうございます!