Серия лекций ASP (9) Настройка области объекта
Автор:Eve Cole
Время обновления:2009-05-30 19:59:07
Область действия объекта определяет, какие сценарии могут использовать этот объект. По умолчанию при создании экземпляра объекта объект имеет область действия страницы. Любая команда сценария на одной и той же странице ASP может использовать объект в области страницы; объект освобождается, когда страница ASP отправляется обратно клиенту. Для большинства объектов рекомендуемой областью является область страницы. Вы можете изменить область действия объекта, чтобы его могли использовать сценарии на других страницах. В этом разделе объясняется, как использовать объекты в области страницы и как изменить область действия объекта.
Использование объектов области страницы. Объекты, созданные с помощью Server.CreateObject на странице ASP, существуют в течение всего времени существования страницы. Объект доступен для любых команд сценария для страницы и освобождается, когда ASP завершает обработку страницы. Таким образом, объект имеет область действия или время жизни страницы.
При программировании с помощью Visual Basic или VBScript будьте осторожны и не освобождайте объект до тех пор, пока ASP не завершит обработку страницы. Например, следующий оператор часто используется для освобождения объекта путем присвоения переменной объекта значения Nothing:
Установите myObj = Ничего
Если вы включите этот оператор на страницу ASP, любая попытка использовать myObj вернет ожидаемый код ошибки. Но внутри ASP по-прежнему сохраняет ссылку на объект даже после его освобождения. Если вы не можете использовать объект в сценарии, ресурсы объекта не освобождаются до тех пор, пока ASP не завершит обработку страницы. Аналогично, если вы освобождаете объект, создавая другой экземпляр объекта и присваивая его уже использованной объектной переменной, ASP сохраняет ссылку на исходный экземпляр объекта. Для большинства сценариев создание нескольких объектов может не вызвать проблем, но если объекты используют общие ресурсы, например соединения с базой данных, могут возникнуть проблемы.
Поскольку объекты имеют область действия страницы, не полагайтесь на освобождение объектов вручную. Например, следующий цикл создает 1001 объект Connection, который сможет открыть большинство соединений даже с большим SQL-сервером:
<%
Для I = от 0 до 1000
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open «строка подключения»
Следующий
%>
В общем, вам следует стараться избегать создания объектов внутри цикла. Если это неизбежно, вам следует вручную освободить ресурсы, используемые объектом. Если объект Connection создается только один раз, а физическое соединение с ресурсом данных открывается и закрывается в каждом цикле, то приведенный выше пример будет работать нормально:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Для I = от 0 до 1000
Conn.Open «строка подключения»
Конн.Закрыть
Следующий
%>
Предоставление объектам области сеанса В приложении объект области сеанса создается для каждого нового сеанса и освобождается после его завершения. Таким образом, для каждого активного сеанса существует один объект. Область сеанса используется для объектов, которые вызываются из нескольких сценариев, но влияют только на один сеанс пользователя. Вы можете указать область сеанса объекта только при необходимости. Если вам все же необходимо использовать область сеанса, вы должны понимать модель потоков компонента, предоставляющего объект, поскольку она влияет на производительность и среду безопасности объекта. Дополнительные сведения см. в разделе «Дополнительная информация: проблемы с производительностью» в этом разделе.
Чтобы задать область сеанса объекта, сохраните объект во встроенном объекте сеанса ASP. Вы можете использовать тег <OBJECT> в файле Global.asa или использовать метод Server.CreateObject на странице ASP для создания сеанса. Экземпляр объекта домена.
В файле Global.asa вы можете использовать тег ;OBJECT>, который расширяет атрибут RUNAT (должен быть установлен на Sever) и атрибут SCOPE (должен быть установлен на Session). В следующем примере создается экземпляр объекта Ad Rotator в области сеанса:
<OBJECT RUNAT=Область сервера=Идентификатор сеанса=MyAd PROGID="MSWC.Adrotator">
</ОБЪЕКТ>
После сохранения объекта в объекте Session вы можете получить доступ к объекту с любой страницы приложения. Следующий оператор использует экземпляр объекта, созданный тегом <OBJECT> в предыдущем примере:
<%= MyAd.GetAdvertisement("addata.txt") %>
На странице ASP вы также можете использовать метод Server.CreateObject для хранения объектов во встроенном объекте Session. В следующем примере экземпляр объекта Ad Rotator сохраняется в объекте Session.
<% Set Session("MyAd") = Server.CreateObject("MSWC.Adrotator") %>
Чтобы отобразить рекламу, вам необходимо сначала получить экземпляр объекта Ad Rotator, хранящийся в объекте Session, а затем вызвать метод для отображения объекта:
<% Set MyAd = Session("MyAd") %>
<%= MyAd.GetAdvertisement("addata.txt") %>
ASP не создает экземпляр объекта, объявленного с помощью тега <OBJECT>, пока на него не ссылается команда сценария в файле .asp. Метод Server.CreateObject немедленно создает экземпляр объекта. Поэтому для объектов области сеанса лучше использовать тег <OBJECT>, чем свойство Server.CreateObject.
Дайте область применения объекта
Объект области приложения — это отдельный экземпляр объекта, который создается при запуске приложения. Этот объект используется всеми клиентскими запросами. Лишь в редких случаях вам нужно указать область применения объекта. Некоторым служебным объектам, таким как счетчики и т. д., может потребоваться область приложения. Но в целом вы можете использовать альтернативы, предложенные в следующем разделе. Кроме того, модель потоков влияет на производительность и среду безопасности объектов (см. «Дополнительная информация: проблемы с производительностью» в этом разделе).
Чтобы задать область приложения объекта и сохранить ее во встроенном объекте приложения ASP, вы можете либо использовать тег <OBJECT> в файле Global.asa, либо создать область приложения с помощью метода Server.CreateObject в экземпляре объекта страницы ASP. .
В файле Global.asa вы можете использовать тег ;OBJECT>, который расширяет атрибут RUNAT (должен быть установлен на Sever) и атрибут SCOPE (должен быть установлен на Session). На страницах ASP вы можете использовать Server.CreateObject для хранения экземпляров объектов во встроенном объекте приложения. Пример использования тега <OBJECT> и Server.CreateObject см. в предыдущем разделе «Предоставление области сеанса объекту».
Альтернативы области сеанса и приложения Предоставляйте сеанс объекта или область приложения только при необходимости. Потому что эти объекты остаются до тех пор, пока не завершится сеанс или приложение. Они потребляют такие ресурсы, как память или соединения с базой данных, которые могут быть более полезны в других отношениях. Кроме того, модель потоков компонента влияет на производительность объектов, которые вы создаете на его основе, особенно тех, которые имеют область действия сеанса или приложения.
Во многих случаях лучшим подходом, чем создание объектов области приложения или сеанса, является использование переменных области сеанса или приложения для передачи информации объектам, созданным на уровне страницы. Например, не указывайте сеанс или область приложения объекта ADO Connection, поскольку создаваемое им соединение будет оставаться открытым в течение длительного периода времени, пока сценарий больше не использует общий доступ к соединению ODBC. Однако вы можете сохранить строку подключения ODBC во встроенном объекте сеанса или приложения и получить ее из созданного экземпляра объекта подключения на веб-странице. Таким образом, вы можете хранить часто используемую информацию в пространстве имен сеанса или приложения, но создавать объекты с этой информацией только при необходимости.
Пользовательские объекты JScript. Вы можете создавать свои собственные объекты JScript, определив конструктор, который создает и инициализирует свойства и методы нового объекта. Когда сценарий вызывает конструктор с помощью нового оператора, создается экземпляр объекта. Сценарий ASP поддерживает определяемые пользователем объекты, которые работают правильно, если они имеют область действия страницы. Однако если определяемому пользователем объекту JScript предоставляется область действия приложения или сеанса, это может повлиять на функциональность объекта. В частности, если объект имеет область действия сеанса или приложения, сценарии с других страниц могут получать свойства объекта, но не могут вызывать его методы.
Дополнительная информация: Проблемы с производительностью Модель потоков компонента может повлиять на производительность веб-сайта. Вообще говоря, объекты, отмеченные как «Оба», рекомендуется использовать во всех сценариях ASP, особенно в объектах «Сеанс» и «Приложение». Однопоточные объекты устарели.
Поскольку вы не всегда можете контролировать модель потоков используемых объектов, следующие рекомендации помогут вам достичь оптимальной производительности:
Объект области страницы. Объекты с пометкой «Оба» или «Квартира» обеспечат наилучшую производительность.
Объект области приложения. В общем, следует избегать размещения объектов в объекте «Приложение». Если вам все же необходимо использовать объекты области приложения, вы получите наилучшую производительность от объекта с тегами Both в сочетании с FreeThreadedMarshaler. Вы можете использовать тег <OBJECT> или метод Server.CreateObject для хранения объектов с тегами Single, Free или Both в объекте Application. Вы должны использовать тег <OBJECT> с объектами с квартирной резьбой.
Объект области действия сеанса. Объекты, отмеченные знаком «Оба», обеспечат наилучшую производительность. Использование однопоточных или многопоточных объектов приведет к тому, что веб-сервер заблокирует сеанс в одном потоке. Объекты со свободным потоком не блокируют сеанс, но работают не так быстро. В объекте Session вы можете использовать тег <OBJECT> или метод Server.CreateObject для хранения объектов.
Если вы установили документацию SDK, вы получите подробную информацию о модели потоков и производительности компонентов, которую она предполагает. (Документация SDK недоступна в Windows 95 и более поздних версиях.)