You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Оптимизация функционирования ODataService путём отсечения излишних загрузок
Функциональные требования
Организовать работу ODataService так, чтобы при получении запроса не производились ненужные вычитки (особенно громоздких мастеров, которые при этом могут ещё и с детейлами прийти, хотя по сути не меняются).
Требования к реализации
Выявлены несколько аспектов, что позволит уменьшить нагрузку в ODataService излишними загрузками:
С фронтенда помимо изменённых атрибутов всегда приходят мастера, даже если они не менялись (данный аспект передан в проект ember-flexberry, чтобы разобраться в причинах такого поведения и его коррекции).
В случае прихода мастера на изменение (то есть поменялся сам первичный ключ, а не мастер) достаточно проверки на существование мастера.
Можно изменить представление по умолчанию, по которому идёт загрузка объекта (отдать на откуп прикладному программисту возможность переопределить представление по умолчанию).
<Подсказки программисту как решить поставленную задачу>
В общем случае, если вдруг мастер меняется, то при смене мастера у её объекта происходит загрузка тяжелющего мастера (а если ещё детейлы, то подгрузка детейлов). Хотя по логике у нас просто ссылка на мастера поменялась (и при этом адекватна проверка на существование такого мастера в принципе).
Вот здесь есть код, отмеченный, что для обратной совместимости, можно что-то подобное сделать:
Вот у нас батчем пришла пачка объектов.
в батче этого мастера отдельно нет, тогда сделать что-то типа lightloaded с проверкой на существование в БД. И в объекте только первичный ключ.
в батче этот мастер есть отдельно. Он либо берётся из кэша, если полноценно загружен. Если он пришёл в кэше lightloaded вариант, то тогда и догружается полноценно.
Особенностью данного решения является то, что в бизнес-сервере будет не вся та информация, которая раньше была там из-за работы ODataService, поэтому после реализации требуется менять мажорную версию.
По поводу смены дефолтного представления: можно подумать как сделать красиво, чтобы можно было переопределить этот метод, или действительно сделать глобальную настройку на уровне какой-нибудь инстанции ODataService при регистрации, чтобы зачитка была не такой жадной.
формирование объекта в целом (именно из этого метода отправляется в рекурсию для загрузки мастера, а потом его детейлов).
Тесты
Нужно сначала разработать тест, где меняется мастер у объекта и как-то зафиксировать, что попало в кэш.
Далее удостовериться, что в кэше после исправления мастер не полностью загружен.
The text was updated successfully, but these errors were encountered:
Предлагаю в методе GetDataObjectByEdmEntity выполнить базовую оптимизацию:
если некоторый метод вызывается в цикле, но может быть вызван единожды перед ним, то надо именно так и сделать
во время итерирования не должен вызываться метод для получения коллекции каждый раз, а итерироваться надо по результату работы этого метода заранее сохранённому в переменную.
Цель
Оптимизация функционирования ODataService путём отсечения излишних загрузок
Функциональные требования
Организовать работу ODataService так, чтобы при получении запроса не производились ненужные вычитки (особенно громоздких мастеров, которые при этом могут ещё и с детейлами прийти, хотя по сути не меняются).
Требования к реализации
Выявлены несколько аспектов, что позволит уменьшить нагрузку в ODataService излишними загрузками:
<Подсказки программисту как решить поставленную задачу>
В общем случае, если вдруг мастер меняется, то при смене мастера у её объекта происходит загрузка тяжелющего мастера (а если ещё детейлы, то подгрузка детейлов). Хотя по логике у нас просто ссылка на мастера поменялась (и при этом адекватна проверка на существование такого мастера в принципе).
Вот здесь есть код, отмеченный, что для обратной совместимости, можно что-то подобное сделать:
Вот у нас батчем пришла пачка объектов.
Особенностью данного решения является то, что в бизнес-сервере будет не вся та информация, которая раньше была там из-за работы ODataService, поэтому после реализации требуется менять мажорную версию.
По поводу смены дефолтного представления: можно подумать как сделать красиво, чтобы можно было переопределить этот метод, или действительно сделать глобальную настройку на уровне какой-нибудь инстанции ODataService при регистрации, чтобы зачитка была не такой жадной.
Исходный код
NewPlatform.Flexberry.ORM.ODataService/NewPlatform.Flexberry.ORM.ODataService/Model/DynamicView.cs
Line 407 in ee49b2b
Тесты
Нужно сначала разработать тест, где меняется мастер у объекта и как-то зафиксировать, что попало в кэш.
Далее удостовериться, что в кэше после исправления мастер не полностью загружен.
The text was updated successfully, but these errors were encountered: