Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

Конвертнул форум с 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 секунд.

 

В чём может быть проблема с хуком Последние темы?

Какие-то индексы в базе? Но те которые самодиагностируются в ац - одинаковые на обоих сайтах.

Ошибок в логах нет, последние темы выводятся нормально. Только вот с тормозами по полминуты…

Рекомендованные сообщения

Опубликовано:

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

Опубликовано:
  • Автор

Включил 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 вызова по одному циклу.

 

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

Изменено пользователем f2065

Опубликовано:
  • Автор

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

Хук начинает анализировать их всех и отсюда такие тормоза.

 

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

Изменено пользователем f2065

Опубликовано:

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

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.