mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Load scripts in parallel
This commit is contained in:
Vendored
+32
-18
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user