Load in parallel, evaluate linearly as they come in
Nate Hunzaker committed
May 21, 2014 at 15:07 UTC
b1247690d59671992c7e1f129398027403a5efed
1 file changed
+20
-15
vendor/browser-transforms.js
+20
-15
@@ -167,26 +167,35 @@ var load = exports.load = function(url, callback) {
167
return xhr.send(null);
168
};
169
170
-loadScripts = function(scripts, callback) {
171
- var result = [];
170
+loadScripts = function(scripts) {
171
+ var result = scripts.map(function() {
172
+ return false;
173
+ });
174
+ var count = result.length;
175
176
var check = function() {
174
- var isComplete = result.every(function(task) {
175
- return task !== false;
176
- });
177
- if (isComplete) callback(result);
177
+ var script, i;
178
+
179
+ for (i = 0; i < count; i++) {
180
+ script = result[i];
181
+
182
+ if (script && !script.executed) {
183
+ script.executed = true;
184
+ run(script.content, script.url);
185
+ } else if (!script) {
186
+ break;
187
+ }
188
+ };
189
};
190
191
scripts.forEach(function(script, i) {
181
- result[i] = false;
182
-
192
if (script.src) {
193
load(script.src, function(content, url) {
185
- result[i] = { content: content, url: url };
194
+ result[i] = { executed: false, content: content, url: url };
195
check();
196
});
197
} else {
189
- result[i] = { content: script.innerHTML, url: null };
198
+ result[i] = { executed: false, content: script.innerHTML, url: null };
199
check();
200
}
201
});
@@ -205,11 +214,7 @@ runScripts = function() {
214
215
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");
216
208
- loadScripts(jsxScripts, function(results) {
209
- results.forEach(function(config) {
210
- run(config.content, config.url);
211
- });
212
- });
217
+ loadScripts(jsxScripts);
218
};
219
220
if (typeof window !== "undefined" && window !== null) {