Merge pull request #12 from wildlyinaccurate/experimental-result-caching
[Experimental] enable internal caching of responsive_image tag results
This commit is contained in:
commit
b117107385
|
@ -7,6 +7,7 @@ require 'rmagick'
|
||||||
require 'jekyll/responsive_image/version'
|
require 'jekyll/responsive_image/version'
|
||||||
require 'jekyll/responsive_image/defaults'
|
require 'jekyll/responsive_image/defaults'
|
||||||
require 'jekyll/responsive_image/utils'
|
require 'jekyll/responsive_image/utils'
|
||||||
|
require 'jekyll/responsive_image/render_cache'
|
||||||
require 'jekyll/responsive_image/image_processor'
|
require 'jekyll/responsive_image/image_processor'
|
||||||
require 'jekyll/responsive_image/resize_handler'
|
require 'jekyll/responsive_image/resize_handler'
|
||||||
require 'jekyll/responsive_image/common'
|
require 'jekyll/responsive_image/common'
|
||||||
|
|
|
@ -4,10 +4,15 @@ module Jekyll
|
||||||
include Jekyll::ResponsiveImage::Common
|
include Jekyll::ResponsiveImage::Common
|
||||||
|
|
||||||
def render(context)
|
def render(context)
|
||||||
|
attributes = YAML.load(super)
|
||||||
|
|
||||||
|
cache_key = attributes.to_s
|
||||||
|
result = attributes['cache'] ? RenderCache.get(cache_key) : nil
|
||||||
|
|
||||||
|
if result.nil?
|
||||||
site = context.registers[:site]
|
site = context.registers[:site]
|
||||||
config = make_config(site)
|
config = make_config(site)
|
||||||
|
|
||||||
attributes = YAML.load(super)
|
|
||||||
image_template = attributes['template'] || config['template']
|
image_template = attributes['template'] || config['template']
|
||||||
|
|
||||||
image = ImageProcessor.process(attributes['path'], config)
|
image = ImageProcessor.process(attributes['path'], config)
|
||||||
|
@ -17,7 +22,12 @@ module Jekyll
|
||||||
partial = File.read(image_template)
|
partial = File.read(image_template)
|
||||||
template = Liquid::Template.parse(partial)
|
template = Liquid::Template.parse(partial)
|
||||||
|
|
||||||
template.render!(attributes.merge(site.site_payload))
|
result = template.render!(attributes.merge(site.site_payload))
|
||||||
|
|
||||||
|
RenderCache.set(cache_key, result)
|
||||||
|
end
|
||||||
|
|
||||||
|
result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
module Jekyll
|
||||||
|
class ResponsiveImage
|
||||||
|
class RenderCache
|
||||||
|
attr_accessor :store
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def store
|
||||||
|
@store ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get(key)
|
||||||
|
store[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
def set(key, val)
|
||||||
|
store[key] = val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -15,6 +15,10 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(context)
|
def render(context)
|
||||||
|
cache_key = @attributes.to_s
|
||||||
|
result = @attributes['cache'] ? RenderCache.get(cache_key) : nil
|
||||||
|
|
||||||
|
if result.nil?
|
||||||
site = context.registers[:site]
|
site = context.registers[:site]
|
||||||
config = make_config(site)
|
config = make_config(site)
|
||||||
|
|
||||||
|
@ -27,7 +31,12 @@ module Jekyll
|
||||||
partial = File.read(image_template)
|
partial = File.read(image_template)
|
||||||
template = Liquid::Template.parse(partial)
|
template = Liquid::Template.parse(partial)
|
||||||
|
|
||||||
template.render!(@attributes.merge(site.site_payload))
|
result = template.render!(@attributes.merge(site.site_payload))
|
||||||
|
|
||||||
|
RenderCache.set(cache_key, result)
|
||||||
|
end
|
||||||
|
|
||||||
|
result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue