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 22, 2016
1 parent 5c83db5 commit 4e58b9e
Show file tree
Hide file tree
Showing 40 changed files with 78 additions and 85 deletions.
1 change: 1 addition & 0 deletions bin/ember
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
5 changes: 3 additions & 2 deletions lib/commands/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ 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 lodash = require('ember-cli-lodash-subset');
var merge = lodash.merge;
var reject = lodash.reject;
var EOL = require('os').EOL;
var SilentError = require('silent-error');

Expand Down
2 changes: 1 addition & 1 deletion lib/commands/help.js
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
21 changes: 11 additions & 10 deletions lib/models/blueprint.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,17 @@ 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 lodash = require('ember-cli-lodash-subset');
var compact = lodash.compact;
var intersect = lodash.intersection;
var uniq = lodash.uniq;
var zipObject = lodash.zipObject;
var includes = lodash.includes;
var any = lodash.any;
var cloneDeep = lodash.cloneDeep;
var keys = lodash.keys;
var merge = lodash.merge;
var values = lodash.values;
var walkSync = require('walk-sync');
var SilentError = require('silent-error');
var CoreObject = require('core-object');
Expand Down
30 changes: 11 additions & 19 deletions lib/models/command.js
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
9 changes: 5 additions & 4 deletions lib/models/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ var findup = require('find-up');
var resolve = Promise.denodeify(require('resolve'));
var fs = require('fs-extra');
var existsSync = require('exists-sync');
var find = require('lodash/find');
var assign = require('lodash/assign');
var forOwn = require('lodash/forOwn');
var merge = require('lodash/merge');
var lodash = require('ember-cli-lodash-subset');
var find = lodash.find;
var assign = lodash.assign;
var forOwn = lodash.forOwn;
var merge = lodash.merge;
var debug = require('debug')('ember-cli:project');
var AddonDiscovery = require('../models/addon-discovery');
var AddonsFactory = require('../models/addons-factory');
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/addon-install.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

var Task = require('../models/task');
var SilentError = require('silent-error');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;
var getPackageBaseName = require('../utilities/get-package-base-name');
var Promise = require('../ext/promise');

Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/generate-from-blueprint.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var Promise = require('../ext/promise');
var Blueprint = require('../models/blueprint');
var Task = require('../models/task');
var parseOptions = require('../utilities/parse-options');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;

module.exports = Task.extend({
blueprintFunction: 'install',
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/git-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ var exec = Promise.denodeify(require('child_process').exec);
var path = require('path');
var pkg = require('../../package.json');
var fs = require('fs');
var template = require('lodash/template');

var gitEnvironmentVariables = {
GIT_AUTHOR_NAME: 'Tomster',
Expand All @@ -17,6 +16,7 @@ var gitEnvironmentVariables = {

module.exports = Task.extend({
run: function(commandOptions) {
var template = require('lodash.template');
var chalk = require('chalk');
var ui = this.ui;

Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/install-blueprint.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ var isGitRepo = require('is-git-url');
var temp = require('temp');
var childProcess = require('child_process');
var path = require('path');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;

// Automatically track and cleanup temp files at exit
temp.track();
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/server/express-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ var EventEmitter = require('events').EventEmitter;
var chalk = require('chalk');
var fs = require('fs');
var existsSync = require('exists-sync');
var debounce = require('lodash/debounce');
var debounce = require('ember-cli-lodash-subset').debounce;
var mapSeries = require('promise-map-series');
var Promise = require('../../ext/promise');
var Task = require('../../models/task');
Expand Down
5 changes: 2 additions & 3 deletions lib/utilities/markdown-color.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ var fs = require('fs');

var chalk = require('chalk');
var SilentError = require('silent-error');
var isArray = require('lodash/isArray');
var merge = require('lodash/merge');
var merge = require('ember-cli-lodash-subset').merge;

var colors = ['red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'black', 'white', 'grey', 'gray'];
var backgroundColors = ['bgRed', 'bgGreen', 'bgBlue', 'bgCyan', 'bgMagenta', 'bgYellow', 'bgWhite', 'bgBlack'];
Expand Down Expand Up @@ -128,7 +127,7 @@ MarkdownColor.prototype.generateTokens = function (renderer) {
MarkdownColor.prototype.renderStylesFactory = renderStylesFactory;
function renderStylesFactory(renderer, styleNames) {
var styles;
if (isArray(styleNames)) {
if (Array.isArray(styleNames)) {
styles = styleNames.map(checkStyleName.bind(null, renderer));
} else {
styles = [checkStyleName(renderer, styleNames)];
Expand Down
4 changes: 1 addition & 3 deletions lib/utilities/parse-options.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
'use strict';

var reduce = require('lodash/reduce');

module.exports = function parseOptions(args) {
return reduce(args, function(result, arg) {
return args.reduce(function(result, arg) {
var parts = arg.split(':');
result[parts[0]] = parts.slice(1).join(':');
return result;
Expand Down

0 comments on commit 4e58b9e

Please sign in to comment.