Оптимизировать

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Оптимизировать

Сообщение trueorfalse »

Как оптимизировать эти строчки кода ?
Переменная $result подсчитывает количество записей, в данном случае он грузит на 2 секунды.

Код: Выделить всё

    				if ($post['sub_category_id'] == $chi['id']) {
    					$result[] = $post;
    				}
Весь код

Код: Выделить всё

<?php
    $result = [];
    foreach ($category as $categ) {
    	echo '<h4>' . $categ['name'] . '</h4>';
    	foreach ($children as $chi) {
    		if ($chi['root'] == $categ['id']) {
    			foreach ($posts as $post) {
    				if ($post['sub_category_id'] == $chi['id']) {
    					$result[] = $post;
    				}
    			}
                ?>
                <a href=<?php echo $chi['title_translite'];?>> <?php echo $chi['name']; ?>(<?php echo count($result); ?>)</a>
                <?php
                $result = array();
    		}
    	}
    }
?>
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Или же отдать дело sql ?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Оптимизировать

Сообщение Dominus »

Как на счет кэширования?
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Dominus писал(а): 2017.08.22, 23:56 Как на счет кэширования?
Нее, это не выход.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Оптимизировать

Сообщение Dominus »

Код: Выделить всё

<?php
    //$result = [];
    foreach ($category as $categ) {
    	echo '<h4>' . $categ['name'] . '</h4>';
    	foreach ($children as $chi) {    		
                 if ($chi['root'] == $categ['id']) {
                       $i = 0;
    			foreach ($posts as $post) {
    				if ($post['sub_category_id'] == $chi['id']) {
    					$i++;
    				}
    			}
                ?>
                <a href=<?php echo $chi['title_translite'];?>> <?php echo $chi['name']; ?>(<?php echo $i; ?>)</a>
                <?php
                //$result = array();
    		}
    	}
    }
?>
Переменная $result если нигде больше не используется, можно заменить просто счетчиком $i++
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Те же 2 секунды.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Оптимизировать

Сообщение Dominus »

trueorfalse писал(а): 2017.08.23, 00:44 Те же 2 секунды.
Продумать иной алгоритм, или кэширование.
У вас $category, $children, $posts, получают все данные, и затем обрабатываются в цикле.
Нужно добиться того, что бы они получали только нужные данные на данный момент, и выводить в цикле сформированную ссылку.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Dominus писал(а): 2017.08.23, 00:56
trueorfalse писал(а): 2017.08.23, 00:44 Те же 2 секунды.
Продумать иной алгоритм, или кэширование.
У вас $category, $children, $posts, получают все данные, и затем обрабатываются в цикле.
Нужно добиться того, что бы они получали только нужные данные на данный момент, и выводить в цикле сформированную ссылку.
Есть представление как должно работать ?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Оптимизировать

Сообщение Dominus »

Ну на вскидку, 3 модели со связями.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Dominus писал(а): 2017.08.23, 01:29 Ну на вскидку, 3 модели со связями.
Может 3 метода ?
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Dominus писал(а): 2017.08.23, 01:29 Ну на вскидку, 3 модели со связями.
Думаю все таки sql запросом решить ее.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Оптимизировать

Сообщение Dominus »

Категории, посты, даже две.
Зависит от задачи.
Можно посмотреть не плохой вариант с nested-set-behavior
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Оптимизировать

Сообщение Nerf »

1) Попробуйте запрос. Вытащите одним запросом: айди_подкатегории + каунт(посты в подкатегории) группе бай айди_подкатегории.
2) Считайте кроном (избавит от лага при невалидном кеше).
3) Считайте в момент добавления\удаления.

Последние 2 варианта - кеш. Но, не зная предметной области и объем данных, форумная оптимизация - это такое...
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Nerf писал(а): 2017.08.23, 01:39 1) Попробуйте запрос. Вытащите одним запросом: айди_подкатегории + каунт(посты в подкатегории) группе бай айди_подкатегории.
2) Считайте кроном (избавит от лага при невалидном кеше).
3) Считайте в момент добавления\удаления.

Последние 2 варианта - кеш. Но, не зная предметной области и объем данных, форумная оптимизация - это такое...
Объем
Категорий 30
Под категорий 600
Записей 10 000
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

Идей нету мужики ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Оптимизировать

Сообщение zelenin »

trueorfalse писал(а): 2017.08.23, 12:00 Идей нету мужики ?
ты все посты из категории перебираешь, чтобы посчитать их кол-во? что ты будешь делать, когда у тебя 10т постов будет?
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

zelenin писал(а): 2017.08.23, 12:40
trueorfalse писал(а): 2017.08.23, 12:00 Идей нету мужики ?
ты все посты из категории перебираешь, чтобы посчитать их кол-во? что ты будешь делать, когда у тебя 10т постов будет?
У меня уже 10 тыс постов
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

zelenin писал(а): 2017.08.23, 12:40
trueorfalse писал(а): 2017.08.23, 12:00 Идей нету мужики ?
ты все посты из категории перебираешь, чтобы посчитать их кол-во? что ты будешь делать, когда у тебя 10т постов будет?
Есть решение ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Оптимизировать

Сообщение zelenin »

trueorfalse писал(а): 2017.08.23, 13:09
zelenin писал(а): 2017.08.23, 12:40
trueorfalse писал(а): 2017.08.23, 12:00 Идей нету мужики ?
ты все посты из категории перебираешь, чтобы посчитать их кол-во? что ты будешь делать, когда у тебя 10т постов будет?
Есть решение ?
не выбирать 10т постов.
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Оптимизировать

Сообщение trueorfalse »

zelenin писал(а): 2017.08.23, 13:35
trueorfalse писал(а): 2017.08.23, 13:09
zelenin писал(а): 2017.08.23, 12:40

ты все посты из категории перебираешь, чтобы посчитать их кол-во? что ты будешь делать, когда у тебя 10т постов будет?
Есть решение ?
не выбирать 10т постов.
А как выбирать ?
Ответить