From e0b5aff32b804427d4682a45ad0e7883851aa07f Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 13 Nov 2025 16:31:24 +0000 Subject: [PATCH] Deduplicate strings in ip-ranges JSON The JSON document contains the same few strings repeated thousands of times. By using the `freeze: true` option of JSON.parse, added in `json 2.4.0` (december 2020), we can save memory by reusing the same frozen string every time. --- actionpack-cloudfront.gemspec | 1 + lib/action_pack/cloudfront/ip_ranges.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/actionpack-cloudfront.gemspec b/actionpack-cloudfront.gemspec index c95355c..ca6449d 100644 --- a/actionpack-cloudfront.gemspec +++ b/actionpack-cloudfront.gemspec @@ -17,6 +17,7 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib'] spec.add_runtime_dependency 'actionpack', '>= 4.2' spec.add_runtime_dependency 'railties', '>= 4.2' + spec.add_runtime_dependency 'json', '>= 2.4.0' spec.add_development_dependency 'appraisal' spec.add_development_dependency 'bundler' spec.add_development_dependency 'rake' diff --git a/lib/action_pack/cloudfront/ip_ranges.rb b/lib/action_pack/cloudfront/ip_ranges.rb index d9bb1a7..e11574d 100644 --- a/lib/action_pack/cloudfront/ip_ranges.rb +++ b/lib/action_pack/cloudfront/ip_ranges.rb @@ -43,11 +43,11 @@ def ip_data Timeout.timeout(5) do uri = URI('https://ip-ranges.amazonaws.com/ip-ranges.json') res = Net::HTTP.get(uri) - JSON.parse(res) + JSON.parse(res, freeze: true) end rescue backup_json = File.join File.dirname(__FILE__), 'ip-ranges.json' - JSON.parse File.read(backup_json) + JSON.load_file(backup_json, freeze: true) end extend self