Как лучше всего контролировать загрузку нескольких файлов JavaScript в ASP.NET? - PullRequest
1 голос
/ 09 апреля 2009

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2009

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

например.,

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

ПРИМЕЧАНИЕ. Вы можете использовать .RegisterClientScriptBlock(), если хотите иметь блок JS вместо отдельного файла.

Однако, это выводит тег script вскоре после открытия тега формы страницы. Чтобы вывести ваш скрипт ближе к концу страницы (т. Е. Непосредственно перед закрывающим тега формы), используйте методы .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, чтобы установить для свойства Text отправителя строку, возвращаемую статическим свойством класса myControl.

0 голосов
/ 09 апреля 2009

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

Yahoo имеет много информации о производительности скриптов, совет по этому поводу также включен в расширение YSlow для Firefox, которое расширяет firebug .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...