2017-09-29 14 views
0

現在、トーナメントプラットフォームで作業しています。このプラットフォームは完全に動的なランキングを生成するので、我々は異なるポイント、参加者の異なる量などを毎回持っています。PHPはランキングのためにループを高速化します

トーナメントは複数のラウンドを持つことができます。各ラウンドについて、管理者は参加者のランキングを設定できます。そして、これが問題のあるところです。私の現在のコード:

私の最後のケースでは、私は67人の参加者があった:

<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement"> 
@for($x=0;$x<$tournament->checkedin()->count()+1;$x++) 
    <option value="{{ $x }}" @if($participant->getRanking($i)->ranking_value == $x) selected="selected" @endif>{{ $x }}</option> 
@endfor 
</select> 

しかし、私は今、読み込み時間を持つ巨大な問題を持っています。参加者ごとに、67の選択オプションをすべて追加しました。しかし、それはまた明らかに起こらないべきランキングの67倍をチェックした。これにより、バックエンドのローディング時間が約30秒に増加します。これは巨大です。私がそれらを削除したら、それは2に戻りました。

それで、私が代わりにしたいのは、すべてのオプションを一度作成し、自動的に選択したボックスを変更することです。あなたは私がこれを達成する方法を知っていますか?変更するためにJSに切り替えることも問題ありません。

+0

あなたはxdebugのをインストールし、アプリケーションのプロファイリングを試みることができます。時間が費やされた場所を見てください。それがスピードを上げるのに役立ちます。 –

+0

私は速度を改善する必要がある場所を確認しましたが、これはこの特定の部分です。私は、67だけ必要としながら、私はそれらのランキングのために何千ものリクエスト(67x67)を要求するという問題があります。 – Astinox

+0

これは根本的な質問なので、私は答えをロールバックしました。答えは理にかなっていないので、答えに合わせてそれを書き留めるべきではありません。この方法で、誰かが前/後を見ることができ、それから学ぶ – Martijn

答えて

7

$trnmntCheckedinCount = $tournament->checkedin()->count()を実行して、それをループで使用する必要があります。今では、これらのメソッドをエントリごとに1回(つまり67回)コールします。私の提案は一度やりますが、それはいくつか重要です。

ユーザーごとに、オプションごとに$xの人物がいるかどうかをチェックします(したがって、オプションが67人の場合は10個のオプションが670個のチェックを意味します)。あなたはオプションforの前にユーザーのランクをチェックして、変数をチェックするだけです。これは多くの問題ではなければならない:)


私laravelはほとんど存在しないが、このような何か:

@php 
// Place this out of the loop which loops through your users 
$tournementCount = $tournament->checkedin()->count(); 
@endphp 

<select name="round_{{ $i }}_placements[{{ $participant->id }}]" class="form-control scoreboard-placement"> 
    @php 
     $participantRanking = $participant->getRanking($i)->ranking_value; 
    @endphp 

    @for($x=0; $x<$tournementCount+1; $x++) 
     <option value="{{ $x }}" @if($participantRanking == $x) selected @endif>{{ $x }}</option> 
    @endfor 
</select> 
+0

ちょっとMartijn!これが助けになりました。負荷をほぼ65%削減しました。私はポストでそれを編集しました。しかし、約4kリクエスト(さらに多くの参加者があればさらに多くのもの)を作成するランキング問題はまだ存在しています。 – Astinox

+1

編集した後は明らかでした。本当にありがとう。時には、あなたが頭の前に2時間座っていれば、最も簡単なことが頭の中から外れていることがあります。それが私の問題でした!本当にありがとう、多くの時間を節約しました。 – Astinox

+1

Merci @Classified – Martijn

関連する問題