Seri Kuliah ASP (9) Setting Object Scope
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:59:07
Cakupan suatu objek menentukan skrip mana yang dapat menggunakan objek tersebut. Secara default, saat Anda membuat instance objek, objek tersebut memiliki cakupan halaman. Perintah skrip apa pun dalam halaman ASP yang sama dapat menggunakan objek cakupan halaman; objek dilepaskan ketika halaman ASP dikirim kembali ke klien. Untuk sebagian besar objek, cakupan yang direkomendasikan adalah cakupan halaman. Anda dapat mengubah cakupan suatu objek sehingga dapat digunakan oleh skrip di halaman lain. Topik ini menjelaskan cara menggunakan objek cakupan halaman dan cara mengubah cakupan objek.
Menggunakan objek cakupan halaman Objek yang dibuat dengan Server.CreateObject pada halaman ASP ada selama masa pakai halaman tersebut. Objek dapat diakses oleh perintah skrip apa pun untuk halaman tersebut dan dilepaskan ketika ASP telah selesai memproses halaman tersebut. Oleh karena itu, objek tersebut memiliki cakupan atau umur halaman.
Saat memprogram dengan Visual Basic atau VBScript, berhati-hatilah untuk tidak melepaskan objek sampai ASP selesai memproses halaman. Misalnya, pernyataan berikut sering digunakan untuk membebaskan suatu objek dengan memberikan nilai Nothing pada variabel objek:
Setel myObj = Tidak Ada
Jika Anda menyertakan pernyataan ini di halaman ASP, setiap upaya untuk menggunakan myObj akan mengembalikan kode kesalahan yang diharapkan. Namun secara internal, ASP masih menyimpan referensi ke objek tersebut bahkan setelah objek tersebut dirilis. Ketika Anda tidak dapat menggunakan objek dalam skrip, sumber daya objek tidak akan dilepaskan hingga ASP selesai memproses halaman. Demikian pula, jika Anda melepaskan objek dengan membuat instance objek lain dan menugaskannya ke variabel objek yang telah digunakan, ASP mempertahankan referensi ke instance objek asli. Untuk sebagian besar skrip, membuat beberapa objek mungkin tidak menimbulkan masalah, namun jika objek menggunakan sumber daya bersama, seperti koneksi database, masalah mungkin timbul.
Karena objek memiliki cakupan halaman, jangan mengandalkan pembebasan objek secara manual. Misalnya, loop berikut membuat objek 1001 Connection, yang akan mampu membuka sebagian besar koneksi bahkan ke server SQL besar:
<%
Untuk I = 0 sampai 1000
Setel Koneksi = Server.CreateObject("ADODB.Connection")
Sambung.Buka "string koneksi"
Berikutnya
%>
Secara umum, Anda harus mencoba menghindari pembuatan objek di dalam satu lingkaran. Jika tidak dapat dihindari, Anda harus melepaskan sumber daya yang digunakan oleh objek secara manual. Jika objek Connection dibuat hanya sekali, dan koneksi fisik ke sumber data dibuka dan ditutup di setiap loop, maka contoh di atas akan berfungsi normal:
<%
Setel Koneksi = Server.CreateObject("ADODB.Connection")
Untuk I = 0 sampai 1000
Sambung.Buka "string koneksi"
Sambungan Tutup
Berikutnya
%>
Memberikan objek cakupan sesi Dalam sebuah aplikasi, objek cakupan sesi dibuat untuk setiap sesi baru dan dilepaskan setelah sesi berakhir. Oleh karena itu, ada satu objek untuk setiap sesi aktif. Lingkup sesi digunakan untuk objek yang dipanggil dari beberapa skrip, tetapi hanya memengaruhi satu sesi pengguna. Anda dapat memberikan cakupan sesi objek hanya bila diperlukan. Jika Anda memang perlu menggunakan cakupan sesi, Anda harus memahami model threading dari komponen yang menyediakan objek, karena ini memengaruhi performa dan lingkungan keamanan objek. Untuk informasi lebih lanjut, lihat "Informasi lanjutan: Masalah kinerja" dalam topik ini.
Untuk memberikan cakupan sesi objek, simpan objek di objek bawaan Sesi ASP. Anda dapat menggunakan tag <OBJECT> di file Global.asa atau menggunakan metode Server.CreateObject di halaman ASP untuk membuat sesi- objek cakupan.
Pada file Global.asa, Anda dapat menggunakan tag ;OBJECT> yang memperluas atribut RUNAT (harus disetel ke Sever) dan atribut SCOPE (harus disetel ke Session). Contoh berikut membuat instance objek Ad Rotator dengan cakupan sesi:
<OBJECT RUNAT=Cakupan Server=ID Sesi=Iklan Saya PROGID="MSWC.Adrotator">
</OBJEK>
Setelah Anda menyimpan objek di objek Sesi, Anda dapat mengakses objek tersebut dari halaman mana pun di aplikasi. Pernyataan berikut menggunakan instance objek yang dibuat oleh tag <OBJECT> pada contoh sebelumnya:
<%= Iklan Saya.GetAdvertisement("addata.txt") %>
Pada halaman ASP, Anda juga dapat menggunakan metode Server.CreateObject untuk menyimpan objek di objek bawaan Sesi. Contoh berikut menyimpan instance objek Ad Rotator di objek Session.
<% Setel Sesi("Iklan Saya") = Server.CreateObject("MSWC.Adrotator") %>
Untuk menampilkan iklan, pertama-tama Anda harus mendapatkan instance objek Ad Rotator yang disimpan dalam objek Session, lalu memanggil metode untuk menampilkan objek tersebut:
<% Setel Iklan Saya = Sesi("Iklan Saya") %>
<%= Iklan Saya.GetAdvertisement("addata.txt") %>
ASP tidak membuat instance objek yang dideklarasikan dengan tag <OBJECT> sampai objek tersebut direferensikan oleh perintah skrip dalam file .asp. Metode Server.CreateObject segera membuat instance objek. Oleh karena itu, lebih baik menggunakan tag <OBJECT> daripada properti Server.CreateObject untuk objek cakupan sesi.
Berikan cakupan aplikasi objek
Objek lingkup aplikasi adalah satu contoh objek yang dibuat saat aplikasi dimulai. Objek ini dibagikan oleh semua permintaan klien. Hanya dalam kasus yang jarang terjadi Anda perlu memberikan cakupan aplikasi objek. Beberapa objek utilitas, seperti penghitung, dll., mungkin memerlukan cakupan aplikasi. Namun secara umum, Anda dapat menggunakan alternatif yang disarankan di bagian selanjutnya. Selain itu, model threading mempengaruhi kinerja dan lingkungan keamanan objek (lihat "Informasi lanjutan: Masalah kinerja" dalam topik ini).
Untuk memberikan cakupan aplikasi objek dan menyimpannya di objek bawaan Aplikasi ASP, Anda dapat menggunakan tag <OBJECT> di file Global.asa atau membuat cakupan aplikasi menggunakan metode Server.CreateObject pada instance objek halaman ASP .
Pada file Global.asa, Anda dapat menggunakan tag ;OBJECT> yang memperluas atribut RUNAT (harus disetel ke Sever) dan atribut SCOPE (harus disetel ke Session). Di halaman ASP, Anda dapat menggunakan Server.CreateObject untuk menyimpan instance objek di objek bawaan Aplikasi. Sebagai contoh penggunaan tag <OBJECT> dan Server.CreateObject, lihat bagian sebelumnya, "Memberikan cakupan sesi ke suatu objek."
Alternatif untuk Sesi dan Lingkup Aplikasi Berikan sesi objek atau cakupan aplikasi hanya jika diperlukan. Karena objek tersebut tetap ada hingga sesi atau aplikasi berakhir. Mereka menggunakan sumber daya seperti memori atau koneksi database yang mungkin lebih berguna dalam hal lain. Selain itu, model threading komponen mempengaruhi kinerja objek yang Anda buat darinya, terutama yang memiliki cakupan sesi atau aplikasi.
Dalam banyak kasus, pendekatan yang lebih baik daripada membuat objek cakupan aplikasi atau sesi adalah dengan menggunakan variabel cakupan sesi atau aplikasi untuk meneruskan informasi ke objek yang dibuat di tingkat halaman. Misalnya, jangan berikan sesi objek atau cakupan aplikasi Koneksi ADO karena koneksi yang dibuatnya akan tetap terbuka untuk jangka waktu yang lama sementara skrip tidak lagi menggunakan berbagi koneksi ODBC. Namun, Anda dapat menyimpan string koneksi ODBC di objek bawaan Sesi atau Aplikasi dan mendapatkan string dari instance objek Connection yang dibuat di halaman web. Dengan cara ini Anda dapat menyimpan informasi yang sering digunakan dalam sesi atau namespace aplikasi, namun hanya membuat objek dengan informasi tersebut bila diperlukan.
Objek JScript yang ditentukan pengguna Anda dapat membuat objek JScript Anda sendiri dengan mendefinisikan konstruktor yang membuat dan menginisialisasi properti dan metode objek baru. Ketika skrip memanggil konstruktor menggunakan operator baru, sebuah instance objek dibuat. Skrip ASP mendukung objek yang ditentukan pengguna, yang berfungsi dengan baik ketika objek tersebut memiliki cakupan halaman. Namun, jika objek JScript yang ditentukan pengguna diberi cakupan aplikasi atau sesi, hal ini dapat memengaruhi fungsionalitas objek. Secara khusus, jika suatu objek memiliki cakupan sesi atau aplikasi, skrip dari halaman lain dapat memperoleh properti objek tersebut tetapi tidak dapat memanggil metodenya.
Informasi lanjutan: Masalah kinerja Model threading komponen dapat mempengaruhi kinerja situs Web. Secara umum, objek yang ditandai dengan Keduanya direkomendasikan untuk digunakan di semua skrip ASP, terutama di objek Sesi dan Aplikasi. Objek berulir tunggal tidak digunakan lagi.
Karena Anda mungkin tidak selalu mengontrol model threading objek yang Anda gunakan, panduan berikut dapat membantu Anda mencapai performa optimal:
Objek cakupan halaman. Objek bertanda Keduanya atau Apartemen akan memberikan Anda performa terbaik.
Objek cakupan aplikasi. Secara umum, Anda harus menghindari menempatkan objek di objek Aplikasi. Jika Anda memang perlu menggunakan objek cakupan aplikasi, Anda akan mendapatkan performa terbaik dari objek yang diberi tag keduanya yang dikombinasikan dengan FreeThreadedMarshaler. Anda dapat menggunakan tag <OBJECT> atau menggunakan metode Server.CreateObject untuk menyimpan objek dengan tag Tunggal, Gratis, atau Keduanya di objek Aplikasi. Anda harus menggunakan tag <OBJECT> dengan objek berulir apartemen.
Objek cakupan sesi. Objek yang ditandai dengan Keduanya akan memberikan Anda performa terbaik. Menggunakan objek single-thread atau apartemen-thread akan menyebabkan server Web mengunci sesi pada satu thread. Objek berulir bebas tidak mengunci sesi, tetapi tidak berjalan secepat itu. Di objek Session, Anda dapat menggunakan tag <OBJECT> atau metode Server.CreateObject untuk menyimpan objek.
Jika Anda telah menginstal dokumentasi SDK, Anda akan mendapatkan informasi mendetail tentang model threading dan kinerja komponen yang disiratkannya. (Dokumentasi SDK tidak tersedia di Windows 95 dan yang lebih baru.)