Блог разработчиков XS2
Функции постраничного вывода
13.03 '2008 15:07arsenicum
arsenicum, xs2v, API, постраничный вывод, XS2v1
Еще три года назад, при разработке первой версии XS2, у нас возникли споры по поводу включения функция постраничного вывода в XS2 API. Речь идет о функциях xs2CountPages, xs2GetPage, xs2HasNextPage, xs2HasPrevPage, предназначенных исключительно для организации "листалок" на страницах сайтов. Тогда было принято решение включить эти функции в API, поскольку, казалось, они могли бы использоваться не только для листалок, но и просто для работы с диапазонами узлов в выборке. Однако дальнейший опыт разработки показал, что включение их в API было ошибочным. Они использовались только для листалок, а это частное применение, которое хорошо бы было реализовать просто в виде модуля на подобие модулей "Многоязычность" или "AJAX".
Вторая проблема этих функций состоит в том, что для их работы требуется выборка всех узлов. Это означает, что для вывода одной страницы, на которой показываются только 10 товаров из 1000, нужно выбрать всю 1000. Конечно, есть пути оптимизации: например, можно делать выборку только идентификаторов, а затем, когда произведена вырезка диапазона, выбрать полностью все поля только для узлов данного диапазона. Но все равно... некошерно, [ой, вырвалося].
Во второй версии мы решили сделать эти функции нерекомендуемыми для использования, и перенести их в общий модуль "Постраничный вывод". Кроме того, во второй версии в функции выборок решено добавить помимо параметра limit еще и параметр offset, задающий начальную позицию диапазона выборки. В паре эти два параметра позволяют не выбирать всю тысячу узлов для вывода 10 из них.
Для вывода "листалок" нужно знать, сколько узлов всего в выборке. Сейчас эту задачу можно решить только путем тупого подсчета количества возвращенных узлов с помощью функции count. Это, конечно, полное [ой, вырвалося] и нарушение "благостной гармонии" (©Ху Цзин Тао, 2007). Для оптимального посчета количества узлов в выборке во второй версии появится функция xs2CountNodes, которая будет возвращать количество узлов, удовлетворяющих условию, заданном в ее параметере condition.
yaseek / 14.03 '2008 21:48.56
...[ся], а сколько труда потребовало[ся] на то, чтобы реализовать эту возможность в прослойке для Oracle - если уважаемые господа-разработчеги продолжат пользоваться этими "уродами[ся]" - я повешуСЯ! :)
yaseek / 14.03 '2008 21:49.45
зыж: прикольно эт ты с матюками обошел[ся]! :)
Коментарий
|