Очень тормозит гл.страница форума из-за хука последних тем - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

Очень тормозит гл.страница форума из-за хука последних тем

#1 Пользователь не на сайте   f2065 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 16-Ноябрь 16
  • Репутация: 4
  • IPB version:3.4.x
 

Отправлено 22 Апрель 2017 - 20:13

Конвертнул форум с vB 3.8 на IPB 3.4.9 и возникла проблема - главная страница открывается через 20-30 секунд!
8-ядерный Xeon E5-2630 на 100% грузится.
Форум то причём не большой - база 50мб, 2000 топиков, 6000 постов, 1000 юзеров.
Но, разделов на форуме 800… Правда они вложенные на несколько уровней - корневых 30, у 5 из них по десятку подразделов (т.е. на гл.странице только 35 разделов в итоге), в подразделах тоже по несколько подразделов.

Переключил режим производительности - Tools & Settings > Performance Mode, и форум стал летать.
На основании подсказки о затрагиваемых опциях - вычислил что виноваты хуки, а точнее - виноват один только «Последние темы v1.0.0»

Можно конечно «Последние темы» выключить и всё. Но хотелось бы разобраться в сути проблемы.
Вычитал что IPB плохо тянет несколько сотен форумных разделов, но…

Есть другой форум на этом же самом сервере, с базой в 2гб, десятками тысяч пользователей и сотнями тысяч постов. Кол-во форумных разделов около 200. Весь набор IPB-софта такой же. Включил там хук «Последние темы v1.0.0» - и проблем не возникло, вообще даже разницы нет. С секундомером замерял - что без хука что с хуком главная страницу загружается за 2 секунды.

Не верится что вот такая резкая разница от кол-ва разделов может быть: 200 разделов грузится за 2 секунды, а 800 разделов за 30 секунд.

В чём может быть проблема с хуком Последние темы?
Какие-то индексы в базе? Но те которые самодиагностируются в ац - одинаковые на обоих сайтах.
Ошибок в логах нет, последние темы выводятся нормально. Только вот с тормозами по полминуты…
0

#2 Пользователь на сайте   Атаман ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 315
  • Регистрация: 13-Апрель 12
  • Репутация: 362
  • Откуда:no
  • IPB version:1.x
 

Отправлено 22 Апрель 2017 - 20:48

Ссылку на форум
0

#3 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 630
  • Регистрация: 15-Октябрь 11
  • Репутация: 184
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 22 Апрель 2017 - 21:38

Индексы попробуйте включить - http://ipbskins.ru/f...dpost__p__68350
0

#4 Пользователь не на сайте   f2065 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 16-Ноябрь 16
  • Репутация: 4
  • IPB version:3.4.x
 

Отправлено 23 Апрель 2017 - 00:11

Включил IPS_SQL_DEBUG_LOG, но там нет ничего подозрительного, все запросы выполняются менее чем за 0.001с
Хотя наверно запросы от хука не попадают туда.

Отредактировал функцию hooks_recentTopics - понаставил там на каждом шаге запись времени в лог.
И оказалось что тормоза именно там во вложенных циклах, вот в этом месте:

		/* Grab last X data */
		foreach( $this->forum_by_id as $forumID => $forumData )
		{
			if ( ! $forumData['can_view_others'] AND ! $this->_memberData['is_mod'] )
			{
				continue;
			}
			
			if ( $forumData['password'] != '' )
			{
				continue;
			}
			
			if ( ! $this->registry->permissions->check( 'read', $forumData ) )
			{
				continue;
			}
			
			if ( is_array( $bvnp ) AND count( $bvnp ) )
			{
				if ( in_array( $forumID, $bvnp ) )
				{
					continue;
				}
			}

			/* Still here? */
			$_topics = $this->lastXThaw( $forumData['last_x_topic_ids'] );
			
			if ( is_array( $_topics ) )
			{
				foreach( $_topics as $id => $time )
				{
					if( in_array( $time, $timesUsed ) )
					{
						while( in_array( $time, $timesUsed ) )
						{
							$time +=1;
						}
					}
					
					$timesUsed[]       = $time;
					$topicIDs[ $time ] = $id;
				}
			}
		}


foreach( $this->forum_by_id as $forumID => $forumData ) - этот цикл первые 200 форумов пробегает за 1 секунду, а далее начинает постепенно тормозится и к 1000 форумов ползёт по 15 форумов в секунду.
Однако пропорционально растёт цисло циклов в while( in_array( $time, $timesUsed ) ), вначале циклов нет, потом по 2-3, потом десятки, а под конец - более 1000 циклов за раз.

А вообще за весь вывод - $time +=1; срабатывает более 600000 раз…

Есть идеи в чём может быть проблема? Интуитивно подозреваю что-то с датами где-то у постов в базе не то…
$time +=1; - там в цикле перебираются unixtime-даты в районе 2015г, по 10-25 минут с шагом 1сек (вообще как-бы середина форума - есть топики и более старые и современные).

Проверил лог этой функции на большом форуме - там однако while( in_array( $time, $timesUsed ) ) не крутится практически, только 2 вызова по одному циклу.

Просмотреть сообщениеDmitriy427 22 Апрель 2017 - 21:38 сказал(а):

Индексы попробуйте включить
Да их никто и не выключал… Выкл/вкл - ничего в итоге не изменилось.

Сообщение изменено: f2065 (23 Апрель 2017 - 00:14)

0

#5 Пользователь не на сайте   f2065 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 16-Ноябрь 16
  • Репутация: 4
  • IPB version:3.4.x
 

Отправлено 23 Апрель 2017 - 18:07

Вобщем нашёл причину - тысяча топиков была сделана или перенесена ещё откуда-то, и у них одинаковое время.
Хук начинает анализировать их всех и отсюда такие тормоза.

Т.е. если роботы или люди в один момент создадут много топиков - то форум будет парализован из-за проблем в логике этого хука.

Сообщение изменено: f2065 (23 Апрель 2017 - 18:08)

2

#6 Пользователь не на сайте   Strategius ответил: »

 
 
  • Advanced
  • ***
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 731
  • Регистрация: 27-Март 16
  • Репутация: 47
  • IPB version:3.4.x
 

Отправлено 24 Апрель 2017 - 17:59

Есть хук получше, называется (SOS34) Topics Stats on Board Index Sidebar.
0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2017 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна