使用解析器缓存缓存表达式

编辑本页

使用解析器缓存缓存表达式

ExpressionLanguage组件已经提供了一个编译()方法,以便能够在纯PHP中缓存表达式。但是在内部,组件还缓存解析过的表达式,因此可以更快地编译/求值重复的表达式。

工作流

这两个evaluate ()而且编译()需要做一些事情才能提供各自的返回值。为evaluate (),这个开销更大。

这两种方法都需要对表达式进行标记化和解析。这是由parse ()方法。它返回一个ParsedExpression.现在,编译()方法只返回此对象的字符串转换。的evaluate ()方法需要遍历“节点”(保存在ParsedExpression),并对他们进行评估。

为了节省时间ExpressionLanguage缓存ParsedExpression因此,它可以跳过带有重复表达式的标记化和解析步骤。缓存是由PSR-6完成的CacheItemPoolInterface实例(默认情况下,它使用ArrayAdapter).你可以通过创建一个自定义缓存池或使用一个可用的缓存池并使用构造函数注入缓存池来自定义缓存池:

1 2 3 4 5
使用欧宝娱乐app下载地址组件缓存适配器RedisAdapter使用欧宝娱乐app下载地址组件ExpressionLanguageExpressionLanguage缓存RedisAdapter(…);expressionLanguageExpressionLanguage (缓存);

另请参阅

看到缓存组件欧宝体育电话有关可用缓存适配器的更多信息的文档。

使用解析表达式和序列化表达式

这两个evaluate ()而且编译()可以处理ParsedExpression而且SerializedParsedExpression

1 2 3 4 5 6
/ /……// parse()方法返回一个ParsedExpression表达式expressionLanguage->解析(“1 + 4”[]);var_dump (expressionLanguage->评估(表达式));//打印5个
1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址组件ExpressionLanguageSerializedParsedExpression/ /……表达式SerializedParsedExpression (“1 + 4”序列化(expressionLanguage->解析(“1 + 4”[])->getNodes ()));var_dump (expressionLanguage->评估(表达式));//打印5个
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.4支持通过私人Packagist