From 0614cfa43e255aee20bf50d425250d089363cd45 Mon Sep 17 00:00:00 2001 From: Nate Hunzaker Date: Sun, 18 May 2014 16:34:40 -0400 Subject: [PATCH 1/3] Load scripts in parallel --- vendor/browser-transforms.js | 50 +++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/vendor/browser-transforms.js b/vendor/browser-transforms.js index 689666ac71d..797f233829d 100644 --- a/vendor/browser-transforms.js +++ b/vendor/browser-transforms.js @@ -18,6 +18,7 @@ 'use strict'; var runScripts; +var loadScripts; var headEl; var buffer = require('buffer'); @@ -157,18 +158,40 @@ var load = exports.load = function(url, callback) { xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 0 || xhr.status === 200) { - run(xhr.responseText, url); + callback(xhr.responseText, url); } else { throw new Error("Could not load " + url); } - if (callback) { - return callback(); - } } }; return xhr.send(null); }; +loadScripts = function(scripts, callback) { + var result = []; + + var check = function() { + var isComplete = result.every(function(task) { + return task !== false; + }); + if (isComplete) callback(result); + }; + + scripts.forEach(function(script, i) { + result[i] = false; + + if (script.src) { + load(script.src, function(content, url) { + result[i] = { content: content, url: url }; + check(); + }); + } else { + result[i] = { content: script.innerHTML, url: null }; + check(); + } + }); +}; + runScripts = function() { var scripts = document.getElementsByTagName('script'); @@ -182,20 +205,11 @@ runScripts = function() { console.warn("You are using the in-browser JSX transformer. Be sure to precompile your JSX for production - http://facebook.github.io/react/docs/tooling-integration.html#jsx"); - function tick() { - if (!jsxScripts.length) return; - - var script = jsxScripts.shift(); - - if (script.src) { - load(script.src, tick); - } else { - run(script.innerHTML, null); - tick(); - } - } - - tick(); + loadScripts(jsxScripts, function(results) { + results.forEach(function(config) { + run(config.content, config.url); + }); + }); }; if (typeof window !== "undefined" && window !== null) { From b1247690d59671992c7e1f129398027403a5efed Mon Sep 17 00:00:00 2001 From: Nate Hunzaker Date: Wed, 21 May 2014 15:07:10 -0400 Subject: [PATCH 2/3] Load in parallel, evaluate linearly as they come in --- vendor/browser-transforms.js | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/vendor/browser-transforms.js b/vendor/browser-transforms.js index 797f233829d..78a05c1374a 100644 --- a/vendor/browser-transforms.js +++ b/vendor/browser-transforms.js @@ -167,26 +167,35 @@ var load = exports.load = function(url, callback) { return xhr.send(null); }; -loadScripts = function(scripts, callback) { - var result = []; +loadScripts = function(scripts) { + var result = scripts.map(function() { + return false; + }); + var count = result.length; var check = function() { - var isComplete = result.every(function(task) { - return task !== false; - }); - if (isComplete) callback(result); + var script, i; + + for (i = 0; i < count; i++) { + script = result[i]; + + if (script && !script.executed) { + script.executed = true; + run(script.content, script.url); + } else if (!script) { + break; + } + }; }; scripts.forEach(function(script, i) { - result[i] = false; - if (script.src) { load(script.src, function(content, url) { - result[i] = { content: content, url: url }; + result[i] = { executed: false, content: content, url: url }; check(); }); } else { - result[i] = { content: script.innerHTML, url: null }; + result[i] = { executed: false, content: script.innerHTML, url: null }; check(); } }); @@ -205,11 +214,7 @@ runScripts = function() { console.warn("You are using the in-browser JSX transformer. Be sure to precompile your JSX for production - http://facebook.github.io/react/docs/tooling-integration.html#jsx"); - loadScripts(jsxScripts, function(results) { - results.forEach(function(config) { - run(config.content, config.url); - }); - }); + loadScripts(jsxScripts); }; if (typeof window !== "undefined" && window !== null) { From 59a9251c90a70ede598d0c88c0b7895a6d03089e Mon Sep 17 00:00:00 2001 From: Nate Hunzaker Date: Wed, 21 May 2014 15:09:52 -0400 Subject: [PATCH 3/3] Set executed after run --- vendor/browser-transforms.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/browser-transforms.js b/vendor/browser-transforms.js index 78a05c1374a..15f5f539f65 100644 --- a/vendor/browser-transforms.js +++ b/vendor/browser-transforms.js @@ -180,8 +180,8 @@ loadScripts = function(scripts) { script = result[i]; if (script && !script.executed) { - script.executed = true; run(script.content, script.url); + script.executed = true; } else if (!script) { break; }