Ответ 1
ОБНОВЛЕНИЕ: Если вы используете ember-cli
версию 0.1.0 или новее, этот хак, вероятно, не нужен. ember-cli
теперь символические файлы вместо копирования. Вы все еще можете улучшить производительность на окнах или медленных дисках.
Брокколи (используется ember-cli
) сохраняет свое временное состояние в файловой системе, поэтому он очень зависит от ввода-вывода файла. Попробуйте уменьшить количество файлов в каталогах public/
, vendor/
и bower_components/
. Все файлы внутри этих папок будут скопированы как минимум один раз за цикл восстановления. Размер и количество файлов в папках сильно влияют на производительность.
По сути, каждый раз, когда вы меняете файл, брокколи копирует файлы между многими каталогами внутри <ember app>/tmp/
. В случае с вашим bower_components/
dir, он, кажется, копирует каждый отдельный файл более одного раза. Это нужно сделать, потому что вы можете использовать app.import('some.js')
в своем Brocfile.js
, вы также можете @import "some.scss"
в файлах SASS/LESS. Невозможно узнать, какие файлы вам действительно нужны, поэтому он копирует их все.
Если вы удалите файлы, которые вам не нужны, от bower_components/
и vendor/
, вы увидите лучшее время сборки.
Пример реального мира
Если вы устанавливаете зависимость bower highcharts.com#3.0.5
, вы также получаете специальный подарок из 2829 файлов (198 МБ) в директории bower_components/
. Представьте себе, что ненужная файловая система читает и копирует, что там происходит.
Вот фрагмент моей очищенной структуры:
$ find bower_components -type f | grep highcharts
bower_components/highcharts.com/js/highcharts-more.src.js
bower_components/highcharts.com/js/highcharts.src.js
Обратите внимание, что остались только файлы .js
, я удалил все остальное. Это 2827 удаленных файлов. Highcharts - экстремальный пример, но большинство ваших зависимостей имеют в 5 раз больше файлов, чем вам действительно нужно.
Позитивное будущее впереди
Команда ember-cli
работает над улучшением работы базовой экосистемы брокколи. Работа уже началась, и некоторые приложения реального мира (с большими деревьями) видят улучшения производительности, сокращающие время восстановления от 4 секунд до 600 мс. Использование символических ссылок вместо копирования показывает резкие улучшения.
Для тех из нас, у кого есть приложения большого масштаба, множество дебаффов и многие члены команды плача, которым сейчас нужно решение:
Временное решение
Один из способов сохранить ваш bower_components/
чистый, - проверить зависимости в управлении версиями. Это позволяет использовать git clean
для упрощения работы с каталогом:
bower install —-save d3
git add -—force bower_components/d3/d3.js # force, because bower_components/ is gitignored
git commit -m "Added d3.js"
// Brocfile.js
app.import('bower_components/d3/d3.js');
Каждый раз, когда вы делаете bower install
, вы, скорее всего, получите все лишнее крушение в своей директории. git clean
легко удаляет файлы, не контролируемые версией:
git clean -f -d -x bower_components/
ember serve
После этого потребовалось одно перестроение (время для создания после изменения файла) с 20 секунд до 3,5 секунд (у нас есть довольно большое приложение).
Если вы идете по этому пути, не забывайте о дебатах колоды, необходимых для Ember:
bower_components/ember/ember.js
bower_components/ember/ember.prod.js
bower_components/ember-cli-shims/app-shims.js
bower_components/ember-cli-test-loader/test-loader.js
bower_components/ember-data/ember-data.js
bower_components/ember-data/ember-data.prod.js
bower_components/ember-load-initializers/ember-load-initializers.js
bower_components/ember-resolver/dist/modules/ember-resolver.js
bower_components/jquery/dist/jquery.js
bower_components/loader/loader.js
bower_components/handlebars/handlebars.js
bower_components/handlebars/handlebars.runtime.js
Здесь команда git для вас:
bower install
git add -f bower_components/ember/ember.js bower_components/ember/ember.prod.js bower_components/ember-cli-shims/app-shims.js bower_components/ember-cli-test-loader/test-loader.js bower_components/ember-data/ember-data.js bower_components/ember-data/ember-data.prod.js bower_components/ember-load-initializers/ember-load-initializers.js bower_components/ember-resolver/dist/modules/ember-resolver.js bower_components/jquery/dist/jquery.js bower_components/loader/loader.js bower_components/handlebars/handlebars.js bower_components/handlebars/handlebars.runtime.js
git commit -m "Added ember-cli dependencies"
git clean -f -d -x bower_components/