Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11656
Последний выпуск: 19.06.2015

ASP - Задание области определения объектов

Область определения объекта определяет сценарии, которые могут использовать объект. По умолчанию созданный экземпляр объекта имеет в качестве области определения страницу. Любая команда сценария на той же странице ASP может использовать такой объект; объект освобождается при завершении обработки запроса файлом .asp. Для большинства объектов рекомендуется задавать страницу в качестве области определения. Можно изменить область определения объекта, чтобы сделать его доступным сценариям на других страницах. Этот раздел объясняет, как работать с объектами со страницей в качестве области определения и как изменить область определения объектов.

Использование объектов со страничной областью определения

Объект, созданный с помощью Server.CreateObject или тега HTML <OBJECT> на странице ASP существует, пока существует страница. Объект доступен для любой команды сценария на этой странице и освобождается при завершении обработки страницы. Этот объект имеет страницу в качестве области определения, или времени жизни.

Создание объектов в циклах

Обычно следует избегать создания объектов внутри цикла. Если необходимо создавать объекты в цикле, следует вручную освобождать ресурсы, используемые объектом:

<%
  Dim objAd
  For i = 0 To 1000
    Set objAd = Server.CreateObject("MSWC.AdRotator")
    .
    .
    .
    objAd.GetAdvertisement
    .
    .
    .
    Set objAd = Nothing
  Next
%>

Присвоение объекту сеанса в качестве области определения

Объект с областью определения — сеансом создается для каждого нового сеанса в приложении и освобождается при завершении сеанса; для каждого активного сеанса существует один объект. Сеанс в качестве области определения используется для объектов, которые используются в нескольких сценариях, но влияют на сеанс одного пользователя. Объекты должны получать сеанс в качестве области определения, только если это необходимо. Если в качестве области определения используется сеанс, необходимо знать потоковую модель, обеспечиваемую объектом, поскольку потоковая модель влияет на производительность и контекст безопасности объекта. Дополнительные сведения см. в подразделе Дополнительные сведения: Вопросы производительности в этом разделе.

Чтобы назначить объекту сеанс в качестве области определения, сохраните объект во встроенном объекте ASP Session . Можно использовать или тег HTML <OBJECT> в файле Global.asa, или метод Server.CreateObject на странице ASP для создания экземпляра объекта, имеющего сеанс в качестве области определения.

В файле Global.asa file можно использовать тег <OBJECT>, расширенный атрибутом RUNAT (который должен иметь значение SERVER) и атрибутом SCOPE (его значение должно быть равно Session). Приведенный ниже пример создает экземпляр объекта Browser Type компонента Browser Capabilities, имеющий областью определения сеанс:

<OBJECT RUNAT=SERVER SCOPE=Session ID=MyBrowser PROGID="MSWC.BrowserType">
</OBJECT>

Сохранив объект в объекте Session, можно получить доступ к объекту с любой страницы приложения. приведенный ниже оператор использует экземпляр объекта, созданный с помощью тега <OBJECT> в предыдущем примере:

<%= If MyBrowser.browser = "IE"  and  MyBrowser.majorver >= 4  Then . . .%>

Для хранения объекта во встроенном объекте Session на странице ASP можно также использовать метод Server.CreateObject. Приведенный ниже пример сохраняет экземпляр объекта Browser Type в объекте Session.

<% Set Session("MyBrowser") = Server.CreateObject("MSWC.BrowserType") %> 

Чтобы отобразить сведения об обозревателе в другом файле .asp, сначала извлеките экземпляр объекта BrowserType, хранимый в объекте Session, а затем вызовите метод Browser для отображения имени обозревателя.

<% Set MyBrowser = Session("MyBrowser") %>
<%= MyBrowser.browser %>

ASP не создает экземпляр объекта, который объявляется тегом <OBJECT>, пока на объект не ссылается команда сценария из файла .asp. Метод Server.CreateObject сразу создает объект. Таким образом, тег <OBJECT> предлагает для объектов с областью определения —сеансом лучшую масштабируемость, чем метод Server.CreateObject.

Присвоение объекту приложения в качестве области определения

Объект с областью определения — приложением является экземпляром объекта, который создается при запуске приложения. Этот объект используется совместно всеми клиентскими запросами. Некоторые вспомогательные объекты, например объекты компонента Page Counter, могут обеспечить лучшее быстродействие при назначении им приложения в качестве области определения, но обычно следует использовать альтернативы, представленные в следующем разделе. Кроме того, потоковая модель оказывавает влияние на быстродействие и контекст безопасности объекта (см. Дополнительные сведения: Вопросы производительности в этом разделе).

Чтобы назначить объекту приложение в качестве области определения, сохраните объект во встроенном объекте ASP Application. Можно использовать или тег <OBJECT> в файле Global.asa, или метод Server.CreateObject на странице ASP для создания экземпляра объекта, имеющего приложение в качестве области определения.

В файле Global.asa file можно использовать тег <OBJECT>, расширенный атрибутом RUNAT (который должен иметь значение SERVER) и атрибутом SCOPE (его значение должно быть равно Application). Ниже приведен пример использования тега <OBJECT> для создания экземпляра объекта Ad Rotator с приложением в качестве области определения:

<OBJECT RUNAT=SERVER SCOPE=Application ID=MyAds PROGID="MSWC.AdRotator">
</OBJECT>

После сохранения объекта Ad Rotator в состоянии приложения можно получить доступ к нему с любой страницы приложения с помощью следующего оператора:

<%=MyAds.GetAdvertisement("CustomerAds.txt") %>

С другой стороны, можно использовать Server.CreateObject для хранения экземпляра объекта во встроенном объекте Application, как это показано в следующем примере:

<% Set Application("MyAds") = Server.CreateObject("MSWC.Adrotator")%>

Можно отобразить рекламу в файле .asp приложения, извлекая экземпляр объекта Ad Rotator из состояния приложения, как показано ниже:

<%Set MyAds = Application("MyAds") %> <%=MyAds.GetAdvertisement("CustomerAds.txt") %>

Альтернативы использованию сеанса и приложения в качестве области определения

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

В большинстве случаев лучше оказывается не создавать объект с сеансом или приложением в качестве области определения, а использовать переменные с аналогичной областью определения, которые передают информацию объекты, созданному на уровне страницы. Например, не следует назначать объекту ADO Connection сеанс или приложение в качестве области определения, поскольку подключение, создаваемое им, остается открытым длительный промежуток времени и сценарий не может воспользоваться преимуществом группирования подключений. Однако можно хранить строки подключения ODBC или OLE DB во встроенных объектах Session или Application и получать доступ к строке для установки свойства экземпляра объекта Connection, создаваемого на странице. В этом случае часто используемая информация хранится в состоянии сеанса или приложения, но объект, использующий эти сведения, создается только в случае необходимости. Дополнительные сведения о задании области определения переменных см. в разделе Использование переменных и констант.

Объекты JScript, определенные пользователем

можно создать объект JScript, определив функцию конструктора, которая создает и инициализирует свойства и методы нового объекта. Экземпляр объекта создается при использовании сценарием оператора new для вызова конструктора. Определенные пользователем объекты JScript поддерживаются сценариями ASP на стороне сервера и работают призадании им страницы в качестве области определения. Однако определенный пользователем объект не может иметь в качестве области определения приложение. Также назначение определенному пользователем объекту сеанса в качестве области определения может повлиять на функциональность объекта. В частности, если область определения у объекта — сеанс, сценарии на других страницах получат доступ к свойствам объекта, но не смогут вызвать его методы. Также назначение определенному пользователем объекту JScript сеанса в качестве области определения может повлиять на быстродействие веб-приложения.

Дополнительные сведения: Вопросы производительности

Потоковая модель компонента может оказать влияние на быстродействие веб-узла. Обычно объекты, помеченные как имеющие двойную (Both) модель, рекомендуется использовать в файлах .asp, если они хранятся в состоянии Session или Application. Не рекомендуется использование объектов, выполняемых в одном потоке, объектов с замкнутой моделью и многопотоковых объектов.

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

  • Объекты с областью определения — страницей Объекты с двойной (Both) или замкнутой (Apartment) моделью обеспечат наилучшее быстродействие.
  • Объекты с областью определения — приложением Объекты с двойной (Both) , включающей сортировщик свободных потоков, моделью обеспечат наилучшее быстродействие. Можно использовать или тег <OBJECT>, или метод Server.CreateObject для хранения объектов с двойной моделью в объекте Application. Необходимо использовать тег HTML <OBJECT> для объектов с замкнутой моделью.
  • Объекты с областью определения — сеансом Объекты с двойной (Both) моделью обеспечат наилучшее быстродействие. Использование объектов, выполняемых в одном потоке, или объектов, выполняемых в замкнутом потоке, приведет к заключению веб-сервером сеанса в один поток. Многопотоковые объекты не блокируют сеанс, но они работают медленно. Можно использовать или тег <OBJECT>, или метод Server.CreateObject для хранения объектов с двойной моделью в объекте Session.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог