2009-04-09 3 views
1

Я смотрю на улучшение производительности загрузки страницы и время рендеринга довольно сложного сайта ASP.NET.Как лучше всего контролировать загрузку нескольких файлов javascript в ASP.NET?

Из-за использования множества элементов управления ASP.NET, которые сами включают файлы javascript (просто используя тег script), определенные страницы загружают один и тот же javascript до 10 раз. Кроме того, некоторый javascript должен быть загружен на ранней стадии страницы, в то время как другие лучше включены в конце. Некоторым я хотел бы динамически загружать после события onload вместо явного включения в страницу.

То, о чем я думаю, это позволить всем различным элементам управления регистрировать их потребность в конкретном файле javascript в центральном месте, что, в свою очередь, управляет генерацией сценариев-тегов (таким образом, избегая дубликатов) и где они вставлены в сгенерированный выход. Это также упростит динамический переход между мини-и полными файлами javascript (например, добавление debug = true в строку запроса приведет к загрузке файлов по filename.debug.js вместо filename.compressed.js).

Используя это решение, также возможно, чтобы он в основном генерировал массив имен javascript, который используется пользовательской функцией onload javascript для динамической загрузки сценариев.

Каков наилучший способ для этого? Используйте или расширьте что-то вроде ScriptManager, создайте собственный элемент управления, переопределите объект Page?

ответ

1

В методе Page_Load элемента управления вы можете зарегистрировать свой javascript для вывода (после подтверждения того, что он еще не зарегистрирован).

Е.Г.,

ClientScriptManager script = Page.ClientScript; 
if (!script.IsClientScriptIncludeRegistered("AlertHello")) 
{ 
    script.RegisterClientScriptInclude("AlertHello", "Public/AlertHello.js"); 
} 

Примечание: Вы можете использовать .RegisterClientScriptBlock(), если вы хотите иметь блок JS вместо отдельного файла.

Однако это выводит тег скрипта вскоре после открытия тега формы страницы. Чтобы вывести свой скрипт ближе к концу страницы (то есть непосредственно перед закрытием тега формы), используйте методы .RegisterStartupScript().

ClientScriptManager script = Page.ClientScript; 
if (!script.IsStartupScriptRegistered("StartupAlert")) 
{ 
    script.RegisterStartupScript(this.GetType(), "StartupAlert", 
      "<script type='text/javascript' src='Public/Alert.js'></script>"); 
} 

Предположив, что это абсолютно необходимо в определенном месте, однако, вы можете добавить статический (или «общий» в VB.NET) только для чтения свойство, которое возвращает тег сценария и логическое свойство, указывает, следует ли выводить тег скрипта. В этом случае в вашем ASPX, вы могли бы сделать что-то вроде ...

<body> 
    <!-- any place --> 
    <uc1:myControl ID="myControl1" runat="server" jsOutput="False" /> 
    <!-- elsewhere --> 
    <asp:Literal ID="litJS" runat="server" OnLoad="litJS_Load" /> 
</body> 

Запрограммируйте litJS_Load установить свойство текста отправителя строки, возвращаемой статическое свойство класса MyControl.

0

Как упоминалось, используя регистрацию скрипта с помощью событий «Элементы управления», это хорошая идея, если они скомпилированы элементы управления, вы также можете ссылаться на них как на встроенный ресурс ... Если вы используете ASP.Net Ajax, вы можете используйте ScriptManager, который может объединять скрипты внутри вашей страницы в один непрерывный блок для загрузки.

Yahoo has a lot of information относительно производительности скрипта также, совет для этого также включен в расширение YSlow для Firefox, которое расширяет firebug.

Помимо наличия сценариев в качестве внешнего ресурса, вы должны включить сжатие на сервере, что может уменьшить загрузку различных сценариев. Не говоря уже о включении скриптов.

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