Created
January 13, 2015 19:51
-
-
Save j15e/83275f0e91c24bf3f711 to your computer and use it in GitHub Desktop.
app details ember-cli perf regression
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Our setup details below. Our Brocfile.js is quite custom so there might be an issue with something there. | |
| ``` | |
| app: 373 files, 1.4MB total | |
| bower_components: 1075 files, 14MB total | |
| node_modules: 39 000 files, 184MB | |
| vendor: 10 files, 193KB | |
| ``` | |
| **package.json** | |
| ``` | |
| { | |
| "name": "x", | |
| "version": "0.0.0", | |
| "private": true, | |
| "directories": { | |
| "doc": "doc", | |
| "test": "test" | |
| }, | |
| "scripts": { | |
| "start": "ember server", | |
| "install": "bower install --config.interactive=false", | |
| "build": "ember build", | |
| "build-deployment": "ember build --environment=production", | |
| "test": "ember test --environment=test" | |
| }, | |
| "repository": "https://github.com/stefanpenner/ember-cli", | |
| "engines": { | |
| "node": ">= 0.10.5" | |
| }, | |
| "author": "", | |
| "license": "MIT", | |
| "devDependencies": { | |
| "broccoli-asset-rev": "^2.0.0", | |
| "broccoli-ember-hbs-template-compiler": "^1.7.0", | |
| "ember-cli": "0.1.5", | |
| "ember-cli-content-security-policy": "0.3.0", | |
| "ember-cli-dependency-checker": "0.0.7", | |
| "ember-cli-inject-live-reload": "^1.3.0", | |
| "ember-cli-qunit": "0.1.2", | |
| "ember-data": "1.0.0-beta.11", | |
| "express": "^4.10.2", | |
| "glob": "^4.0.6", | |
| "body-parser": "^1.9.2", | |
| "bower": "^1.3.12", | |
| "broccoli-autoprefixer": "^1.1.0", | |
| "broccoli-file-creator": "^0.1.0", | |
| "broccoli-gzip": "^0.2.0", | |
| "broccoli-merge-trees": "^0.2.1", | |
| "broccoli-sass": "^0.3.3", | |
| "broccoli-static-compiler": "^0.2.1", | |
| "connect-restreamer": "^1.0.1", | |
| "dotenv": "^0.4.0", | |
| "ember-cli-pagination": "^0.5.2", | |
| "http-proxy": "^1.6.2", | |
| "originate": "0.1.5", | |
| "phantomjs": "^1.9.12", | |
| "qd-ajax": "git://github.com/hooktstudios/qd-ajax.git#master" | |
| } | |
| } | |
| ``` | |
| **bower.json** | |
| ``` | |
| { | |
| "name": "x", | |
| "dependencies": { | |
| "ember": "1.7.1", | |
| "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3", | |
| "ember-cli-test-loader": "rjackson/ember-cli-test-loader#0.0.4", | |
| "ember-data": "v1.0.0-beta.11", | |
| "ember-easyForm": "http://builds.dockyard.com.s3.amazonaws.com/ember-easyForm/release/daily/20140207/ember-easyForm.js", | |
| "ember-flash-message": "https://raw.githubusercontent.com/ryanto/ember-flash-message/308adc8288844eb918b869d3adae6f1d1b913260/flash-message.js", | |
| "ember-i18n": "jamesarosen/ember-i18n#52a3b55ac95aa79b8810cca05588ed5638bae299", | |
| "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2", | |
| "ember-qunit": "~0.1.8", | |
| "ember-qunit-notifications": "0.0.4", | |
| "ember-resolver": "~0.1.11", | |
| "handlebars": "~1.3.0", | |
| "html5shiv": "~3.7.2", | |
| "ic-ajax": "~2.0.1", | |
| "jquery": "^1.11.1", | |
| "jquery-file-upload": "~9.7.0", | |
| "loader.js": "stefanpenner/loader.js#1.0.1", | |
| "mediaelement": "~2.16.1", | |
| "moment": "~2.8.3", | |
| "normalize-scss": "~3.0.1", | |
| "numeral": "~1.5.3", | |
| "qunit": "~1.15.0", | |
| "rangy-official": "~1.3.0-alpha.20140827", | |
| "route-recognizer": "~0.1.1", | |
| "video.js": "~4.11.3", | |
| "videojs-vimeo": "eXon/videojs-vimeo#54f88a4de0e24ef77c1a8287462db64e2f6f6147", | |
| "videojs-youtube": "~1.2.7" | |
| }, | |
| "resolutions": { | |
| "video.js": "~4.11.3", | |
| "route-recognizer": "~0.1.1" | |
| } | |
| } | |
| ``` | |
| **Brocfile.js** | |
| ``` | |
| /* global require, module */ | |
| var glob = require('glob'); | |
| var path = require('path'); | |
| var mergeTrees = require('broccoli-merge-trees'); | |
| var compileSass = require('broccoli-sass'); | |
| var assetRev = require('broccoli-asset-rev'); | |
| var pickFiles = require('broccoli-static-compiler'); | |
| var autoprefixer = require('broccoli-autoprefixer'); | |
| var gzip = require('broccoli-gzip'); | |
| var writeFile = require('broccoli-file-creator'); | |
| var appDotEnv = require('./config/app-dotenv'); | |
| var EmberApp = require('ember-cli/lib/broccoli/ember-app'); | |
| var app = new EmberApp({ | |
| name: require('./package.json').name, | |
| // Disabled here to avoid double fingerprints | |
| fingerprint: { | |
| enabled: false | |
| }, | |
| vendorFiles: { | |
| polyfills: 'vendor/polyfills.js' | |
| }, | |
| sourcemaps: { | |
| enabled: false, | |
| extensions: [] | |
| } | |
| }); | |
| app.import('vendor/raven.js'); | |
| app.import({ | |
| development: 'bower_components/ember-data/ember-data.js', | |
| production: 'bower_components/ember-data/ember-data.prod.js' | |
| }); | |
| app.import({ | |
| development: 'bower_components/moment/min/moment-with-locales.js', | |
| production: 'bower_components/moment/min/moment-with-locales.min.js' | |
| }); | |
| app.import({ | |
| development: 'bower_components/video.js/dist/video-js/video-js.css', | |
| production: 'bower_components/video.js/dist/video-js/video-js.min.css' | |
| }) | |
| app.import({ | |
| development: 'bower_components/video.js/dist/video-js/video.dev.js', | |
| production: 'bower_components/video.js/dist/video-js/video.js' | |
| }); | |
| app.import({ | |
| development: 'bower_components/videojs-youtube/src/youtube.js', | |
| production: 'bower_components/videojs-youtube/dist/vjs.youtube.js' | |
| }) | |
| app.import({ | |
| development: 'bower_components/videojs-vimeo/src/media.vimeo.js', | |
| production: 'bower_components/videojs-vimeo/vjs.vimeo.js' | |
| }) | |
| app.import('bower_components/ember-i18n/lib/i18n.js'); | |
| app.import('bower_components/jquery-file-upload/js/vendor/jquery.ui.widget.js'); | |
| app.import('bower_components/jquery-file-upload/js/jquery.iframe-transport.js'); | |
| app.import('bower_components/jquery-file-upload/js/jquery.fileupload.js'); | |
| app.import('vendor/transloadit.js'); | |
| app.import('vendor/transloadit.fr.js'); | |
| app.import('vendor/jquery.payment.js'); | |
| app.import('vendor/jquery.number.js'); | |
| app.import('vendor/ios-drag-drop.js'); | |
| app.import('bower_components/ember-flash-message/index.js'); | |
| app.import('bower_components/ember-easyForm/index.js'); | |
| app.import('bower_components/numeral/numeral.js'); | |
| app.import({ | |
| development: 'bower_components/rangy-official/rangy-core.js', | |
| production: 'bower_components/rangy-official/rangy-core.min.js' | |
| }); | |
| // Use `app.import` to add additional libraries to the generated | |
| // output files. | |
| // | |
| // If you need to use different assets in different | |
| // environments, specify an object as the first parameter. That | |
| // object's keys should be the environment name and the values | |
| // should be the asset to use in that environment. | |
| // | |
| // If the library that you are including contains AMD or ES6 | |
| // modules that you would like to import into your application | |
| // please specify an object with the list of modules as keys | |
| // along with the exports of each module as its value. | |
| // Add clients custom styles | |
| var clientTrees = glob.sync('clients/**/styles.scss').map(function(file) { | |
| var dirname = path.dirname(file), | |
| clientName = dirname.split('/').pop(), | |
| options = {}, | |
| tree; | |
| if (app.env === 'production') options = { outputStyle: 'compressed' }; | |
| tree = compileSass([dirname], 'styles.scss', 'assets/' + clientName + '.css', options); | |
| return tree; | |
| }); | |
| var videojsAssets = pickFiles('bower_components/video.js/dist/video-js', { | |
| srcDir: '/', | |
| files: ['font/vjs.*', 'video-js.swf'], | |
| destDir: '/assets' | |
| }); | |
| var fonts = pickFiles('app/fonts', { | |
| srcDir: '/', | |
| destDir: '/assets' | |
| }); | |
| var singleVendors = pickFiles('vendor', { | |
| srcDir: '/', | |
| files: ['es5-shim.js', 'backend.js'], | |
| destDir: '/assets' | |
| }) | |
| var html5shiv = pickFiles('bower_components/html5shiv/dist', { | |
| srcDir: '/', | |
| files: ['html5shiv.js'], | |
| destDir: '/assets' | |
| }) | |
| var tree = mergeTrees(clientTrees.concat(app.toTree(), videojsAssets, fonts, singleVendors, html5shiv)); | |
| // Add fingerprints & gziping | |
| if (app.env === 'production') { | |
| var options = { | |
| generateRailsManifest: true, | |
| extensions: ['js', 'css', 'png', 'jpg', 'gif', 'eot', 'svg', 'ttf', 'woff'], | |
| replaceExtensions: ['html', 'js', 'css', 'hbs'] | |
| }; | |
| // Temporary fix for broccoli-asset-rev#18 & videojs vendor | |
| options.exclude = [ | |
| 'vjs.eot', | |
| 'vjs.svg', | |
| 'vjs.ttf', | |
| 'vjs.woff', | |
| 'video-js.swf' | |
| ]; | |
| if(appDotEnv.ASSET_HOST){ | |
| options.prepend = 'https://' + appDotEnv.ASSET_HOST + '/'; | |
| } | |
| tree = assetRev(tree, options); | |
| gzipOptions = { | |
| extensions: ['js', 'css', 'svg'], | |
| keepUncompressed: true | |
| } | |
| tree = gzip(tree, gzipOptions) | |
| } | |
| tree = autoprefixer(tree); | |
| // Robots.txt | |
| var robotsSrc = 'User-agent: *'; | |
| if(appDotEnv.ROBOTS_DISALLOW === 'true') { | |
| robotsSrc += '\nDisallow: /'; | |
| } else { | |
| robotsSrc += '\nAllow: /'; | |
| } | |
| var robots = writeFile('/robots.txt', robotsSrc); | |
| tree = mergeTrees([tree, robots]); | |
| module.exports = tree; | |
| ``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment