PERF: Speed up JSHint tests by using local buffers instead of AJAX

requests.
This commit is contained in:
Robin Ward 2014-07-22 14:13:13 -04:00
parent 386b6213a5
commit 4c51258526
4 changed files with 44 additions and 6 deletions

View File

@ -1,3 +1,10 @@
app/assets/javascripts/env.js
app/assets/javascripts/main_include.js
app/assets/javascripts/main_include_admin.js
app/assets/javascripts/preload_store.js
app/assets/javascripts/pagedown_custom.js
app/assets/javascripts/vendor.js
app/assets/javascripts/locales/i18n.js
app/assets/javascripts/defer/html-sanitizer-bundle.js
app/assets/javascripts/discourse/lib/Markdown.Editor.js
jsapp/lib/Markdown.Editor.js
@ -10,3 +17,6 @@ public/javascripts/
spec/phantom_js/smoke_test.js
vendor/
test/javascripts/helpers/
test/javascripts/test_helper.js
test/javascripts/test_helper.js

View File

@ -23,7 +23,17 @@ class DiscourseIIFE < Sprockets::Processor
return data if path =~ /\.shbrs/
return data if path =~ /\.hbrs/
"(function () {\n\nvar $ = window.jQuery;\n// IIFE Wrapped Content Begins:\n\n#{data}\n\n// IIFE Wrapped Content Ends\n\n })(this);"
res = "(function () {\n\nvar $ = window.jQuery;\n// IIFE Wrapped Content Begins:\n\n#{data}\n\n// IIFE Wrapped Content Ends\n\n })(this);"
# Include JS code for JSHint
unless Rails.env.production?
req_path = path.sub(Rails.root.to_s, '')
.sub("/app/assets/javascripts", "")
.sub("/test/javascripts", "")
res << "\nwindow.__jshintSrc = window.__jshintSrc || {}; window.__jshintSrc['/assets#{req_path}'] = #{data.to_json};\n"
end
res
end
end

View File

@ -65,6 +65,8 @@ module Tilt
@output = klass.v8.eval(generate_source(scope))
end
source = @output.dup
# For backwards compatibility with plugins, for now export the Global format too.
# We should eventually have an upgrade system for plugins to use ES6 or some other
# resolve based API.
@ -81,6 +83,12 @@ module Tilt
@output << "\n\nDiscourse.#{class_name}#{type.classify} = require('#{require_name}').default"
end
# Include JS code for JSHint
unless Rails.env.production?
req_path = "/assets/#{scope.logical_path}.js"
@output << "\nwindow.__jshintSrc = window.__jshintSrc || {}; window.__jshintSrc['#{req_path}'] = #{source.to_json};\n"
end
@output
end

View File

@ -9,17 +9,24 @@ var qHint = function(name, sourceFile, options, globals) {
}
return asyncTestDiscourse(name, function() {
if (typeof window.__jshintSrc !== "undefined") {
var src = window.__jshintSrc[sourceFile];
if (src) {
start();
qHint.validateFile(src, options, globals);
return;
}
}
console.warn("Using AJAX for JSHint " + sourceFile);
qHint.sendRequest(sourceFile, function(req) {
start();
if (req.status == 200) {
var text = req.responseText;
// Remove our generate IIFEs so we get the same line numbers as original
// files
text = text.replace(/^[^]*\/\/ IIFE Wrapped Content Begins:\n\n/m, "");
text = text.replace(/\n\n\/\/ IIFE Wrapped Content Ends[^]*$/m, "");
qHint.validateFile(text, options, globals);
} else {
ok(false, "HTTP error " + req.status +
@ -32,6 +39,9 @@ var qHint = function(name, sourceFile, options, globals) {
qHint.validateFile = function (source, options, globals) {
var i, len, err;
source = source.replace(/^[^]*\/\/ IIFE Wrapped Content Begins:\n\n/m, "");
source = source.replace(/\n\n\/\/ IIFE Wrapped Content Ends[^]*$/m, "");
if (JSHINT(source, options, globals)) {
ok(true);
return;