2013-10-15 3 views
3

Мы запускаем сборку нашего приложения с использованием Dojo 1.9, а сама сборка занимает слишком много времени для завершения. Где-то по 10-15 минут.Ускорение сборки Dojo

Наше приложение не является огромным ни в коем случае. Возможно 150K LOC. Ничего особенного. Кроме того, при запуске этой сборки локально с использованием узла требуется менее минуты.

Однако мы запускаем сборку на сервере RHEL с большим количеством пространства и памяти, используя Rhino. Кроме того, задачи вызывают через Ant.

Мы также используем Shrinksafe в качестве механизма сжатия, что также может быть проблемой. Кажется, что Shrinksafe сжимает всю библиотеку Dojo (которая огромна) при каждом запуске сборки, что кажется глупым.

Есть ли что-нибудь, что мы можем сделать, чтобы ускорить это? Или что-то, что мы делаем неправильно?

+0

Узел намного быстрее, чем использование Rhino для нашей сборки, а также устанавливает узел на вашем сервере? – Kryptic

+0

Создает ли ваш код всю библиотеку додзё (dojo, dojox и dijit) при каждом создании? Мне кажется смешным. Знаете ли вы об этом? – sma

+0

Все это входит в однослойный файл, и включены только модули dojo, которые используются. Поэтому вам нужно всего лишь ссылаться на этот файл на производстве. – Kryptic

ответ

2

Да, это чрезмерно. Я никогда не видел сборку так долго, даже на процессоре Atom.

В дополнение к предыдущему предложению использовать Node.js, а не Rhino (безусловно, самый большой убийца производительности сборки), если весь ваш код правильно вложен в слои, вы можете установить optimize на пустую строку (дон 't optimize) и layerOptimize - "closure" (Closure Compiler) в вашем профиле сборки, так что только слои будут проходить через оптимизатор.

Кроме этого, вы должны удостовериться, что в системе, в которой вы выполняете сборку, нет ничего плохого. (Создавать файлы на NAS с медленной связью? Busted CPU fan заставляет процессоры разгоняться? Древний процессор с только одним ядром? Недостаточно/плохой RAM? Кто-то другой решил установить на нем сервер TF2 и не сказал вам?)

+0

Спасибо за ответ. Если бы я сделал это с настройками оптимизации, то разве это не означает, что вся библиотека Dojo будет несжата во время выполнения? Кроме того, это тоже плохая вещь? Поскольку теоретически любой файл Dojo, который я запрашиваю, должен быть в моем слое, не так ли? – sma

+0

Модули, которые не в слоях, не будут оптимизированы. Если модули Dojo используются в слоях, они будут оптимизированы в этих слоях. Единственная полуоправдаемая причина, по которой все файлы создаются системой сборки для начала, заключается в том, что вы можете условно требовать модулей во время выполнения, чтобы они существовали, чтобы избежать сбоя приложения, - но пока вы знаете, что все ваши модули построены, тогда это не имеет значения. –

+0

Благодарим за отзыв. Имеет смысл, и это ускорило мою сборку. Узел не может быть и речи, но я переключился на Closure для оптимизации (в отличие от Shrinksafe), и теперь я только сжимаю свой слой. – sma

Смежные вопросы