PHP加速for循环排名

时间:2017-09-29 13:38:54

标签: php laravel

我们目前正在开发一个锦标赛平台。这个平台确实产生了完全动态的排名,因此我们每次都有不同的积分,不同数量的参与者等。

锦标赛可以有多轮。对于每一轮,管理员可以为参与者设置排名。这就是问题所在。我目前的代码:

<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个选择选项。但它也检查了67次排名,这显然不会发生。这将我们后端的加载时间增加到将近30秒,这是巨大的。当我删除它们时,它又回到了2。

所以我想要的是:创建所有选项一次并自动更改所选框。你们知道我怎么能做到这一点吗?切换到JS进行更改也没有问题。

1 个答案:

答案 0 :(得分:7)

你应该$trnmntCheckedinCount = $tournament->checkedin()->count()并在循环中使用它。现在每个条目调用一次这些方法(所以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>