diff --git a/benchmark/parse-date b/benchmark/parse-date new file mode 100755 index 00000000..9d1d1ed6 --- /dev/null +++ b/benchmark/parse-date @@ -0,0 +1,25 @@ +#!/usr/bin/env ruby + +require_relative '../lib/jekyll' +require 'benchmark/ips' + +date = "2014-08-02 14:43:06 PDT".freeze +time = Time.parse(date) + +Benchmark.ips do |x| + x.report('Time.parse') do + Time.parse(date) + end + + x.report('localtime') do + Time.parse(date).localtime + end + + x.report('localtime parsed') do + time.localtime + end + + x.report('Utils.parse_date') do + Jekyll::Utils.parse_date(date) + end +end diff --git a/lib/jekyll/utils.rb b/lib/jekyll/utils.rb index 5039c07a..49d67f4b 100644 --- a/lib/jekyll/utils.rb +++ b/lib/jekyll/utils.rb @@ -128,7 +128,8 @@ module Jekyll # Returns the parsed date if successful, throws a FatalException # if not def parse_date(input, msg = "Input could not be parsed.") - Time.parse(input).localtime + @parse_date_cache ||= {} + @parse_date_cache[input] ||= Time.parse(input).localtime rescue ArgumentError raise Errors::InvalidDateError, "Invalid date '#{input}': #{msg}" end