Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony Twig中的优化引导进度条_Symfony_Twig - Fatal编程技术网

Symfony Twig中的优化引导进度条

Symfony Twig中的优化引导进度条,symfony,twig,Symfony,Twig,我对视图优化有问题。我需要每分钟读取机器是否正在运行,并且需要使用引导进度条显示它。 下面是代码: {% for current in machine.Currency %} {% if date(current.Date) >= date(date1) and date(current.Date) <= date(date2) and date(current.Hour) >= date(hour1) and date(current.Hour)<= date(ho

我对视图优化有问题。我需要每分钟读取机器是否正在运行,并且需要使用引导进度条显示它。 下面是代码:

{% for current in machine.Currency %}
  {% if date(current.Date) >= date(date1) and date(current.Date) <= date(date2) and date(current.Hour) >= date(hour1) and date(current.Hour)<= date(hour2) %}

    {% if current.Value < machine.Settings.workValue  %}
         <div data-machine='{{machine.Id}}' {%if current.Comment%} comment-header='{{current.Comment.Header}}' comment-body="{{current.Comment.Comment}}"{%endif %}  group-hier={{i}} data-value='{{current.Value}}' measure-date='{{current.Date}}' measure-hour='{{current.Hour}}' class="stopMachine progress-bar progress-bar-striped progress-bar-animated bg-warning bar" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" ></div>
    {% set i = i + 1 %}    
  {% else %}
    {% set i = 0 %}            
         <div class="progress-bar progress-bar-striped progress-bar-animated bg-success bar" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" ></div><hr />            
     {% endif %}
   {% endif %}
{% endfor %}
{%用于机器中的当前货币%}

{%if date(current.date)>=date(date1)和date(current.date)=date(hour1)和date(current.Hour)关键是我们不想做20k个小div,我们需要有可能为每个警告条写注释,例如:

让我们以10个按时间和日期排序的条目为例。最重要的信息是度量值,因为它指定了bar元素的类(success,warning)。

1:值:10,日期:2018-10-10,小时:14:00,机器:1
2:值:10,日期:2018-10-10,小时:14:01,机器:1
3:值:10,日期:2018-10-10,小时:14:02,机器:1
4:值:15,日期:2018-10-10,小时:14:03,机器:1
5:值:15,日期:2018-10-10,小时:14:04,机器:1
6:值:15,日期:2018-10-10,小时:14:05,机器:1
7:值:15,日期:2018-10-10,小时:14:06,机器:1
8:值:10,日期:2018-10-10,小时:14:07,机器:1
9:值:10,日期:2018-10-10,小时:14:08,机器:1
10:值:10,日期:2018-10-10,小时:14:09,机器:1

让我们把这台机器的工作值设为11。现在它放10个div

3*警报
4*成功
3*警报


我们希望将其设置为3个宽div,而不是10个div(它们使用javascript按属性组层次结构进行分组)

因此,优化此设置的一个可能解决方案是在从数据库获取数据时过滤所需的度量值。换句话说,您的if条件应转换为查询:

{% if date(current.Date) >= date(date1) and date(current.Date) <= date(date2) and date(current.Hour) >= date(hour1) and date(current.Hour)<= date(hour2) %}

这假设货币与机器相关。这样,只会获取所需的货币值。

这只是模板代码。我看不出数据库中的20000条记录来自何处。你是说for loop over Machine.Currency吗?是的。每分钟都有一个货币度量,数据库中只有一条记录例如,如果有measuremet,则创建一个div成功条,如果没有,则创建一个警告barThanks。这有助于理解问题。您还可以解释一下您希望如何优化它吗?for循环中的迭代次数减少?SQL查询减少?页面加载/显示时间过长还是内存消耗过高?我想创建一个进度条。如果有一个停止,创建一个警告条。我希望在站点上加载更少的条目。在这种情况下,我认为最简单的解决方案是将度量值分组。将失败/成功的度量值按顺序保留是否重要?例如,使用3个度量值“成功、失败、成功”进度条应该是
oxo
,如果是success、success、fail,那么它就是
oox
?另外,您可以概述一下基本的表结构和/或实体的外观。视图所需的属性应该足够了。作为旁注,在执行此查询时使用单独的开始/结束日期+小时可能会导致问题。假设您是sear对于上周9点到今天12点的值,通过过滤,它将只返回9-12点之间和时间段内每个数据的值。因此,例如,从昨天12:01到今天9点的测量值将被忽略。对此,您可能应该使用一个日期时间值。
public function findCurrencyValuesByMachineByIdInTimeFrame(
    int $machineId,
    DateTime $startDate,
    DateTime $endDate,
    int $startHour,
    int $endHour
): array {
    $queryBuilder = $this->createQueryBuilder('machine');

    return $queryBuilder
        ->where('currency.machine = :id')
        ->andWhere('currency.Date >= :startDate')
        ->andWhere('currency.Date <= :endDate')
        ->andWhere('currency.Hour >= :startHour')
        ->andWhere('currency.Hour <= :endHour')
        ->setParameters([
            'id' => $machineId,
            'startDate' => $startDate,
            'endDate' => $endDate,
            'startHour' => $startHour,
            'endHour' => $endHour,
        ])
        ->getQuery()
        ->getResult()
    ;
}