Как сократить время до данных после первого нажатия в браузере - PullRequest
2 голосов
/ 08 сентября 2008

У нас есть пара крупных решений, каждое из которых имеет около 40 отдельных проектов (библиотеки классов и вложенные веб-сайты). Для полной перестройки всего требуется около 2 минут.

Пара спецификаций в системе:

  • Visual Studio 2005, C #
  • Основной проект - это проект веб-приложения
  • Мы используем внутренний веб-сервер VS
  • Мы широко используем пользовательские элементы управления, вплоть до пользовательского элемента управления, который содержит текстовое поле
  • У нас есть несколько встроенных веб-проектов, которые позволяют нам выполнять частичное развертывание
  • Около 120 пользовательских элементов управления
  • около 200 000 строк кода (включая HTML)
  • Мы используем Source Safe

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

Этот первый удар занимает около 1 минуты 15 секунд, прежде чем данные вернутся.

Чтобы ускорить процесс, я немного поэкспериментировал с Ram-дисками, в частности изменив атрибут в web.config, установив tempDirectory для моего Ram-диска. Это немного ускоряет процесс. Интересно, что это полностью исключило ВСЕ доступ к IO при первом обращении из браузера.

Примечания
Мы никогда не делаем полную компиляцию во время разработки, только частичную. Например, библиотека классов, над которой работает, компилируется, а затем компилируется основной сайт, который затем копирует двоичные файлы из библиотеки классов в каталог bin.

Я понимаю, что движку asp.net необходимо проанализировать все файлы ascx / aspx после изменения критических файлов (например, bin dir), но я не понимаю, почему он должен это делать, когда только 1037 * одна библиотека dll была изменена.

Итак, кто-нибудь знает способ: Подсегментные решения, обеспечивающие более быструю настройку первого попадания или точную настройку в файлах конфигурации или в других областях.

И, опять же: я говорю только о разработке, а не о производственном развертывании, поэтому использование предварительно скомпилированного параметра не применимо.

Спасибо, Руван

1 Ответ

2 голосов
/ 08 сентября 2008

Wow, 120 пользовательских элементов управления, некоторые из которых содержат только один TextBox? Это звучит как много кода.

Когда вы изменяете проект библиотеки, все проекты, которые зависят от этого проекта библиотеки, затем необходимо перекомпилировать, а также каждый проект, который зависит от них, и т. Д., Вплоть до стека. Вы знаете, что вы внесли в функцию только одну строку, которая не влияет на все ваши пользовательские элементы управления, но компилятор этого не знает.

И, как вы, вероятно, знаете, файлы ASPX и ASCX компилируются только при первом обращении к веб-приложению.

Возможное увеличение скорости может быть достигнуто путем замены ваших файлов ASCX на Composite Controls вместо этого, внутри другого Библиотечного проекта. Затем они будут скомпилированы во время компиляции (если хотите), а не во время загрузки веб-приложения.

...