人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで処理速度アップを考えています。

今は switch foreach if が入れ子状態で、
4階層くらいまで入れ子になってます。

foreach($a as $b){

で始まり、このループを「1周」するだけなら
なんとかなるのですが、
「3周」ほどすると、えらい時間がかかってしまいます。

いろいろ工夫してみてますが、
あまり劇的な進化ができなくて頭打ちになってしまいました。

処理速度をアップさせる方法で、
幅広くアドバイスを頂けるとうれしいです。

phpで外部ファイルを読み込み、処理し、出力しています。mysql等は使っていません。
関数や設定ファイルは別ファイルを読み込んでいます。

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:AS MySQL PHP switch アドバイス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● studioes
●35ポイント

チューニングは実際のコード次第になりますが・・・

良くやるのはコードが冗長になっても、制御構造を減らすと言う方法ですね。 これは、共通部分の前後で同じ条件でifする場合に、1回のifにして共通部分も両方書いてしま等です。

for($i=0; $i<count($a); $i++)の様な処理を、for($i=count($a);$i>0; $i--)にする等も効果があったりしますね。 関数を読ぶとコストが増えるので、同じ結果を取るべき物は、一度変数に入れてしまってそれを使い回すわけです。

演算処理で求める値について、演算コストが高ければ、ある程度演算結果表を定義しておいて、そこから読み込むという方法等もあります。

また、出力処理はコストが高いので、内部で何度もecho等を使っている場合には、$out .= strの様にして、変数に連結していって、最後にecho($out)等とするのも効果がある場合があります。

◎質問者からの返答

どうもありがとうございます。

制御構造を減らす、ですね。

コードの可視性とスマートさ・後で見たときのわかりやすさメインにしていました・・・。

細分化して関数も無意味なものまであるのが微妙な原因ですね。

早速全ての項目についてチェックしてみますね。

どうもありがとうございます!


2 ●
●35ポイント

どこで時間がかかってるのか測定してみてはいかがでしょう。

PEARのBenchmarkを使って、こまめに分割して計測してみれば、どの処理に時間がかかっているのか分かる可能性があります。

[参考]

その後、リファクタリングです。

◎質問者からの返答

どうもありがとうございます。

これは便利ですね。

早速使ってみたところ、時間のかかっているところが見えてきました。

PEARはホント便利ですね・・・。

使ってみると、ベンチマーク計るのが楽しくなってきました。

リファクタリングのサイトも参考に、改善してみます。

どうもありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ