Closed ashmaroli closed 5 years ago
(to be run on master
branch..)
# frozen_string_literal: true
require "benchmark/ips"
require "bundler/setup"
require "jekyll"
require "jekyll-avatar"
def content(tag_name)
<<~TEXT
{% #{tag_name} hubot %}
{% #{tag_name} hubot size=45 %}
{% #{tag_name} hubot size=80 %}
{% assign user='hubot-brace' %}{% #{tag_name} {{ user }} %}
{% assign user='hubot-var' %}{% #{tag_name} user=user %}
{% #{tag_name} @hubot %}
{% assign users = "a|b|b|c" | split:"|" %}{% for user in users %}
{% #{tag_name} user=user %}
{% endfor %}
TEXT
end
module Jekyll
class AvatarNew < Avatar
def parsed_host
@parsed_host ||= {}
@parsed_host[host] ||= Addressable::URI.parse(host)
end
def url(scale = 1)
uri = parsed_host
uri.path << "/" unless uri.path.end_with?("/")
uri = uri.join path(scale)
uri.to_s
end
end
end
Liquid::Template.register_tag("avatar_new", Jekyll::AvatarNew)
Benchmark.ips do |x|
x.report('avatar') { Liquid::Template.parse(content('avatar')).render! }
x.report('avatar_new') { Liquid::Template.parse(content('avatar_new')).render! }
x.compare!
end
Wiring in memory_profiler
to above yields the following: :tada:
Memory Profiler results for avatar, avatar_new
+------------+---------------+---------------+--------------+--------------+
| Tag Name | Mem Allocated | Obj Allocated | Mem Retained | Obj Retained |
+------------+---------------+---------------+--------------+--------------+
| avatar | 497.58 kB | 5683 objects | 8.91 kB | 124 objects |
| avatar_new | 409.39 kB | 4774 objects | 15.74 kB | 211 objects |
+------------+---------------+---------------+--------------+--------------+
Nice! Thanks again @ashmaroli! :smile:
Closes #35
Notes
#host
since#server_number
could change in the context of a Liquid `{% for %} block..host
value is safer than memoizing to the instance.