Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memoize resource URLs for major performance gain #915

Merged
merged 2 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 56 additions & 51 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -60,48 +60,53 @@ PATH
GEM
remote: https://rubygems.org/
specs:
activesupport (7.1.3.2)
activesupport (7.2.1)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
amazing_print (1.6.0)
ansi (1.5.0)
ast (2.4.2)
backport (1.2.0)
base64 (0.2.0)
benchmark (0.3.0)
benchmark-ips (2.13.0)
bigdecimal (3.1.7)
builder (3.2.4)
concurrent-ruby (1.2.3)
bigdecimal (3.1.8)
builder (3.3.0)
concurrent-ruby (1.3.4)
connection_pool (2.4.1)
csv (3.3.0)
diff-lcs (1.5.1)
docile (1.4.0)
docile (1.4.1)
drb (2.2.1)
dry-inflector (1.0.0)
dry-inflector (1.1.0)
e2mmap (0.1.0)
erubi (1.12.0)
faraday (2.9.0)
faraday-net_http (>= 2.0, < 3.2)
erubi (1.13.0)
faraday (2.11.0)
faraday-net_http (>= 2.0, < 3.4)
logger
faraday-follow_redirects (0.3.0)
faraday (>= 1, < 3)
faraday-net_http (3.1.0)
faraday-net_http (3.3.0)
net-http
ffi (1.16.3)
ffi (1.17.0)
ffi (1.17.0-arm64-darwin)
ffi (1.17.0-x86_64-darwin)
ffi (1.17.0-x86_64-linux-gnu)
hash_with_dot_access (2.1.1)
i18n (1.14.4)
i18n (1.14.5)
concurrent-ruby (~> 1.0)
inclusive (1.0.0)
jaro_winkler (1.5.6)
jaro_winkler (1.6.0)
json (2.7.2)
kramdown (2.4.0)
rexml
Expand All @@ -112,38 +117,38 @@ GEM
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
memory_profiler (1.0.1)
mini_portile2 (2.8.6)
minitest (5.22.3)
logger (1.6.1)
memory_profiler (1.0.2)
mini_portile2 (2.8.7)
minitest (5.25.1)
minitest-profile (0.0.2)
minitest-reporters (1.6.1)
minitest-reporters (1.7.1)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
mutex_m (0.2.0)
net-http (0.4.1)
uri
nokogiri (1.16.4)
nokogiri (1.16.7)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.16.4-arm64-darwin)
nokogiri (1.16.7-arm64-darwin)
racc (~> 1.4)
nokogiri (1.16.4-x86_64-darwin)
nokogiri (1.16.7-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.16.4-x86_64-linux)
nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
nokolexbor (0.5.4)
nokolexbor (0.5.4-arm64-darwin)
nokolexbor (0.5.4-x86_64-darwin)
nokolexbor (0.5.4-x86_64-linux)
parallel (1.24.0)
parser (3.3.0.5)
parallel (1.26.3)
parser (3.3.5.0)
ast (~> 2.4.1)
racc
public_suffix (5.0.5)
racc (1.7.3)
rack (3.0.10)
public_suffix (6.0.1)
racc (1.8.1)
rack (3.1.7)
rack-test (2.1.0)
rack (>= 1.3)
rackup (2.1.0)
Expand All @@ -152,41 +157,41 @@ GEM
rainbow (3.1.1)
rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
rb-inotify (0.11.1)
ffi (~> 1.0)
rbs (2.8.4)
regexp_parser (2.9.0)
regexp_parser (2.9.2)
reverse_markdown (2.1.1)
nokogiri
rexml (3.2.6)
roda (3.79.0)
rexml (3.3.7)
roda (3.83.0)
rack
rouge (4.2.1)
rspec-mocks (3.13.0)
rouge (4.3.0)
rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-support (3.13.1)
rubocop (1.63.2)
rubocop (1.66.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.31.1, < 2.0)
regexp_parser (>= 2.4, < 3.0)
rubocop-ast (>= 1.32.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.31.2)
parser (>= 3.3.0.4)
rubocop-ast (1.32.3)
parser (>= 3.3.1.0)
rubocop-bridgetown (0.5.0)
rubocop (~> 1.23)
rubocop-performance (~> 1.12)
rubocop-performance (1.21.0)
rubocop-performance (1.21.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
ruby-progressbar (1.13.0)
serbea (2.1.0)
securerandom (0.3.1)
serbea (2.2.0)
erubi (>= 1.10)
tilt (~> 2.0)
shoulda (4.0.0)
Expand Down Expand Up @@ -224,15 +229,15 @@ GEM
zeitwerk (~> 2.5)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
thor (1.3.1)
tilt (2.3.0)
thor (1.3.2)
tilt (2.4.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.5.0)
uri (0.13.0)
uri (0.13.1)
webrick (1.8.1)
yard (0.9.36)
zeitwerk (2.6.13)
yard (0.9.37)
zeitwerk (2.6.18)

PLATFORMS
arm64-darwin-22
Expand Down
2 changes: 1 addition & 1 deletion bridgetown-core/lib/bridgetown-core/collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ def relative_model_path_for(full_path, manifest: nil)

def model_id_from_relative_path(model_relative_path, manifest: nil)
scheme = manifest ? "plugin" : "repo"
id = +"#{scheme}://#{label}.collection/"
id = "#{scheme}://#{label}.collection/"
id += "#{manifest.origin}/" if manifest
id += Addressable::URI.escape(model_relative_path).gsub("#", "%23")
id
Expand Down
5 changes: 3 additions & 2 deletions bridgetown-core/lib/bridgetown-core/resource/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -221,12 +221,12 @@ def path

# @return [String]
def absolute_url
format_url destination&.absolute_url
@absolute_url ||= format_url(destination&.absolute_url)
end

# @return [String]
def relative_url
format_url destination&.relative_url
@relative_url ||= format_url(destination&.relative_url)
end

# @return [String]
Expand Down Expand Up @@ -366,6 +366,7 @@ def prepare_for_fast_refresh! # rubocop:todo Metrics
key == "categories" || key == "tags" || site.taxonomy_types.keys.any?(key)
end
model.attributes = model.origin.read
@relative_url = @absolute_url = nil # wipe memoizations
read!
tax_diff = past_values.any? { |k, v| @data.peek[k] != v }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def ensure_base_path(permalink)
end

# @param resource [Bridgetown::Resource::Base]
register_placeholder :name, ->(resource) do
register_placeholder :name, ->(resource) do # rubocop:disable Style/SymbolProc
resource.basename_without_ext
end

Expand Down