Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   BE прожорлив? Теперь я знаю почему! (http://forum.typo3.ru/showthread.php?t=9755)

dmartynenko 18.10.2011 15:37

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 записей, а не все сразу.


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

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