使用解析器缓存缓存表达式
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
使用解析器缓存缓存表达式
ExpressionLanguage组件已经提供了编译()方法能够在纯PHP缓存表达式。但在内部,组件还缓存解析表达式,所以复制表达式可以被编译/评估更快。
工作流
这两个evaluate ()和编译()
前需要做的一些事情可以提供返回值。为evaluate ()
,这个开销更大。
这两种方法都需要标记和解析表达式。这是做的parse ()方法。它返回一个ParsedExpression。现在,编译()
方法只是返回该对象的字符串转换。的evaluate ()
方法需要遍历表达式的“节点”(部分保存在ParsedExpression
)和评估他们。
为了节省时间,ExpressionLanguage
缓存ParsedExpression
所以它可以跳过的标记和解析步骤重复表达。由一个缓存ParserCacheInterface实例(在默认情况下,它使用一个ArrayParserCache)。你可以通过创建一个定制的定制ParserCache
使用构造函数注入的对象:
1 2 3 4 5
使用ob娱乐下载\组件\ExpressionLanguage\ExpressionLanguage;使用Acme\ExpressionLanguage\ParserCache\MyDatabaseParserCache;美元databaseParserCache=新MyDatabaseParserCache (…);美元expressionLanguage=新ExpressionLanguage (美元databaseParserCache);
请注意
的DoctrineBridge提供了一个解析器使用的缓存实现教义缓存库各种各样的缓存,缓存策略,如Apc、文件系统和Memcached。
使用解析和序列化的表达式
这两个evaluate ()
和编译()
可以处理ParsedExpression
和SerializedParsedExpression
:
1 2 3 4 5 6
/ /……/ /解析()方法返回一个ParsedExpression美元表达式=美元expressionLanguage- >解析(“1 + 4”,数组());var_dump (美元expressionLanguage- >评估(美元表达式));/ /打印5
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\ExpressionLanguage\SerializedParsedExpression;/ /……美元表达式=新SerializedParsedExpression (“1 + 4”序列化(美元expressionLanguage- >解析(“1 + 4”,数组())- >getNodes ()));var_dump (美元expressionLanguage- >评估(美元表达式));/ /打印5
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。