From ecdbbfd2b08ccac7fbae9233ce3d9ee457d6e6cf Mon Sep 17 00:00:00 2001 From: Joseph Wynn Date: Tue, 2 Feb 2016 20:33:24 +0000 Subject: [PATCH] [Experimental] enable internal caching of responsive_image tag results --- lib/jekyll/responsive_image.rb | 1 + lib/jekyll/responsive_image/render_cache.rb | 21 ++++++++++++++++ lib/jekyll/responsive_image/tag.rb | 27 ++++++++++++++------- 3 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 lib/jekyll/responsive_image/render_cache.rb diff --git a/lib/jekyll/responsive_image.rb b/lib/jekyll/responsive_image.rb index 6d0dcf5..06fd05c 100644 --- a/lib/jekyll/responsive_image.rb +++ b/lib/jekyll/responsive_image.rb @@ -7,6 +7,7 @@ require 'rmagick' require 'jekyll/responsive_image/version' require 'jekyll/responsive_image/defaults' require 'jekyll/responsive_image/utils' +require 'jekyll/responsive_image/render_cache' require 'jekyll/responsive_image/image_processor' require 'jekyll/responsive_image/resize_handler' require 'jekyll/responsive_image/common' diff --git a/lib/jekyll/responsive_image/render_cache.rb b/lib/jekyll/responsive_image/render_cache.rb new file mode 100644 index 0000000..6de1768 --- /dev/null +++ b/lib/jekyll/responsive_image/render_cache.rb @@ -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 diff --git a/lib/jekyll/responsive_image/tag.rb b/lib/jekyll/responsive_image/tag.rb index 714dc60..f601aca 100644 --- a/lib/jekyll/responsive_image/tag.rb +++ b/lib/jekyll/responsive_image/tag.rb @@ -15,19 +15,28 @@ module Jekyll end def render(context) - site = context.registers[:site] - config = make_config(site) + cache_key = @attributes.to_s + result = @attributes['cache'] ? RenderCache.get(cache_key) : nil - image = ImageProcessor.process(@attributes['path'], config) - @attributes['original'] = image[:original] - @attributes['resized'] = image[:resized] + if result.nil? + site = context.registers[:site] + config = make_config(site) - image_template = @attributes['template'] || config['template'] + image = ImageProcessor.process(@attributes['path'], config) + @attributes['original'] = image[:original] + @attributes['resized'] = image[:resized] - partial = File.read(image_template) - template = Liquid::Template.parse(partial) + image_template = @attributes['template'] || config['template'] - template.render!(@attributes.merge(site.site_payload)) + partial = File.read(image_template) + template = Liquid::Template.parse(partial) + + result = template.render!(@attributes.merge(site.site_payload)) + + RenderCache.set(cache_key, result) + end + + result end end end