Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 18.10.2011, 15:37   #1
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию BE прожорлив? Теперь я знаю почему!

Возникла проблема с BE TYPO3 4.1.хх (да-да, приходится использовать еще и таких старичков). При просмотре в режиме List страницы с пользователями перестала открываться страница - вместо обычного табличного представления просто пустая страница. И никаких ошибок которые могли бы намекнуть на проблему.

В результате отладки кода class.db_list_extra.inc нашлась интересная функция makeRef() которая вызывает такой код:
Код:
			// Look up the path:
		$rows = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
			'*',
			'sys_refindex',
			'ref_table='.$GLOBALS['TYPO3_DB']->fullQuoteStr($table,'sys_refindex').
				' AND ref_uid='.intval($uid).
				' AND deleted=0'
		);
То есть загружаются все записи для пользователя из sys_refindex. Для первого пользователя из списка fe_users она загружала 3500 записей. На втором (более активном) память заканчивалась и выполнение скрипта аварийно обрывалось (лимит памяти стоит 512 MB !).

Так много записей накопилось благодаря эксту loginusertrack. Причем удаление экста не помогло, так как записи sys_refindex остались и после его удаления.

А самое интересное, что функция makeRef() по сути объединяет список получаемых записей в одну строку и возвращает только лишь первые 100 (!!!) символов получившейся строки:
Код:
return count($infoData) ? '<a href="#" onclick="'.htmlspecialchars('top.launchView(\''.$table.'\', \''.$uid.'\'); return false;').'" title="'.htmlspecialchars(t3lib_div::fixed_lgd(implode(' / ',$infoData),100)).'">'.count($infoData).'</a>' : '';
PS: Работа над оптимизацией BE ведется, и эта функция deprecated since 4.4, will be removed in TYPO3 4.6 - Use createReferenceHtml() instead. А вот createReferenceHtml() делает то же самое что и makeRef(), но загружает только первые 20 записей, а не все сразу.

Последний раз редактировалось dmartynenko; 18.10.2011 в 15:49
dmartynenko вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему дистрибутив TYPO3 весит 9 Mb vlnik FAQ (Часто задаваемые вопросы) 4 05.11.2006 17:51
почему четверка так обезображивает дефолтовую почтовую форму GORTOP FAQ (Часто задаваемые вопросы) 2 06.05.2006 01:28
Почему так много профессиональных сайтов именно на TYPO3? OM Общие вопросы 2 06.02.2006 17:17


Часовой пояс GMT +4, время: 10:43.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория