mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-19 19:00:39 -07:00
adding caching to context variable lookup
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "lru_redux"
|
||||||
|
|
||||||
module Liquid
|
module Liquid
|
||||||
# Context keeps the variable stack and resolves variables, as well as keywords
|
# Context keeps the variable stack and resolves variables, as well as keywords
|
||||||
#
|
#
|
||||||
@@ -39,6 +41,7 @@ module Liquid
|
|||||||
@filters = []
|
@filters = []
|
||||||
@global_filter = nil
|
@global_filter = nil
|
||||||
@disabled_tags = {}
|
@disabled_tags = {}
|
||||||
|
@expression_cache = LruRedux::ThreadSafeCache.new(1000)
|
||||||
|
|
||||||
# Instead of constructing new StringScanner objects for each Expression parse,
|
# Instead of constructing new StringScanner objects for each Expression parse,
|
||||||
# we recycle the same one.
|
# we recycle the same one.
|
||||||
@@ -180,7 +183,7 @@ module Liquid
|
|||||||
# Example:
|
# Example:
|
||||||
# products == empty #=> products.empty?
|
# products == empty #=> products.empty?
|
||||||
def [](expression)
|
def [](expression)
|
||||||
evaluate(Expression.parse(expression, @string_scanner))
|
evaluate(Expression.parse(expression, @string_scanner, @expression_cache))
|
||||||
end
|
end
|
||||||
|
|
||||||
def key?(key)
|
def key?(key)
|
||||||
|
|||||||
Reference in New Issue
Block a user