From 52b5e370fb4f55a296a6ec5f25c9208db10af6f1 Mon Sep 17 00:00:00 2001 From: Lennart kats Date: Sun, 21 Jun 2015 10:11:10 +0000 Subject: [PATCH 1/8] Get unpacked (o)dev content in parallel from ide.c9.io and c9.io --- .../build_support/mini_require.js | 18 +++++++++ plugins/c9.static/unpacked_helper.js | 39 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 plugins/c9.static/unpacked_helper.js diff --git a/node_modules/architect-build/build_support/mini_require.js b/node_modules/architect-build/build_support/mini_require.js index 3dae0f74..2109b5d6 100644 --- a/node_modules/architect-build/build_support/mini_require.js +++ b/node_modules/architect-build/build_support/mini_require.js @@ -274,6 +274,9 @@ var config = require.config = function(cfg) { cfg.paths && Object.keys(cfg.paths).forEach(function(p) { config.paths[p] = cfg.paths[p]; }); + + if (cfg.baseUrlLoadBalancers) + config.baseUrlLoadBalancers = cfg.baseUrlLoadBalancers; }; config.packages = Object.create(null); config.paths = Object.create(null); @@ -321,10 +324,25 @@ require.toUrl = function(moduleName, ext, skipExt) { var url = moduleName + ext; if (!absRe.test(url)) { url = (config.baseUrl || require.MODULE_LOAD_URL + "/") + url; + if (config.baseUrlLoadBalancers) { + var n = Math.abs(hashCode(url)) % config.baseUrlLoadBalancers.length; + url = config.baseUrlLoadBalancers[n] + url; + } } return url; }; +function hashCode(string) { + var result = 0, i, chr, len; + if (string.length == 0) return result; + for (i = 0, len = string.length; i < len; i++) { + chr = string.charCodeAt(i); + result = ((result << 5) - result) + chr; + result |= 0; // Convert to 32bit integer + } + return result; +} + var loadScript = function(path, id, callback) { // TODO use importScripts for webworkers var head = document.head || document.documentElement; diff --git a/plugins/c9.static/unpacked_helper.js b/plugins/c9.static/unpacked_helper.js new file mode 100644 index 00000000..dbf551f4 --- /dev/null +++ b/plugins/c9.static/unpacked_helper.js @@ -0,0 +1,39 @@ +"use strict"; + +plugin.consumes = [ + "db", "connect.static" +]; +plugin.provides = [ + "unpacked_helper" +]; + +module.exports = plugin; + +function plugin(options, imports, register) { + var connectStatic = imports["connect.static"]; + var assert = require("assert"); + var baseUrl = options.baseUrl; + var ideBaseUrl = options.ideBaseUrl; + var apiBaseUrl = options.apiBaseUrl; + var vfsBaseUrl = options.vfsBaseUrl; + + connectStatic.getRequireJsConfig().baseUrlLoadBalancers = [ + ideBaseUrl, + baseUrl + "/uph", + // We could include others but dogfooding URLs like + // vfs.newclient-lennartcl.c9.io don't have a cert, so + // let's not + // apiBaseUrl + "/uph", + // vfsBaseUrl + "/uph", + ]; + assert(connectStatic.getRequireJsConfig().baseUrlLoadBalancers); + + function cacheForever(req, res, next) { + res.setHeader("Cache-Control", "public, max-age=31556926"); + next(); + } + + register(null, { + "unpacked_helper": {} + }); +} \ No newline at end of file From 2c656ebb3aeea600abfff0ae3bd3e9def68d5d07 Mon Sep 17 00:00:00 2001 From: Lennart Kats Date: Sun, 21 Jun 2015 12:05:04 +0000 Subject: [PATCH 2/8] Also do lib requests in parallel --- .../architect-build/build_support/mini_require.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/node_modules/architect-build/build_support/mini_require.js b/node_modules/architect-build/build_support/mini_require.js index 2109b5d6..05d8428e 100644 --- a/node_modules/architect-build/build_support/mini_require.js +++ b/node_modules/architect-build/build_support/mini_require.js @@ -324,10 +324,10 @@ require.toUrl = function(moduleName, ext, skipExt) { var url = moduleName + ext; if (!absRe.test(url)) { url = (config.baseUrl || require.MODULE_LOAD_URL + "/") + url; - if (config.baseUrlLoadBalancers) { - var n = Math.abs(hashCode(url)) % config.baseUrlLoadBalancers.length; - url = config.baseUrlLoadBalancers[n] + url; - } + } + if (url[0] === "/" && config.baseUrlLoadBalancers) { + var n = Math.abs(hashCode(url)) % config.baseUrlLoadBalancers.length; + url = config.baseUrlLoadBalancers[n] + url; } return url; }; From 27170b3454559a128649c41b67dedf9bd712e899 Mon Sep 17 00:00:00 2001 From: Lennart Kats Date: Sun, 21 Jun 2015 12:05:16 +0000 Subject: [PATCH 3/8] Avoid downloading from subsubdomains like ide.newclient-lennnartcl.c9.io Since these don't have a valid certificate, they don't support caching --- plugins/c9.static/unpacked_helper.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/c9.static/unpacked_helper.js b/plugins/c9.static/unpacked_helper.js index dbf551f4..0eb347f6 100644 --- a/plugins/c9.static/unpacked_helper.js +++ b/plugins/c9.static/unpacked_helper.js @@ -17,21 +17,21 @@ function plugin(options, imports, register) { var apiBaseUrl = options.apiBaseUrl; var vfsBaseUrl = options.vfsBaseUrl; - connectStatic.getRequireJsConfig().baseUrlLoadBalancers = [ - ideBaseUrl, + var balancers = [ baseUrl + "/uph", - // We could include others but dogfooding URLs like - // vfs.newclient-lennartcl.c9.io don't have a cert, so - // let's not - // apiBaseUrl + "/uph", - // vfsBaseUrl + "/uph", ]; - assert(connectStatic.getRequireJsConfig().baseUrlLoadBalancers); + if (!options.avoidSubdomains) + balancers.push( + ideBaseUrl + // We could include others but dogfooding URLs like + // vfs.newclient-lennartcl.c9.io don't have a cert, so + // let's not + // apiBaseUrl + "/uph", + // vfsBaseUrl + "/uph" + ); - function cacheForever(req, res, next) { - res.setHeader("Cache-Control", "public, max-age=31556926"); - next(); - } + connectStatic.getRequireJsConfig().baseUrlLoadBalancers = balancers; + assert(connectStatic.getRequireJsConfig().baseUrlLoadBalancers); register(null, { "unpacked_helper": {} From c024bd2c58f11831b5a8805b2bf707724cee2711 Mon Sep 17 00:00:00 2001 From: Lennart kats Date: Wed, 24 Jun 2015 15:56:35 +0000 Subject: [PATCH 4/8] Use ide.c9.dev or equivalent for getting resources in the worker --- configs/client-default.js | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/client-default.js b/configs/client-default.js index d4b0a7b4..4d7182d6 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -302,6 +302,7 @@ module.exports = function(options) { { packagePath: "plugins/c9.ide.language/language", workspaceDir: workspaceDir, + staticPrefix: options.packed ? staticPrefix : options.baseUrl + staticPrefix, workerPrefix: options.CORSWorkerPrefix // "/static/standalone/worker" }, "plugins/c9.ide.language/keyhandler", From bba93a3239adb084423a82a83b3fbbd41254f9fe Mon Sep 17 00:00:00 2001 From: Lennart kats Date: Wed, 24 Jun 2015 16:01:56 +0000 Subject: [PATCH 5/8] Fix standalone --- configs/client-default.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/client-default.js b/configs/client-default.js index 4d7182d6..f5788982 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -302,7 +302,7 @@ module.exports = function(options) { { packagePath: "plugins/c9.ide.language/language", workspaceDir: workspaceDir, - staticPrefix: options.packed ? staticPrefix : options.baseUrl + staticPrefix, + staticPrefix: options.packed || !options.baseUrl ? staticPrefix : options.baseUrl + staticPrefix, workerPrefix: options.CORSWorkerPrefix // "/static/standalone/worker" }, "plugins/c9.ide.language/keyhandler", From ba1c81359b007bd9e436649ec82c3646296421ed Mon Sep 17 00:00:00 2001 From: Lennart Kats Date: Tue, 7 Jul 2015 09:44:50 +0200 Subject: [PATCH 6/8] Fix options.baseUrl --- plugins/c9.static/unpacked_helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/c9.static/unpacked_helper.js b/plugins/c9.static/unpacked_helper.js index 0eb347f6..be977947 100644 --- a/plugins/c9.static/unpacked_helper.js +++ b/plugins/c9.static/unpacked_helper.js @@ -14,8 +14,8 @@ function plugin(options, imports, register) { var assert = require("assert"); var baseUrl = options.baseUrl; var ideBaseUrl = options.ideBaseUrl; - var apiBaseUrl = options.apiBaseUrl; - var vfsBaseUrl = options.vfsBaseUrl; + assert(options.baseUrl, "baseUrl must be set"); + assert(options.ideBaseUrl, "ideBaseUrl must be set"); var balancers = [ baseUrl + "/uph", From e03b48023b001e2bdcedd9d0257d944bf1e860a6 Mon Sep 17 00:00:00 2001 From: Lennart Kats Date: Tue, 7 Jul 2015 09:49:20 +0200 Subject: [PATCH 7/8] Disable parallel requests for now --- plugins/c9.static/unpacked_helper.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/c9.static/unpacked_helper.js b/plugins/c9.static/unpacked_helper.js index be977947..bf461c26 100644 --- a/plugins/c9.static/unpacked_helper.js +++ b/plugins/c9.static/unpacked_helper.js @@ -20,6 +20,8 @@ function plugin(options, imports, register) { var balancers = [ baseUrl + "/uph", ]; + /* UNDONE: for now we put all static content on one domain + because of reports of CORS errors if (!options.avoidSubdomains) balancers.push( ideBaseUrl @@ -29,6 +31,7 @@ function plugin(options, imports, register) { // apiBaseUrl + "/uph", // vfsBaseUrl + "/uph" ); + */ connectStatic.getRequireJsConfig().baseUrlLoadBalancers = balancers; assert(connectStatic.getRequireJsConfig().baseUrlLoadBalancers); From d9df77048319f2602ff884d3fa1064938ac4f890 Mon Sep 17 00:00:00 2001 From: Lennart Kats Date: Tue, 7 Jul 2015 10:04:43 +0200 Subject: [PATCH 8/8] Always use unpacked_helper prefix for getting worker files in unpacked mode --- configs/client-default.js | 4 +++- plugins/c9.static/unpacked_helper.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index f5788982..b967af8b 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -302,7 +302,9 @@ module.exports = function(options) { { packagePath: "plugins/c9.ide.language/language", workspaceDir: workspaceDir, - staticPrefix: options.packed || !options.baseUrl ? staticPrefix : options.baseUrl + staticPrefix, + staticPrefix: options.packed + ? staticPrefix + : options.ideBaseUrl + "/uph" + staticPrefix, workerPrefix: options.CORSWorkerPrefix // "/static/standalone/worker" }, "plugins/c9.ide.language/keyhandler", diff --git a/plugins/c9.static/unpacked_helper.js b/plugins/c9.static/unpacked_helper.js index bf461c26..15a3fe9a 100644 --- a/plugins/c9.static/unpacked_helper.js +++ b/plugins/c9.static/unpacked_helper.js @@ -14,8 +14,8 @@ function plugin(options, imports, register) { var assert = require("assert"); var baseUrl = options.baseUrl; var ideBaseUrl = options.ideBaseUrl; - assert(options.baseUrl, "baseUrl must be set"); - assert(options.ideBaseUrl, "ideBaseUrl must be set"); + assert(baseUrl, "baseUrl must be set"); + assert(ideBaseUrl, "ideBaseUrl must be set"); var balancers = [ baseUrl + "/uph",