Пишу веб-часть для своего приложения. В ней получаю данные из MSSQL и MySQL баз данных, после чего формирую json строку, которую считывает десктопное приложение. В ходе работы я заметил, что выборка данных из БД от Microsoft составляет 0.0076с (замерял время работы php скрипта), при этом выборка из MySQL занимает 1.0019с. Сам запрос простейший, и если верить phpmyadmin'у выполняется за 0.0003с. После получения данных в while записываю в многомерный массив вида "$posts[$x][$y] = " полученные значения. Неужели такая операция занимает настолько много времени? Для работы с mysql использую mysqli_* функции. Вот код запроса:
SELECT t.thread_id, t.title, t.username, t.post_date
FROM `xf_thread` t
WHERE t.node_id = 2
ORDER BY t.post_date DESC
LIMIT 5
А вот сама функция работы с данными:
$fsql = "";
$furl_link = "";
$configs = include('config.php');
// Выбираем тип форумного движка
switch($configs->forum_setting_engine){
case 'ipb':
$fsql = "
SELECT tid,title,description,last_post,last_poster_id,last_poster_name";
....
}
$Connection = mysqli_connect($configs->forum_db_host, $configs->forum_db_user, $configs->forum_db_pass, $configs->forum_db_name);
$Connection->set_charset('utf8');
$result = mysqli_query($Connection, $fsql);
$x = 0; // счётчик количества строк
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$posts[$x]['thread_id'] = $row['thread_id'];
$posts[$x]['title'] = $row['title'];
$posts[$x]['username'] = $row['username'];
$posts[$x]['date'] = date( "d.m.Y H:i", $row['post_date'] );
$posts[$x]['link'] = $configs->forum_setting_url.build_url_string($row['thread_id'], $row['desc_id'], $furl_link);
$x++;
}
mysqli_free_result($result);
mysqli_close($Connection);
return $posts;
Данная задержка достаточно не приятна, т.к. в интерфейсе программы некоторое время остаются не заполненные поля. Я понимаю что можно кешировать страницу на стороне сервера, но всё же хотелось узнать мнение и советы более компетентных в этой области людей, возможно есть другой способ обработки данных, или необходимо использовать другой драйвер.
p.s. Обе БД установлены на локальной машине.
Проблема оказалась в настройках локального веб-сервера. В open-server при включённом IPv6, соединение с БД mysql как раз занимало около секунды, что и было позднее обнаружено при профилировании. Решилось установкой патча.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Необходимо для определенных элементов инфоблока задать разную верстку :