Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Скрипт вывода товаров, очень долго грузится (foreach).
Проблема в том, что страница с товарами открывается ну очень долго, раньше просто на этой же самой странице делал запрос и выводил все через while по скорости было ощутимо быстрее. Подскажите что я делаю не так и почему так медленно работает скрипт ?
kotyara1979
Отправлено: 19 Ноября, 2014 - 02:19:24
Частый гость
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
1. потому что два цикла вместо одного.
2. уходит больше памяти. всю выборку после первого цикла ты хранишь в оперативке.
Лучше сделать вывод непосредственно из базы первым циклом. Если пытаешься отрезать html-код от php, то определи шаблон вывода в нужном файле и передай его в функцию (printf, например, используй).
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
спасибо за совет)))))а то я в html лепил кучу php
Мелкий
Отправлено: 20 Ноября, 2014 - 09:31:10
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
kotyara1979, Никогда так не делайте! (Добавление) RageXL, у вас изначальный код правильный. Осталось выкинуть result_to_array за ненадобностью, mysqli уже давно реализует итератор и выкинуть к чертям все глобальные переменные (благо синглтон можно реализовать и функцией, раз они вам так милы).
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
Мелкий пишет:
Никогда так не делайте!
Если не затруднит, хоть чуток расшифруйте, почему.
----- Сделать можно все. Главное одеть каску.
Мелкий
Отправлено: 20 Ноября, 2014 - 12:08:45
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Прибитая гвоздями глобальная переменная, я не знаю, что тут вообще можно комментировать. И опять же гвоздями прибитая модель (получение данных) к вьюхе (сколько именно, какие и в каком именно порядке выводить результаты).
----- PostgreSQL DBA
esterio
Отправлено: 20 Ноября, 2014 - 12:27:46
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
kotyara1979
Пожалуйста не давайте плохих советов. Потом будут вопросы как поменять тайтл на странице, отослать редирект (после вывода) и т.д.
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
Мелкий пишет:
Прибитая гвоздями глобальная переменная, я не знаю, что тут вообще можно комментировать. И опять же гвоздями прибитая модель (получение данных) к вьюхе (сколько именно, какие и в каком именно порядке выводить результаты).
Извините, вопрос, наверное, глупый, но, где вы увидели глобальную переменную "прибитую гвоздями"? Прибитая к чему?
1. шаблон вывода в блоке, отвечающем за эту часть.
2. функция для вывода отдельно от html. хоть подключаемый по условию файл, например. да мало ли вариантов.
В чем затык для работы? Спрашиваю не из праздного любопытства, подобные варианты кода, не совсем в таком виде, но приходилось использовать в проектах. всегда предпочитаю знать о возможных проблемах в работе. заранее спасибо за ответ.
(Добавление)
esterio пишет:
Потом будут вопросы как поменять тайтл на странице, отослать редирект (после вывода) и т.д.
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
kotyara1979
это связано с скорее вашим сообщениям нежели с топиком. такое советовать плохой тон
Мелкий
Отправлено: 20 Ноября, 2014 - 16:19:59
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
kotyara1979 пишет:
$pattern = '<TR><TD>%1$s</TD><TD>%2$s</TD></TR>';
kotyara1979 пишет:
global $mysqli,$pattern;
Вот глобальная переменная. Гвоздями прибиты эта переменная к этой функции.
Просто и очевидно - зачем это вообще сделано глобальной переменной, а не банальным параметром?
Читайте "Совершенный код" Макконнелла, затем "Рефакторинг" Фаулера. Надеюсь, ещё не поздно вправить руки - то, что надо вообще говорить о вреде глобальных переменных - говорит очень о многом и весьма негативно.
kotyara1979 пишет:
функция для вывода отдельно от html.
Не отдельно.
Сколько именно, какие и в каком порядке выводить поля строки таблицы - жёстко задано в функции.
Банальное - надо продуктам с полем sale=1 поставить css-класс sale. Ваши действия? Переносить логику отображения в эту функцию?
----- PostgreSQL DBA
kotyara1979
Отправлено: 20 Ноября, 2014 - 17:10:05
Частый гость
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
Мелкий пишет:
Читайте "Совершенный код" Макконнелла, затем "Рефакторинг" Фаулера.
За такие советы всегда спасибо. Включу в план.
Мелкий пишет:
Вот глобальная переменная. Гвоздями прибиты эта переменная к этой функции.
Все собственно зависит от удобства и назначения функции или класса. Если нужно с этой функцией работать с разными соединениями - это одно дело. Если это "локальная" функция - специально заточенная под определенную ситуацию, предназначенная для конкретной вещи - например, инкапсулировать часть кода для читаемости логики модуля - то это другое дело.
Мелкий пишет:
Банальное - надо продуктам с полем sale=1 поставить css-класс sale. Ваши действия? Переносить логику отображения в эту функцию?
Повторюсь, зависит от задачи, от условий на момент реализации проекта. Функция ориентирована на конкретный вывод в разных местах - включу туда, если раскладка такова, что функция ориентирована только на получение данных одной таблицы из разных блоков с разным форматированием - разметку буду варьировать на месте вызова.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.