Переписана главная функция ядра

Последние две недели были потрачены целиком и полностью на перепись с нуля центральной функции ORM системы - поиск рядов и их потомков. В итоге, удалось добиться прозрачности всех выполняемых операций. На некоторых проектах было замечено существенное снижение количество запросов к БД и потребляемой ОЗУ (с 500 до 100). Время загрузки обычных страниц уменьшилось до 0.1с. Были добавлены новые операторы и устранены некоторые логические неточности. Наконец-то полноценно заработала функция клонирования ряда с подтаблицей. Теперь система адекватно видит и воспринимает клонированные подтаблицы.

До "оптимальной работы" с ресурсами сервера системе ещё далеко, но мы стремимся к исчезновению лишних SQL-запросов и вызовов функций. По прежнему существует проблемма интерпритации шаблонов. Функции интерпритатора могут вызываться по 50 тысяч раз за 1 проход шаблонизатора.

Что было оптимизировано?

В случае получения рядов с функцией "мультивложенность" система для каждой такой строки вызывала функцию поиска рядов. Теперь же, добавлена функция поиск рядов по нескольким владельцам. Таким образом, все поиски под строк были сгруппированы в одну функцию, в один запрос (два, если мы имеем дело не только с подстроками, но и с подтаблицами).

Точно такое же решение было применено для команды ST (сбор рядов всех подтаблиц). Теперь, мы можем получить все товары интернет магазина, во всех его категориях, набрав cat.st.items и это займёт всего-лишь 1 запрос к БД.

Что было добавлено?

Новая команда SC, позволяет делать выборку по определённым полям таблицы. Например, нам нужно получить массив всех имён статей. Для этого используем articles.sc.name.

Это удобно для создания связных списков. К примеру, у вас есть товары вашего магазина, раскиданные по категориям. И вы хотите определить "Лидеров продаж". Для этого создаёте таблицу liders с одним полем item (товар) с ссылкой на товар. Делаете обработчик строки таблицы "Товары", который позволяет прямиком из админки добавить товар в список liders (["item"->cow][addrow cex.liders.id]). Теперь нужно как-то это всё вывести. Раньше приходилось создавать специальный массив, в который нужно было складывать все item's, а теперь вывод возможно осуществить командой liders.sc.item. Таким образом, система выдаст все элементы, хрянящиеся в полях item, таблицы lider.

Автор: E5 Developer

Дата: 15 сентября 2013



Добавить комментарий

Имя

E-mail

Комментарий

Контрольный вопрос:
Сколько будет: 10+4-7


 
Наши работы
Массажные кровати LongLife

Благотворительная организация Преображение

Автомобили из Кореи СК-МОТОРС

Мобильные бани МОБИБА

Европейские ограждения Евростандарт

Портал недвижимости Аренда 911

Сеть саун Кантри

Строительная компания Сибирский Стиль

Автомобили из Кореи СК-МОТОРС

Арбитражный суд НСО

Сервис-кухня Ланч

Ремонт и обслуживание компьютеров ПК-Сервис

Интернет-каталог велосипедов и детской мебели Дами

 

Главная О студии Расценки Портфолио Статьи Контакты