@samitouri / QOS-React-2 / commits / 0614cfa43e

Load scripts in parallel

Nate Hunzaker committed May 18, 2014 at 16:34 UTC 0614cfa43e255aee20bf50d425250d089363cd45
1 file changed +32 -18
vendor/browser-transforms.js
+32 -18
@@ -18,6 +18,7 @@
18
19 'use strict';
20 var runScripts;
21 +var loadScripts;
22 var headEl;
23
24 var buffer = require('buffer');
@@ -157,18 +158,40 @@ var load = exports.load = function(url, callback) {
158 xhr.onreadystatechange = function() {
159 if (xhr.readyState === 4) {
160 if (xhr.status === 0 || xhr.status === 200) {
160 - run(xhr.responseText, url);
161 + callback(xhr.responseText, url);
162 } else {
163 throw new Error("Could not load " + url);
164 }
164 - if (callback) {
165 - return callback();
166 - }
165 }
166 };
167 return xhr.send(null);
168 };
169
170 +loadScripts = function(scripts, callback) {
171 + var result = [];
172 +
173 + var check = function() {
174 + var isComplete = result.every(function(task) {
175 + return task !== false;
176 + });
177 + if (isComplete) callback(result);
178 + };
179 +
180 + scripts.forEach(function(script, i) {
181 + result[i] = false;
182 +
183 + if (script.src) {
184 + load(script.src, function(content, url) {
185 + result[i] = { content: content, url: url };
186 + check();
187 + });
188 + } else {
189 + result[i] = { content: script.innerHTML, url: null };
190 + check();
191 + }
192 + });
193 +};
194 +
195 runScripts = function() {
196 var scripts = document.getElementsByTagName('script');
197
@@ -182,20 +205,11 @@ runScripts = function() {
205
206 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");
207
185 - function tick() {
186 - if (!jsxScripts.length) return;
187 -
188 - var script = jsxScripts.shift();
189 -
190 - if (script.src) {
191 - load(script.src, tick);
192 - } else {
193 - run(script.innerHTML, null);
194 - tick();
195 - }
196 - }
197 -
198 - tick();
208 + loadScripts(jsxScripts, function(results) {
209 + results.forEach(function(config) {
210 + run(config.content, config.url);
211 + });
212 + });
213 };
214
215 if (typeof window !== "undefined" && window !== null) {