Skip to content

Commit

Permalink
switch to a rollup subset of lodash and shave off 20 - 30%+ boot time
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanpenner committed Jun 23, 2016
1 parent f0c36b4 commit af961c5
Show file tree
Hide file tree
Showing 40 changed files with 82 additions and 104 deletions.
1 change: 1 addition & 0 deletions bin/ember
Expand Up @@ -4,6 +4,7 @@
// Provide a title to the process in `ps`
process.title = 'ember';

// require('time-require');
var resolve = require('resolve');
var exit = require('exit');

Expand Down
2 changes: 1 addition & 1 deletion blueprints/addon/index.js
Expand Up @@ -3,7 +3,7 @@ var existsSync = require('exists-sync');
var path = require('path');
var walkSync = require('walk-sync');
var stringUtil = require('ember-cli-string-utils');
var uniq = require('lodash/uniq');
var uniq = require('ember-cli-lodash-subset').uniq;
var SilentError = require('silent-error');
var date = new Date();

Expand Down
2 changes: 1 addition & 1 deletion lib/broccoli/ember-addon.js
Expand Up @@ -4,7 +4,7 @@
/**
@module ember-cli
*/
var defaultsDeep = require('lodash/defaultsDeep');
var defaultsDeep = require('ember-cli-lodash-subset').defaultsDeep;
var Funnel = require('broccoli-funnel');
var EmberApp = require('./ember-app');

Expand Down
8 changes: 4 additions & 4 deletions lib/broccoli/ember-app.js
Expand Up @@ -34,10 +34,10 @@ var mergeTrees = require('./merge-trees');
var WatchedDir = require('broccoli-source').WatchedDir;
var UnwatchedDir = require('broccoli-source').UnwatchedDir;

var merge = require('lodash/merge');
var defaultsDeep = require('lodash/defaultsDeep');
var omitBy = require('lodash/omitBy');
var isNull = require('lodash/isNull');
var merge = require('ember-cli-lodash-subset').merge;
var defaultsDeep = require('ember-cli-lodash-subset').defaultsDeep;
var omitBy = require('ember-cli-lodash-subset').omitBy;
var isNull = require('ember-cli-lodash-subset').isNull;
var Funnel = require('broccoli-funnel');
var funnelReducer = require('broccoli-funnel-reducer');

Expand Down
2 changes: 1 addition & 1 deletion lib/cli/index.js
Expand Up @@ -10,7 +10,7 @@ var tasks = requireAsHash('../tasks/*.js', Task);
var CLI = require('./cli');
var packageConfig = require('../../package.json');
var debug = require('debug')('ember-cli:cli/index');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;
var path = require('path');

// ember-cli and user apps have many dependencies, many of which require
Expand Down
2 changes: 1 addition & 1 deletion lib/commands/destroy.js
Expand Up @@ -3,7 +3,7 @@
var Command = require('../models/command');
var Promise = require('../ext/promise');
var mergeBlueprintOptions = require('../utilities/merge-blueprint-options');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;
var SilentError = require('silent-error');

module.exports = Command.extend({
Expand Down
7 changes: 3 additions & 4 deletions lib/commands/generate.js
Expand Up @@ -5,8 +5,7 @@ var Command = require('../models/command');
var Promise = require('../ext/promise');
var Blueprint = require('../models/blueprint');
var mergeBlueprintOptions = require('../utilities/merge-blueprint-options');
var merge = require('lodash/merge');
var reject = require('lodash/reject');
var _ = require('ember-cli-lodash-subset');
var EOL = require('os').EOL;
var SilentError = require('silent-error');

Expand Down Expand Up @@ -56,7 +55,7 @@ module.exports = Command.extend({
commandOptions.pod = !commandOptions.pod;
}

var taskOptions = merge(taskArgs, commandOptions || {});
var taskOptions = _.merge(taskArgs, commandOptions || {});

if (this.project.initializeAddons) {
this.project.initializeAddons();
Expand Down Expand Up @@ -118,7 +117,7 @@ module.exports = Command.extend({
var blueprints = collection.blueprints;

if (!verbose) {
blueprints = reject(blueprints, 'overridden');
blueprints = _.reject(blueprints, 'overridden');
}

var output = '';
Expand Down
2 changes: 1 addition & 1 deletion lib/commands/help.js
Expand Up @@ -3,7 +3,7 @@
var Command = require('../models/command');
var lookupCommand = require('../cli/lookup-command');
var stringUtils = require('ember-cli-string-utils');
var assign = require('lodash/assign');
var assign = require('ember-cli-lodash-subset').assign;
var GenerateCommand = require('./generate');
var RootCommand = require('../utilities/root-command');
var JsonGenerator = require('../utilities/json-generator');
Expand Down
4 changes: 2 additions & 2 deletions lib/commands/init.js
@@ -1,7 +1,7 @@
'use strict';

var clone = require('lodash/clone');
var merge = require('lodash/merge');
var clone = require('ember-cli-lodash-subset').clone;
var merge = require('ember-cli-lodash-subset').merge;
var Command = require('../models/command');
var Promise = require('../ext/promise');
var SilentError = require('silent-error');
Expand Down
2 changes: 1 addition & 1 deletion lib/commands/serve.js
@@ -1,6 +1,6 @@
'use strict';

var assign = require('lodash/assign');
var assign = require('ember-cli-lodash-subset').assign;
var Command = require('../models/command');
var Promise = require('../ext/promise');
var SilentError = require('silent-error');
Expand Down
7 changes: 3 additions & 4 deletions lib/commands/test.js
Expand Up @@ -7,7 +7,7 @@ var SilentError = require('silent-error');
var path = require('path');
var win = require('../utilities/windows-admin');
var existsSync = require('exists-sync');

var assign = require('ember-cli-lodash-subset').assign;
var defaultPort = 7357;

module.exports = Command.extend({
Expand Down Expand Up @@ -35,7 +35,6 @@ module.exports = Command.extend({
init: function() {
this._super.apply(this, arguments);

this.assign = require('lodash/assign');
this.quickTemp = require('quick-temp');

this.Builder = this.Builder || Builder;
Expand Down Expand Up @@ -116,7 +115,7 @@ module.exports = Command.extend({

process.env['EMBER_CLI_TEST_OUTPUT'] = outputPath;

var testOptions = this.assign({}, commandOptions, {
var testOptions = assign({}, commandOptions, {
ui: this.ui,
outputPath: outputPath,
project: this.project,
Expand All @@ -141,7 +140,7 @@ module.exports = Command.extend({
var testServer = new TestServerTask(options);
var builder = new this.Builder(testOptions);

testOptions.watcher = new this.Watcher(this.assign(options, {
testOptions.watcher = new this.Watcher(assign(options, {
builder: builder,
verbose: false,
options: commandOptions
Expand Down
2 changes: 1 addition & 1 deletion lib/models/addon-discovery.js
Expand Up @@ -4,7 +4,7 @@
@module ember-cli
*/

var assign = require('lodash/assign');
var assign = require('ember-cli-lodash-subset').assign;
var debug = require('debug')('ember-cli:addon-discovery');
var existsSync = require('exists-sync');
var path = require('path');
Expand Down
2 changes: 1 addition & 1 deletion lib/models/addon.js
Expand Up @@ -6,7 +6,7 @@

var existsSync = require('exists-sync');
var path = require('path');
var assign = require('lodash/assign');
var assign = require('ember-cli-lodash-subset').assign;
var SilentError = require('silent-error');
var debug = require('debug')('ember-cli:addon');

Expand Down
2 changes: 1 addition & 1 deletion lib/models/asset-size-printer.js
Expand Up @@ -3,7 +3,7 @@
var chalk = require('chalk');
var path = require('path');
var Promise = require('../ext/promise');
var assign = require('lodash/assign');
var assign = require('ember-cli-lodash-subset').assign;

function AssetPrinterSize(options) {
assign(this, options);
Expand Down
33 changes: 12 additions & 21 deletions lib/models/blueprint.js
Expand Up @@ -17,16 +17,7 @@ var inflector = require('inflection');
var minimatch = require('minimatch');
var path = require('path');
var stringUtils = require('ember-cli-string-utils');
var compact = require('lodash/compact');
var intersect = require('lodash/intersection');
var uniq = require('lodash/uniq');
var zipObject = require('lodash/zipObject');
var includes = require('lodash/includes');
var any = require('lodash/some');
var cloneDeep = require('lodash/cloneDeep');
var keys = require('lodash/keys');
var merge = require('lodash/merge');
var values = require('lodash/values');
var _ = require('ember-cli-lodash-subset');
var walkSync = require('walk-sync');
var SilentError = require('silent-error');
var CoreObject = require('core-object');
Expand Down Expand Up @@ -623,7 +614,7 @@ var Blueprint = CoreObject.extend({
};

var customTokens = this.fileMapTokens(options) || options.fileMapTokens || {};
return merge(standardTokens, customTokens);
return _.merge(standardTokens, customTokens);
},

/**
Expand All @@ -635,10 +626,10 @@ var Blueprint = CoreObject.extend({
*/
generateFileMap: function(fileMapVariables) {
var tokens = this._fileMapTokens(fileMapVariables);
var fileMapValues = values(tokens);
var fileMapValues = _.values(tokens);
var tokenValues = fileMapValues.map(function(token) { return token(fileMapVariables); });
var tokenKeys = keys(tokens);
return zipObject(tokenKeys,tokenValues);
var tokenKeys = _.keys(tokens);
return _.zipObject(tokenKeys,tokenValues);
},

/**
Expand Down Expand Up @@ -704,7 +695,7 @@ var Blueprint = CoreObject.extend({
var files = this.files();

// if we've defined targetFiles, get file info on ones that match
return targetFiles && targetFiles.length > 0 && intersect(files, targetFiles) || files;
return targetFiles && targetFiles.length > 0 && _.intersection(files, targetFiles) || files;
},

/**
Expand Down Expand Up @@ -839,7 +830,7 @@ var Blueprint = CoreObject.extend({
rawArgs: options.rawArgs
};

return merge({}, standardLocals, customLocals);
return _.merge({}, standardLocals, customLocals);
}.bind(this));
},

Expand Down Expand Up @@ -1202,7 +1193,7 @@ var Blueprint = CoreObject.extend({
printableProperties.forEachWithProperty(function(key) {
var value = this[key];
if (key === 'availableOptions') {
value = cloneDeep(value);
value = _.cloneDeep(value);
value.forEach(function(option) {
if (typeof option.type === 'function') {
option.type = option.type.name;
Expand Down Expand Up @@ -1322,7 +1313,7 @@ Blueprint.list = function(options) {
var blueprint = Blueprint.load(blueprintPath);
if (blueprint) {
var name = blueprint.name;
blueprint.overridden = includes(seen, name);
blueprint.overridden = _.includes(seen, name);
seen.push(name);

return blueprint;
Expand All @@ -1331,7 +1322,7 @@ Blueprint.list = function(options) {

return {
source: source,
blueprints: compact(blueprints)
blueprints: _.compact(blueprints)
};
});
};
Expand Down Expand Up @@ -1437,7 +1428,7 @@ function isFile(info) {
function isIgnored(info) {
var fn = info.inputPath;

return any(Blueprint.ignoredFiles, function(ignoredFile) {
return _.any(Blueprint.ignoredFiles, function(ignoredFile) {
return minimatch(fn, ignoredFile, { matchBase: true });
});
}
Expand All @@ -1454,7 +1445,7 @@ function isIgnored(info) {
function generateLookupPaths(lookupPaths) {
lookupPaths = lookupPaths || [];
lookupPaths = lookupPaths.concat(Blueprint.defaultLookupPaths());
return uniq(lookupPaths);
return _.uniq(lookupPaths);
}

/**
Expand Down
30 changes: 11 additions & 19 deletions lib/models/command.js
Expand Up @@ -9,15 +9,7 @@ var getCallerFile = require('get-caller-file');
var printableProperties = require('../utilities/printable-properties').command;
var printCommand = require('../utilities/print-command');
var Promise = require('../ext/promise');
var union = require('lodash/union');
var uniq = require('lodash/uniq');
var uniqBy = require('lodash/uniqBy');
var map = require('lodash/map');
var reject = require('lodash/reject');
var filter = require('lodash/filter');
var defaults = require('lodash/defaults');
var assign = require('lodash/assign');
var keys = require('lodash/keys');
var _ = require('ember-cli-lodash-subset');
var EOL = require('os').EOL;
var CoreObject = require('core-object');
var debug = require('debug')('ember-cli:command');
Expand Down Expand Up @@ -167,12 +159,12 @@ var Command = CoreObject.extend({
var extendedAvailableOptions = options && options.availableOptions || [];
var extendedAnonymousOptions = options && options.anonymousOptions || [];

this.anonymousOptions = union(this.anonymousOptions.slice(0), extendedAnonymousOptions);
this.anonymousOptions = _.union(this.anonymousOptions.slice(0), extendedAnonymousOptions);

// merge any availableOptions
this.availableOptions = union(this.availableOptions.slice(0), extendedAvailableOptions);
this.availableOptions = _.union(this.availableOptions.slice(0), extendedAvailableOptions);

var optionKeys = uniq(map(this.availableOptions, 'name'));
var optionKeys = _.uniq(_.map(this.availableOptions, 'name'));

optionKeys.map(this.mergeDuplicateOption.bind(this));

Expand Down Expand Up @@ -250,31 +242,31 @@ var Command = CoreObject.extend({
mergeDuplicateOption: function(key) {
var duplicateOptions, mergedOption, mergedAliases;
// get duplicates to merge
duplicateOptions = filter(this.availableOptions, { 'name': key });
duplicateOptions = _.filter(this.availableOptions, { 'name': key });

if (duplicateOptions.length > 1) {
// TODO: warn on duplicates and overwriting
mergedAliases = [];

map(duplicateOptions, 'aliases').map(function(alias) {
_.map(duplicateOptions, 'aliases').map(function(alias) {
alias.map(function(a) {
mergedAliases.push(a);
});
});

// merge duplicate options
mergedOption = assign.apply(null,duplicateOptions);
mergedOption = _.assign.apply(null,duplicateOptions);

// replace aliases with unique aliases
mergedOption.aliases = uniqBy(mergedAliases, function(alias) {
mergedOption.aliases = _.uniqBy(mergedAliases, function(alias) {
if (typeof alias === 'object') {
return alias[Object.keys(alias)[0]];
}
return alias;
});

// remove duplicates from options
this.availableOptions = reject(this.availableOptions, { 'name': key });
this.availableOptions = _.reject(this.availableOptions, { 'name': key });
this.availableOptions.push(mergedOption);
}
return this.availableOptions;
Expand Down Expand Up @@ -484,10 +476,10 @@ var Command = CoreObject.extend({
return null;
}

keys(parsedOptions).map(validateParsed.bind(this));
_.keys(parsedOptions).map(validateParsed.bind(this));

return {
options: defaults(commandOptions, this.settings),
options: _.defaults(commandOptions, this.settings),
args: parsedOptions.argv.remain
};
},
Expand Down
3 changes: 1 addition & 2 deletions lib/models/file-info.js
Expand Up @@ -8,7 +8,6 @@ var chalk = require('chalk');
var EditFileDiff = require('./edit-file-diff');
var EOL = require('os').EOL;
var isBinaryFile = require('isbinaryfile').sync;
var template = require('lodash/template');
var canEdit = require('../utilities/open-editor').canEdit;

function processTemplate(content, context) {
Expand All @@ -17,7 +16,7 @@ function processTemplate(content, context) {
interpolate: /<%=([\s\S]+?)%>/g,
escape: /<%-([\s\S]+?)%>/g
};
return template(content, options)(context);
return require('lodash.template')(content, options)(context);
}

function diffHighlight(line) {
Expand Down

0 comments on commit af961c5

Please sign in to comment.