Вопрос:

SpEL - производительность parseExpression

java spring spring-el

840 просмотра

2 ответа

503 Репутация автора

Как часть моего проекта, я внедряю механизм правил на основе SpELи стараюсь сделать его максимально эффективным. По сути, движок состоит из постоянных условий в SpELсинтаксисе. Когда необходимо оценить ввод, я запрашиваю в БД соответствующие правила - SpELвыражения, которые выполняются на EvaluationContextвходных объектах.

Я уже использую Ehcache в приложении, поэтому я хотел также использовать кеши в этом сервисе. EvaluationContextо кешировании не может быть и речи, поскольку входные данные различны для каждого запроса. Кэширование запросов к БД также не так просто, потому что определенная дата является частью запроса - разные правила действуют в разное время.

Я думал о кешировании анализируемых Expressionобъектов, но я не представляю, как дорого анализировать и Expressionиз которого компенсируется Stringли сэкономленное время, избегая Expressionсинтаксического анализа, необходимость запрашивать кеш через Spring.

Кто-нибудь знает, эффективно ли использовать кэш для хранения проанализированных Expressionобъектов?

большое спасибо

Автор: Tomas Kralik Источник Размещён: 07.01.2018 05:07

Ответы (2)


1 плюс

90752 Репутация автора

Вероятно, это зависит от сложности выражений, но я ожидаю, что кэш будет полезен во всех, кроме, может быть, самых простых выражений.

Почему бы тебе просто не провести несколько тестов?

РЕДАКТИРОВАТЬ

EvaluationContext о кешировании не может быть и речи, поскольку входные данные различны для каждого запроса.

Как правило, вы можете повторно использовать контекст оценки; просто передайте корневой объект в выражение вместе с контекстом getValue()вместо того, чтобы хранить его в контексте.

Object getValue(EvaluationContext context, Object rootObject) throws EvaluationException;

Единственное исключение - если вам нужны разные #variablesоценки для каждой оценки.

Автор: Gary Russell Размещён: 07.01.2018 07:21

1 плюс

691 Репутация автора

Вы можете использовать компиляцию SpEL для дальнейшей оптимизации.

Посмотрите на компиляцию SpEL и часть «Конфигурация компилятора» в официальной документации SpEL: https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-spel-compilation

Автор: MNZ Размещён: 16.09.2018 09:42
Вопросы из категории :
32x32