我们目前正在开发一个锦标赛平台。这个平台确实生成了完全动态的排名,所以我们每次都有不同的分数,不同数量的参与者等。
一场锦标赛可以有多轮。对于每一轮,管理员可以设置参与者的排名。这就是问题所在。我当前的代码:
<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进行更改也不成问题。
发布于 2017-09-29 21:43:45
您应该执行$trnmntCheckedinCount = $tournament->checkedin()->count()并在循环中使用它。现在,每个条目调用一次这些方法(即67次)。我的建议只做了一次,它应该会有一些影响。
您可以检查人员排名是否为每个用户、每个选项的$x (因此,有67个参与者的10个选项意味着670次检查)。你应该在options 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> https://stackoverflow.com/questions/46490038
复制相似问题