Прогресс-индикатор оптимизации загрузки в Symfony Twig - PullRequest
0 голосов
/ 10 октября 2018

У меня проблема с оптимизацией просмотра.Мне нужно каждую минуту читать с машины, работает она или нет, и мне нужно показывать ее, используя индикатор загрузки при загрузке.Теперь код:

{% 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 %}

В настоящее время загружается 20 000 записей в базе данных.Есть ли способ оптимизировать это представление?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Итак, одним из возможных решений для оптимизации этого является фильтрация требуемых измерений при извлечении данных из базы данных.Другими словами, ваше условие 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) %}

заменяется чем-то вроде этого внутри вашего CurrencyRepository:

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()
    ;
}

Это предполагает, что Валюта относитсявернуться к машине.Таким образом будут выбраны только необходимые значения валюты.

0 голосов
/ 10 октября 2018

Дело в том, что мы не хотим делать 20 тыс. Маленьких делений, и у нас должна быть возможность написать комментарий для каждой панели предупреждений, например:

Давайте возьмем 10, упорядоченных по времени и датеentreis.Наиболее важной информацией является значение меры, поскольку она определяет класс элемента bar (успех, предупреждение).1: значение: 10, дата: 2018-10-10, час: 14:00, машина: 12: значение: 10, дата: 2018-10-10, час: 14:01, машина: 13: значение: 10, дата: 2018-10-10, час: 14:02, машина: 14: значение: 15, дата: 2018-10-10, час: 14:03, машина: 15: значение: 15, дата: 2018-10-10, час: 14:04, машина: 16: значение: 15, дата: 2018-10-10, час: 14:05, машина: 17: значение: 15, дата: 2018-10-10, час: 14:06, машина: 18: значение: 10, дата: 2018-10-10, час: 14:07, машина: 19: значение: 10, дата: 2018-10-10, час: 14:08, машина: 110: значение: 10, дата: 2018-10-10, час: 14:09, машина: 1

Давайте установим значение workValue для этой машины равным 11. Теперь он помещает 10 делений

* 1006.* 3 * предупреждение4 * успех3 * alert

и мы хотим, чтобы они составляли 3 широких деления вместо 10 делений (они сгруппированы с использованием javascript по атрибуту group-иерархии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...