diff --git a/benchmark/local-require b/benchmark/local-require new file mode 100755 index 00000000000..96330667ae2 --- /dev/null +++ b/benchmark/local-require @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require 'benchmark/ips' +require 'jekyll' +require 'json' + +DATA = {"foo"=>"bar", "alpha"=>{"beta"=>"gamma"}, "lipsum"=>["lorem", "ipsum", "dolor"]} + +def local_require + require 'json' + JSON.pretty_generate(DATA) +end + +def global_require + JSON.pretty_generate(DATA) +end + +def graceful_require + Jekyll::External.require_with_graceful_fail("json") + JSON.pretty_generate(DATA) +end + +Benchmark.ips do |x| + x.report("local-require") { local_require } + x.report("global-require") { global_require } + x.report("graceful-require") { graceful_require } + x.compare! +end diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 2d9844f51f1..56a9b84f5b2 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -18,7 +18,6 @@ def require_all(path) require "rubygems" # stdlib -require "pathutil" require "forwardable" require "fileutils" require "time" @@ -26,8 +25,12 @@ def require_all(path) require "pathname" require "logger" require "set" +require "csv" +require "json" # 3rd party +require "pathutil" +require "addressable/uri" require "safe_yaml/load" require "liquid" require "kramdown" diff --git a/lib/jekyll/cleaner.rb b/lib/jekyll/cleaner.rb index d846e3f7780..36d28a9b6db 100644 --- a/lib/jekyll/cleaner.rb +++ b/lib/jekyll/cleaner.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "set" - module Jekyll # Handles the cleanup of a site's destination before it is built. class Cleaner diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb index 392a51fed11..bb313152c37 100644 --- a/lib/jekyll/commands/doctor.rb +++ b/lib/jekyll/commands/doctor.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "addressable/uri" - module Jekyll module Commands class Doctor < Command diff --git a/lib/jekyll/commands/serve/live_reload_reactor.rb b/lib/jekyll/commands/serve/live_reload_reactor.rb index c5ce8cadfd7..5f3a4877cce 100644 --- a/lib/jekyll/commands/serve/live_reload_reactor.rb +++ b/lib/jekyll/commands/serve/live_reload_reactor.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require "json" require "em-websocket" require_relative "websockets" diff --git a/lib/jekyll/converters/markdown/kramdown_parser.rb b/lib/jekyll/converters/markdown/kramdown_parser.rb index 142778dc9f2..b7caab551d4 100644 --- a/lib/jekyll/converters/markdown/kramdown_parser.rb +++ b/lib/jekyll/converters/markdown/kramdown_parser.rb @@ -14,9 +14,6 @@ class KramdownParser }.freeze def initialize(config) - unless defined?(Kramdown) - Jekyll::External.require_with_graceful_fail "kramdown" - end @main_fallback_highlighter = config["highlighter"] || "rouge" @config = config["kramdown"] || {} @highlighter = nil diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 85cff3a53df..bfd03986329 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "set" - # Convertible provides methods for converting a pagelike item # from a certain type of markup into actual content # diff --git a/lib/jekyll/drops/drop.rb b/lib/jekyll/drops/drop.rb index 92978af1962..be842737b19 100644 --- a/lib/jekyll/drops/drop.rb +++ b/lib/jekyll/drops/drop.rb @@ -137,7 +137,6 @@ def to_h # # Returns a pretty generation of the hash representation of the Drop. def inspect - require "json" JSON.pretty_generate to_h end @@ -155,7 +154,6 @@ def hash_for_json(*) # # Returns a JSON representation of the Drop in a String. def to_json(state = nil) - require "json" JSON.generate(hash_for_json(state), state) end diff --git a/lib/jekyll/drops/jekyll_drop.rb b/lib/jekyll/drops/jekyll_drop.rb index 8a56b9ee76d..63187cc4dcb 100644 --- a/lib/jekyll/drops/jekyll_drop.rb +++ b/lib/jekyll/drops/jekyll_drop.rb @@ -25,7 +25,6 @@ def to_h end def to_json(state = nil) - require "json" JSON.generate(to_h, state) end end diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index ddc4a0544f3..bf4cead49f6 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -1,9 +1,5 @@ # frozen_string_literal: true -require "addressable/uri" -require "json" -require "liquid" - require_all "jekyll/filters" module Jekyll diff --git a/lib/jekyll/filters/url_filters.rb b/lib/jekyll/filters/url_filters.rb index 74844be4a57..67abe137caa 100644 --- a/lib/jekyll/filters/url_filters.rb +++ b/lib/jekyll/filters/url_filters.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "addressable/uri" - module Jekyll module Filters module URLFilters diff --git a/lib/jekyll/reader.rb b/lib/jekyll/reader.rb index 99aa746c978..fed76a16303 100644 --- a/lib/jekyll/reader.rb +++ b/lib/jekyll/reader.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "csv" - module Jekyll class Reader attr_reader :site diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index bda7e29606a..e74251af0ff 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "csv" - module Jekyll class Site attr_reader :source, :dest, :config diff --git a/lib/jekyll/url.rb b/lib/jekyll/url.rb index 12f4ea453cb..87f20e138eb 100644 --- a/lib/jekyll/url.rb +++ b/lib/jekyll/url.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "addressable/uri" - # Public: Methods that generate a URL for a resource such as a Post or a Page. # # Examples diff --git a/lib/jekyll/utils/rouge.rb b/lib/jekyll/utils/rouge.rb index 9ee90dacba7..9afc689fe80 100644 --- a/lib/jekyll/utils/rouge.rb +++ b/lib/jekyll/utils/rouge.rb @@ -1,11 +1,12 @@ # frozen_string_literal: true +Jekyll::External.require_with_graceful_fail("rouge") + module Jekyll module Utils module Rouge def self.html_formatter(*args) - Jekyll::External.require_with_graceful_fail("rouge") unless defined?(::Rouge) if old_api? ::Rouge::Formatters::HTML.new(*args) else