Стратегия для файлов JavaScript в Azure - PullRequest
3 голосов
/ 18 июля 2011

Я работаю над стратегией хранения и развертывания файлов JavaScript в Azure (веб-роль ASP.NET). Мои требования:

  1. Для использования уменьшенных версий в рабочей среде
  2. Использованиеисходные версии (т.е. не минифицированные) локальные версии в среде разработки (для упрощения отладки)
  3. Простой процесс сборки / развертывания (VS2010)
  4. Простой процесс обновления (время от времени файлы меняютсявремя)

Здесь большое обсуждение Visual Studio 2010: публиковать уменьшенные файлы javascript вместо оригинальных , однако это не учитывает преимущества, которые Azure может предложить или работаетс несколькими экземплярами.

Я подумываю развернуть мои минимизированные файлы JavaScript для хранения больших двоичных объектов и использовать их в рабочей версии.Они будут храниться с большим Max-age Cache Control для кэширования на стороне клиента, а имена файлов будут хранить версию (так что я могу легко обновить).Я приветствую отзывы об этой стратегии.

Таким образом, при разработке визуализированный HTML будет ссылаться на локальный файл сценария, а именно:

<script src="Scripts/myjavascript-0.0.1.js" type="text/javascript"></script>

Но в Производстве результат должен использовать следующее для ссылкив минимизированную версию.

<script src="http://myblob.blob.core.windows.net/Scripts/myjavascript-0.0.1.js" type="text/javascript"></script>

Мой главный вопрос заключается в том, как лучше всего добиться автоматического переключения путей при разработке и производстве.Или пользовательский обработчик будет нормальным маршрутом (и если да, то как это будет работать - я не хочу, чтобы каждый экземпляр перезагружался с большого двоичного объекта при каждом запросе).

Ответы [ 4 ]

4 голосов
/ 19 июля 2011

Относительно № 1 и 2:

Я обсуждаю стратегию для этого здесь . Основная идея состоит в том, чтобы использовать вспомогательную функцию для создания тега сценария. Функция может создать ссылку на файлы отладки в режиме отладки, а в противном случае - на минимизированные файлы (что также облегчает локальное тестирование с минимизированными файлами). Эта же функция может обрабатывать добавление версии в путь для аннулирования кэша и т. Д.

Относительно № 3:

Добавьте минификацию в качестве шага после сборки. Я добавил это в мой csproj (который является просто файлом msbuild), который использует yui-компрессор:

<Target Name="AfterBuild" Condition="'$(Configuration)' != 'Debug'">
  <!-- remove previous minified files -->
  <Exec Command="del $(ProjectDir)Styles\*-min.css" />
  <Exec Command="del $(ProjectDir)Scripts\*-min.js" />
  <!-- Minify javascript and css, unless we're in Debug -->
  <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .css$:-min.css --charset utf-8 $(ProjectDir)Styles\*.css" />
  <Exec Command="java -jar $(ProjectDir)..\yuicompressor\build\yuicompressor-2.4.6.jar -o .js$:-min.js --charset utf-8 $(ProjectDir)Scripts\*.js" />
</Target>

Это создаст уменьшенные файлы *-min.js и *-min.css в ~ \ Scripts и ~ \ Styles соответственно.

Предупреждение B / c об ошибке в версии 2.4.6 компрессора yui, вышеуказанное не будет работать, если есть только один .css или .js файл в каталоге.

2 голосов
/ 19 июля 2011

Ваш основной план звучит хорошо.Это даже позволит вам использовать CDN без особых усилий (вам просто нужно заменить путь к вашей учетной записи хранения на путь к CDN).

Не думаю, что попробуюслишком много думать об этом.Как и предполагалось в другом месте, контроль - это хороший путь.Просто попросите этот элемент управления найти параметр web.config, чтобы получить корневой каталог для ваших сценариев и добавить его к пути сценария (в вашей локальной версии этот параметр будет пустым).Чтобы убедиться, что вам не нужно возиться с изменением конфигурации для каждого развертывания, я бы использовал преобразования конфигурации , так что это просто происходит автоматически.

1 голос
/ 19 июля 2011

Возможно, вы захотите проверить проект помощников Windows Azure CDN.Он должен делать почти все, что вы просите.Вы можете установить в конфигурации, если вы хотите, чтобы ваши минимизированные файлы автоматически развертывались в хранилище больших двоичных объектов или оставались в веб-ролях.

1 голос
/ 18 июля 2011

Чтобы динамически переключать URL-адреса ссылок на скрипты при запуске из Azure, вы должны поместить все блоки скриптов в usercontrol и использовать этот usercontrol на всех страницах. Не следует помещать ссылки на скрипты непосредственно на страницы aspx / master, вместо этого поместите их в ascx и используйте ascx. Это помогает хранить обычные ссылки на скрипты в одном файле, и когда вам нужно внести изменения, просто измените ascx. Другой подход заключается в использовании моего httphandler, который изменяет URL-адрес сценариев с относительного на абсолютный, чтобы упростить загрузку сценариев из домена, отличного от того, с которого работает сайт. Конечно, вы можете использовать его для добавления абсолютного URL вашего сайта Azure. http://omaralzabir.com/loading_static_content_in_asp_net_pages_from_different_domain_for_faster_parallel_download/

...