Есть ли способ кешировать несколько меню выбора, которые заполняются из базы данных - PullRequest
0 голосов
/ 19 апреля 2011

У меня большая форма с 132 (12x11) меню выбора, которые заполняются из БД (MySQL). Проблема очевидна: загрузка страницы занимает много времени из-за всех этих вызовов базы данных.

Структура формы: в каждой комнате по 12 отдельных секций с 11 выпадающими списками в каждом (здесь ссылка http://tinypic.com/view.php?pic=6tfjpk&s=7).

Из 11 выпадающих списков 8 - это «Описание комнаты». Есть ли способ .... Я мог бы как-то кэшировать эти выпадающие списки, особенно те 8 из раздела 1 (комната 1), а затем просто перезагрузить кэш для всех других разделов (другие 11)? Я попытался сделать массив в функции (которая создает раскрывающийся список из базы данных) с динамическими переменными, назначенными статическими статические $ {$ var_name};

но сам синтаксический анализатор php не позволяет динамическим переменным быть статическими.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Проблема решена!

@ AJ

  1. Первая часть решения заключалась в сохранении массивов из запроса в сеанс (рекомендации AJ).).Это помогло, но не так много (не так много, как я ожидал, сэкономило мне только 0,5 секунды загрузки страницы. Страница загружалась раньше через 4,79 секунды после этой реализации ... через 4,47 секунды.

  2. Эта часть является реальным решением.

в начале моего кода в функция dorpdown У меня был этот код:
$dbh = new PDO(CONFIG_MYSQL_DSN, CONFIG_MYSQL_USERNAME, CONFIG_MYSQL_PASSWORD, array(PDO::ATTR_PERSISTENT => false));

$dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

, что означает, что я создавал новое соединение с БД каждый раз, когда функция вызывалась . Я делал, когда создавал функцию некоторое время назад иПредполагалось, что он будет использоваться только для целей тестирования, потому что на каждой странице у меня есть включаемый файл, который удостоверяется, что я подключен к базе данных. У него есть опция array(PDO::ATTR_PERSISTENT => true.

Итак, чтобыИзбегайте подключения к БД каждый раз, когда вызывается выпадающая функция. Я установил для $ dbh значение global global $dbh; в этом включаемом файле, а также установил global $dbh; в самой функции .загружается ТОЛЬКО 0,6 секунды вместо 4,76, что такое GСОВЕРШЕНСТВОВАНИЕ УЛУЧШЕНИЯ!

0 голосов
/ 19 апреля 2011

Почему бы не сохранить массивы в сеансе ?

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