From da3948476772b3697eb44beed8cf70776e913912 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 22 Jan 2013 00:59:54 -0800 Subject: [PATCH] Mitigate major perf regression caused by the Middleman::Util#binary? method --- middleman-core/lib/middleman-core/util.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/middleman-core/lib/middleman-core/util.rb b/middleman-core/lib/middleman-core/util.rb index 950f7a80..46854994 100644 --- a/middleman-core/lib/middleman-core/util.rb +++ b/middleman-core/lib/middleman-core/util.rb @@ -10,8 +10,6 @@ require "thor" # Core Pathname library used for traversal require "pathname" -require 'win32/file' if File::ALT_SEPARATOR - module Middleman module Util @@ -21,8 +19,17 @@ module Middleman # @param [String] filename The file to check. # @return [Boolean] def self.binary?(filename) - s = (File.read(filename, File.stat(filename).blksize) || "").split(//) - ((s.size - s.grep(" ".."~").size) / s.size.to_f) > 0.30 + ext = File.extname(filename) + return false if Tilt.registered?(ext.sub('.','')) + + ext = ".#{ext}" unless ext.to_s[0] == ?. + mime = ::Rack::Mime.mime_type(ext, nil) + return false unless mime + return false if mime.start_with?('text/') + return false if mime.include?('xml') + return false if mime.include?('json') + return false if mime.include?('javascript') + true end # The logger