И пусть разработчикам Битрикса будет стыдно...

Вот грызла меня мысль, что иногда изобретение велосипеда оправдано. И, как показала практика - не зря.


Сравним две страницы (выборка из одного инфоблока, в инфоблоке порядка 100 000 записей):

http://127.0.0.1/2008/
сделано на компоненте bitrix:news.list
Время создания страницы: 18.108 сек.
Всего SQL запросов: 41
Время исполнения запросов: 16.7361 сек.

ужос... smile:o

http://127.0.0.1/2008/2/
сделано руками smile:D
Время создания страницы: 0.8206 сек.
Всего SQL запросов: 15
Время исполнения запросов: 0.0292 сек.


Ничо так разница, правда?
Сервер - один и тот же, инфоблок, количество записей - одно и то же, время тестирования - совпадает.
Поклацав по пагинатору, в первом случае я дождался минимального времени генерации страницы 4,5 секунды (время горения запала УЗРГМ, однако...).

Во втором случае максимальное время генерации страницы составило 1.78 секунды.

И в первом, и во втором случае было отсмотрено по 10 страниц, кэш предварительно был очищен.

Итог: в самоделку добавлено кэширование, пагинатор в самоделке доработан напильником и, в настоящее время успешно используется.

Все-таки есть разница между:

Код
SELECT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.NAME as NAME,IF(EXTRACT(HOUR_SECOND
FROM
BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, "%d.%m.%Y %H:%i:%s"), DATE_FORMAT(BE.ACTIVE_FROM, "%d.%m.%Y")) as ACTIVE_FROM,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE, FPS0.*,L.DIR as LANG_DIR,BE.SORT as SORT,BE.CODE as CODE,BE.XML_ID as EXTERNAL_ID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.XML_ID as IBLOCK_EXTERNAL_ID,B.LID as LID
FROM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
INNER JOIN b_iblock_element_prop_s4 FPS0 ON FPS0.IBLOCK_ELEMENT_ID = BE.ID
INNER JOIN ( SELECT DISTINCT B.ID
FROM
b_iblock B
INNER JOIN b_iblock_site BS ON BS.IBLOCK_ID = B.ID
WHERE
((((BS.SITE_ID="s1")))) AND ((((B.ID = "4")))) ) BB ON BB.ID = BE.IBLOCK_ID
WHERE
1=1 AND ( ((((BE.IBLOCK_ID = "4")))) AND ((((BE.ACTIVE="Y")))) AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
ORDER BY
BE.ACTIVE_FROM desc ,BE.SORT asc ,BE.ID desc
LIMIT 40, 20 

и
Код
SELECT COUNT(ID) AS CNT FROM b_iblock_element WHERE IBLOCK_ID="4";

SELECT B.ID, B.ACTIVE_FROM, B.NAME, B.PREVIEW_TEXT, B.CODE, P.PROPERTY_13, P.PROPERTY_14
FROM
b_iblock_element AS B, b_iblock_element_prop_s4 AS P
WHERE
B.IBLOCK_ID ="4" AND B.ID = P.IBLOCK_ELEMENT_ID
ORDER BY
ACTIVE_FROM DESC
LIMIT 120,20 

smile8)




Комментарии

capcha
* - поля, обязательные для заполнения