ASP dapat mengeksekusi halaman web dinamis Anda dengan cepat, namun Anda juga dapat membuatnya dieksekusi lebih cepat dengan mengompresi kode dan koneksi database. Ini adalah artikel mendetail tentang cara menyederhanakan kode dan fitur ASP untuk mendapatkan kecepatan eksekusi tercepat. Bagi pengguna yang tidak sabar, apakah ada penundaan antara menekan tombol pengguna dan hasil yang muncul di layar dapat berarti mereka menjelajahi situs lain? Jika Anda memiliki situs komersial, ini bisa berarti kehilangan potensi penjualan.
Kami tidak memiliki cara apa pun untuk mengontrol bandwidth pengguna, namun kami mendapatkan kinerja terbaik dengan mengoptimalkan situs ASP. Sebagian besar potensi peningkatan kinerja dilakukan melalui perubahan sistem, bukan pengetatan kode. Ide yang tidak tepat adalah meminta administrator sistem untuk memperbarui sistem setelah Anda mengalami masalah efisiensi sistem.
Pertama, faktor apa saja yang mungkin mempengaruhi kinerja Asp? Sayangnya, ada banyak faktor? Ini hanyalah beberapa di antaranya:
bandwidth yang tersedia
Kecepatan prosesor dan perangkat keras lainnya di server
Program lain yang berjalan di server (seperti screen saver OpenGL!)
Mode koneksi database, kumpulan koneksi, sistem database itu sendiri (misalnya, Oracle lebih baik dari Sql Server, Sql server lebih baik dari Access)
bahasa yang digunakan
Prosedur tersimpan lebih baik daripada pernyataan SQL berbasis baris
Gunakan komponen yang dikompilasi daripada VB atau JavaScript, pengalaman pemrograman ASP yang baik, seperti penanganan kesalahan, dll.
Beberapa faktor di atas mungkin sudah umum diperhatikan oleh pengembang yang memiliki pengetahuan dan pengalaman IIS, namun faktor lainnya mungkin merupakan masalah yang sangat kompleks bagi mereka. Pada artikel ini, kami akan mencoba menjelaskan semua faktor yang mempengaruhi kinerja Asp* dan mari kita lihat hal-hal utama yang dapat dilakukan dalam beberapa milidetik yang kita cukur.
Ukuran skrip ASP
Apakah halaman skrip Anda (dan halaman lainnya) lebih panjang dari yang diperlukan? Ini adalah sesuatu yang akan mengurangi kinerja Asp* segera setelah dijalankan. Skrip ASP berguna untuk mendapatkan informasi dan memformat keluaran, namun skrip juga diinterpretasikan baris demi baris, jadi semakin panjang skrip Anda, semakin lama waktu yang dibutuhkan untuk mengeksekusinya.
Jika skrip Anda berukuran besar, apa yang dapat Anda lakukan untuk mengurangi panjangnya? Berikut beberapa saran:
Bisakah Anda mengubahnya menjadi komponen sisi server, yaitu menjadi VB DLL atau menjadi komponen yang tidak dikompilasi melalui bahasa pemrograman Windows tingkat lanjut atau bahasa antarmuka COM yang sesuai? Dan daftarkan mereka di sisi server. Panduan singkat dapat ditemukan di
Ditemukan di http://www.webdevelopersjournal.com/articles/activex_for_asp.html. Mengkompilasi komponen ActiveX yang ditulis dengan baik tidak hanya dapat meningkatkan kinerja secara signifikan, tetapi juga melindungi perangkat lunak Anda (skrip), terutama ketika Anda mempublikasikan situs ASP Anda pada host pihak ketiga.
Karena skrip diinterpretasikan baris demi baris, kinerja dapat ditingkatkan dengan menghilangkan skrip yang berlebihan atau membuat skrip yang lebih efisien. Jika Anda memiliki ratusan baris kode dalam satu file ASP, mungkin dengan cara ini Anda dapat memisahkan pengguna, transaksi, dan layanan data dengan baik. Faktanya, jika Anda melakukan ini, Anda mungkin menemukan beberapa kode yang berlebihan: jika Anda perlu menampilkan beberapa tabel, Anda dapat menulis fungsi umum untuk menampilkan tabel dan memanggilnya beberapa kali.
Ketika berbicara tentang ukuran skrip Asp, kita harus menyebutkan ukuran file yang disertakan. Saat Anda menggunakan file penyertaan, seluruh file penyertaan dimuat. Saat file penyertaan disertakan, ini sama dengan menulis bagian kode tersebut dalam file Asp itu sendiri. Oleh karena itu, jika Anda mendefinisikan banyak metode dan definisi umum dalam file penyertaan yang panjang, pahamilah bahwa saat Anda menyertakan file, baik Anda ingin menggunakan setiap metode atau definisi di dalamnya, file tersebut akan disertakan dalam seluruh file yang dimuat. ASP menyimpan semua kode ekspansi, yang mengurangi efisiensi pencarian. Dalam hal ini, file yang disertakan harus dipecah menjadi file modular yang lebih kecil. Pahami juga bahwa file yang disertakan diperlakukan sebagai permintaan halaman terpisah oleh server, dan penggunaan terlalu banyak file yang disertakan dapat memengaruhi waktu pengunduhan.
<!-- #include file=Header.asp -->
<!-- #include file=Footer.asp -->
<Bahasa SCRIPT=vbscript runat=server>
Sub Utama()
TulisHeader
TulisTubuh
TulisFooter
Akhiri Sub
SubWriteBody()
...
Akhiri Sub
Utama?'Prosedur panggilan Utama
</SKRIP>
Jika skrip Anda panjang, gunakan Response.IsClientConnected. Ini berarti CPU server Anda dapat menghindari menunggu dalam satu lingkaran ketika klien tidak lagi terhubung ke server.
<%
'Periksa apakah klien masih terhubung
Jika Tidak Response.IsClientConnected Lalu
'Masih terhubung, pawang
Kalau tidak
'memutuskan
Akhiri Jika
%>
Menyelingi ASP dan HTML
Apakah semua orang melakukan ini? Saat kami menampilkan tabel, kami mengonversi antara kode ASP dan HTML, yang merupakan kebiasaan buruk. Misalnya:
<HTML>
< TUBUH >
<%
Setel MyConn = Server.CreateObject(ADODB.Connection)
MdbFilePath = Server.MapPath(sampel.mdb)
MyConn.Open Driver={Driver Microsoft Access (*.mdb)};
SQL_query = PILIH * DARI Teman
Setel RS = MyConn.Execute(SQL_query)
SAAT BUKAN RS.EOF
%>
<LI><%=RS(Nama)%>: <A HREF=>Beranda</A>
<%
RS.MoveNext
PERGI KE
%>
</TUBUH>
</HTML>
Contoh umum lainnya adalah ketika menggunakan pernyataan IF:
<%
Jika Bukan Sesi (DBOpen) Lalu
%>
<H1>Database tidak terhubung</H1>
<%
Kalau tidak
%>
<H1>Database terbuka</H1>
<%
Akhiri Jika
%>
Dalam kasus ini, performa skrip dapat ditingkatkan dengan menulis skrip sisi server bersama-sama dan menggunakan Response.write untuk menghasilkan kode HTML. Misalnya:
<%
Jika bukan Sesi (DBOpen) Lalu
Respon.Tulis <H1>Database tidak terhubung</H1>
Kalau tidak
Respon.Tulis <H1>Database terbuka</H1>
Akhiri Jika
%>
Dalam kasus skrip besar dan banyak skrip, Anda akan melihat peningkatan kinerja. Perhatikan bahwa penggunaan tag <% dihindari sebisa mungkin, sehingga untuk meningkatkan kinerja ASP tidak perlu menghitung kode karakter Ascii saat menjalankan skrip.
Status sesi
Tidak ada keraguan bahwa kemampuan untuk mempertahankan keadaan tertentu melalui Sesi merupakan fitur yang sangat kuat dalam ASP. Namun, hal ini dapat memengaruhi kinerja* Anda. Tentu saja, skalabilitas situs Anda menjadi masalah lain jika Anda membatasi penggunaan Sesi. Namun, sesi menghabiskan sumber daya server untuk setiap pengguna.
Bagaimana jika Anda tidak menggunakan variabel sesi, atau sebenarnya tidak perlu menggunakannya? Apakah menggunakan kolom formulir tersembunyi, menyimpan data dalam database, dan string kueri adalah triknya? Jadi, Anda harus menonaktifkan status Sesi. Anda dapat menonaktifkan penggunaan sesi dengan pernyataan berikut:
@EnableSessionState = Salah
Dengan cara ini, ASP tidak lagi memeriksa informasi sesi.
Jika Anda harus bergantung pada status sesi, Anda harus menghindari menyimpan data dalam jumlah besar di objek sesi. Sesi di IIS akan dipertahankan selama cookie HTTP klien tersedia, menyebabkan memori yang digunakan oleh sesi tersebut terisi hingga sesi berakhir atau waktu habis. Dengan cara ini, jika banyak pengguna menggunakan program Anda pada saat yang sama, sumber daya server Anda mungkin habis.
Akses basis data
Akses database harus dimiliki? Mengakses database akan memperlambat aplikasi Anda secara drastis, namun jelas banyak situs tidak akan berguna tanpa database. Namun dengan mengakses database melalui prosedur tersimpan alih-alih menggunakan pernyataan SQL yang tertanam, Anda dapat meningkatkan potensi performa. Mereka juga memiliki fleksibilitas yang baik* dengan menggunakan prosedur tersimpan dan Objek Data ActiveX (ADO). Kapan pun memungkinkan, keluarkan data dari prosedur tersimpan.
Pastikan database Anda memiliki indeks, karena ini secara langsung akan meningkatkan efisiensi program Anda. Selain itu, coba jalankan Perbarui Statistik di server database Anda untuk membantu melacak distribusi data Anda sehingga database Anda dapat mengubah eksekusi kueri berdasarkan informasi ini. Perhatikan bahwa beberapa database, seperti MS Access, benar-benar dapat diterima dalam program tingkat perusahaan? SQL Sever 7.0 atau Oracle adalah pilihan yang lebih baik.
Biarkan SQL berfungsi seperti yang dirancang untuk menghitung, menggabungkan, mengurutkan, dan mengelompokkan data. Ketika Anda bisa menulis pernyataan kueri untuk melakukan hal-hal ini, jangan melakukannya sendiri dalam bahasa lain.
Berikut adalah sintaks paling sederhana untuk menghitung semua kolom:
PILIH jumlah(*) DARI penerbit WHERE state='NY'
Jika Anda menghitung kolom tertentu, Anda harus menggunakan pernyataan grup demi untuk mengelompokkan kolom tersebut, jika tidak maka kolom tersebut tidak akan berfungsi:
PILIH jumlah(kota),kota DARI penerbit KELOMPOK BERDASARKAN kota
Data yang dikategorikan dikembalikan:
PILIH * DARI NamaTabel DIMANA Nama Bidang>50 ATAU Nama Bidang<100 DIPESAN BERDASARKAN Nama Bidang2, Nama Bidang3
Gunakan Odbc atau file DSN untuk terhubung ke database? Gunakan teknologi Penyedia OLEDB yang cepat untuk menyambung ke database Anda alih-alih menggunakan sambungan DSN. Tidak perlu lagi meminta ISP Anda (atau administrator database/administrator jaringan) untuk menyiapkan DSN sistem untuk Anda, dan tidak ada perubahan konfigurasi saat Anda memindahkan file web.
OLEDB berada di antara lapisan ODBC dan aplikasi. ADO adalah aplikasi di atas ODEDB di halaman ASP Anda. Panggilan ADO Anda pertama-tama dikirim ke OLEDB dan kemudian ke lapisan ODBC. Namun, Anda dapat terhubung langsung ke lapisan OLEDB, dan jika Anda melakukannya, Anda akan melihat peningkatan kinerja sisi server. Namun, bagaimana cara menghubungkan langsung ke OLEDB?
Jika Anda menggunakan SQLServer 7, gunakan kode koneksi berikut untuk menyambung ke database:
strConnString = DSN='';DRIVER={SQL SERVER};
UID=myuid;PWD=pwd saya;
DATABASE=Db Saya;SERVER=Server Saya;
Parameter terpenting adalah bagian DRIVER=. Jika Anda ingin melewati ODBC dan menyambung ke SQL Server dengan menggunakan OLEDB (yang merupakan koneksi lebih cepat), gunakan sintaks berikut:
strConnString =Penyedia=SQLOLEDB.1;Kata Sandi=kata sandi saya & _
Info Keamanan Tetap=Benar;ID Pengguna=myuid;
Katalog Awal=namadbsaya;
Sumber Data=server saya; Batas Waktu Sambungan=15
Apakah ada yang salah?
Sekarang Anda mungkin bertanya-tanya: apa maksud kami dengan metode koneksi baru ini? Mengapa tidak menggunakan pendekatan standar DSN-less/System DSN? Nah, menurut hasil pengujian Wrox dalam bukunya "ADO 2.0 Programmer's reference", jika Anda membandingkan koneksi OLEDB dengan metode koneksi DSN atau DSN-less, Anda akan menemukan peningkatan berikut:
*Dapat membandingkan:
Akses SQL
OLEDBDSNLEDBDSN
Waktu koneksi: 18?82?Waktu koneksi: 62?99
Waktu untuk menanyakan 1.000 catatan: 29005400 Waktu untuk menanyakan 1.000 catatan: 100950
Catatan: Hasil ini dapat ditemukan di halaman 232 dan 233 buku "Referensi Pemrogram ADO 2.0" Wrox. Waktu diukur dalam milidetik, dan waktu kueri hingga 1.000 catatan dihitung menggunakan kursor sisi server (tidak banyak perbedaan kinerja antara kumpulan data OLEDB dan DSN saat menggunakan kursor sisi klien).
Masalah decoding ASP:
Validasi input pengguna di sisi klien bila memungkinkan untuk mengurangi jumlah permintaan bolak-balik HTTP. Jika browser Anda memiliki kemampuan untuk mendukung JavaScript atau skrip lainnya, gunakan kekuatannya untuk mengosongkan lebih banyak sumber daya server.
VBScript berikut berjalan di browser klien untuk memvalidasi informasi pengguna sebelum mengirimkannya ke server Anda:
<BAHASA SKRIP=VBScript>
<!--
Sub btnEnter_OnClick
Redupkan Formulir
Atur TheForm = Document.MyForm
Jika IsNumeric(TheForm.Age.Value) Lalu
Formulir.kirim
Kalau tidak
Kotak Pesan Silakan masukkan usia numerik.
Berakhir jika
Akhiri Sub
//-->
</SKRIP>
<FORMmethod=Nama POST=Formaksi Saya=filesaya.asp>? Nama: <INPUT typr=nama teks=Nama>
Umur: <Jenis INPUT=nama teks=Umur>
<Jenis INPUT=nama tombol=btnEntervalue=Masuk>
</BENTUK>
Gunakan variabel lokal dan hindari variabel global. Variabel lokal diakses lebih cepat oleh mesin skrip Asp dibandingkan variabel global karena seluruh nama domain tidak perlu dicari. Hindari mengubah definisi array. Akan lebih efisien jika mengalokasikan ukuran yang cukup pada inisialisasi pertama. Dalam hal ini, Anda mungkin membuang sebagian memori, namun Anda mendapatkan keuntungan dari kecepatan. Teknik ini jelas efektif ketika server sedang dalam beban berat.
Jika Anda perlu mereferensikan suatu objek yang belum tentu digunakan, lebih baik menggunakan tag <OBJECT> daripada menggunakan metode Server.CreateObject. Menggunakan Server.CreateObject menyebabkan objek segera dibuat. Sebaliknya, tag <OBJECT> tidak langsung membuat objek. Jika Anda tidak menggunakan objek setelah mendefinisikannya dengan <object>, Anda tidak akan menyia-nyiakan sumber daya.
Misalnya: Contoh berikut menggunakan tag <OBJECT> untuk membuat implementasi objek Ad Rotator roda iklan lingkup aplikasi.
contoh:
<OBJECT runat=server scope=ID aplikasi=MyAds progid=MSWC.AdRotator>
</OBJEK>
Setelah menyimpan objek Ad Rotator di Aplikasi, Anda dapat mengakses objek di halaman program mana pun menggunakan sintaks berikut
<%=Iklan Saya.GetAdvertisement(Iklan Pelanggan.txt) %>
Hidupkan sakelar 'Opsi Eksplisit'. Di VB dan VBScript, Anda dapat menggunakan variabel tanpa deklarasi eksplisit. Namun mengaktifkan opsi ini dapat mengidentifikasi dan menentukan variabel, yang dapat menulis variabel dengan baik dan membantu meningkatkan kinerja. Variabel lokal yang tidak terdefinisi lebih lambat karena namespace harus dicari untuk melihat apakah variabel tersebut ada sebelum membuatnya. Singkirkan itu dan buat setiap variabel terdefinisi dengan jelas (tentukan dulu, gunakan nanti).
Ini adalah kebiasaan yang baik, dapat menjebak kesalahan ketik, dan lebih cepat.
Kecuali Anda benar-benar perlu menggunakannya, jangan gunakan metode Server.MapPath. Gunakan jalur yang sebenarnya jika Anda mengetahuinya. Penggunaan MapPath memerlukan IIS untuk mengambil jalur server saat ini, yang berarti permintaan khusus harus dikirim ke server, yang berarti penurunan kinerja. Cara lainnya adalah dengan menyimpan jalur dalam variabel lokal dan menggunakannya bila diperlukan, sehingga server tidak perlu mencari berkali-kali.
Periksa bagaimana kabar Anda
Anda dapat mengukur kinerja sistem Anda melalui alat seperti System Performance Monitor, netMon dan PerfMon. Untuk menguji kinerja web*, Anda dapat menggunakan WCAT (Alat Analisis Kapasitas Web). Dengan menggunakan WCAT, Anda dapat menguji kemampuan server IIS dan konfigurasi jaringan Anda untuk merespons berbagai permintaan klien, data, atau halaman HTML. Hasil pengujian ini dapat digunakan sebagai panduan untuk mengoptimalkan konfigurasi server dan jaringan Anda. WCAT dirancang khusus untuk memperkirakan jumlah beban kerja pelanggan yang dapat ditanggapi oleh Layanan Internet di Windows 2000 (atau Windows NT) dan IIS.
(simulasi). Untuk informasi selengkapnya, lihat Kit Sumber Daya IIS. Ada juga Panduan Pengguna WCAT yang panjang di situs web sorkshop MSDN Online dengan link download. Jika Anda serius dengan kemampuan Asp* Anda, pastikan untuk mendapatkan alat ini.
Upayakan untuk mengoptimalkan kinerja aplikasi dan aplikasi web Anda akan berjalan lebih lancar. Jangan mempengaruhi kinerja server jika Anda tidak terlalu membutuhkannya.
asp menggunakan prosedur tersimpan untuk mengimplementasikan paging data
1. Buat tabel tiku_koushi
jika ada (pilih * dari dbo.sysobjects di mana id =
object_id(N'[dbo].[tiku_koushi]') dan OBJECTPROPERTY
(id, N'IsUserTable') = 1)
jatuhkan tabel [dbo].[tiku_koushi]
PERGI
BUAT TABEL [dbo].[tiku_koushi] (
[id] [int] IDENTITAS (1, 1) BUKAN NULL,
[judul] [varchar] (250) Susun
Cina_PRC_CI_AS NULL ,
[list2_id] [char] (10) Susun
Cina_PRC_CI_AS NULL
) PADA [UTAMA]
PERGI
2. Prosedur tersimpan sp_c
BUAT proses sp_c
@namatabel varchar(50),
@judul varchar(250),
@list2_id varchar(50)
sebagai
jika @namatabel='tiku_koushi'
pilih count(*) dari tiku_koushi dengan judul seperti '%'+@title+'%' dan list2_id=@list2_id
PERGI
3. Prosedur tersimpan sp_search_tiku
BUAT PROSEDUR sp_search_tiku
@namatabel varchar(50),
@judul varchar(250),
@list2_id varchar(10),
@ukuran halaman ke dalam,
@halaman ke dalam
SEBAGAI
jika @namatabel='tiku_koushi'
mulai
nyatakan @ks int
nyatakan @str varchar(200)
atur @ks=@ukuran halaman*(@halaman-1)
jika tidak ada (pilih * dari dbo.sysobjects di mana id = object_id(N'[dbo].[temp_table91]') dan OBJECTPROPERTY(id, N'IsUserTable') = 1)
mulai
pilih * ke temp_table91 dari tiku_koushi dimana
judul seperti '%'+@title+'%' dan list2_id=@list2_id pesanan
menurut id deskripsi
atur jumlah baris @ukuran halaman
setel @str='pilih * dari temp_table91 di mana id tidak masuk
(pilih id '+str(@ks)+' teratas dari temp_table91)'
mengeksekusi(@str)
jatuhkan tabel temp_table91
akhir
akhir
PERGI
4. pencarian_koushi.asp
<!-- #sertakan file=sambungan.asp -->
<%
garis=6
jika permintaan(halaman)= maka
halaman=1
kalau tidak
halaman=permintaan(halaman)
berakhir jika
jika halaman<1 maka
halaman=1
berakhir jika
judul=trim(permintaan(judul))
list2_id=trim(permintaan(list2_id))
setel rs2=sambungan.eksekusi(sp_c 'tiku_koushi','&judul&','&list2_id&')
jumlah halaman=CInt(rs2(0)/baris)
if(CInt(rs2(0)) baris mod)=0 maka
jumlah halaman=jumlah halaman
kalau tidak
jumlah halaman=jumlah halaman+1
berakhir jika
jika CInt(halaman)>=jumlah halaman maka
halaman=CInt(jumlah halaman)
berakhir jika
str=
str=str&halaman=&halaman&&judul=&judul&&list2_id=&list2_id
atur rs=sambungan.eksekusi
(sp_search_tiku 'tiku_koushi','&judul&','&list2_id&','&line&','&CInt(halaman)&')
jika rs.eof maka
respon.tulis tanpa catatan
kalau tidak
%>
<html>
<kepala>
<tipe gaya=teks/css>
td{ukuran font:12px;}
a{dekorasi teks: tidak ada;}
</gaya>
<bahasa skrip=javascript>
</skrip>
</kepala>
<tubuh>
<lebar tabel=518 batas=1 bataswarnawarna=000000
bordercolordark=#ffffff
align=center cellpadding=0 spasi sel=0>
<!--DWLayoutTable-->
<tr bgcolor=#dfdfdf>
<td width=454 align=center height=24 valign=middle>Soal ujian lisan</td>
<td width=63 align=center valign=middle>Hapus</td>
</tr>
<% lakukan sampai rs.eof %>
<tr tinggi=22>
<td valign=tengah>·<a href=void(0)
onclick=window.open('editkoushi.asp?id=<%=rs(id)%>&page=<%=page%>&title=<%=title%>&list2_id=<%=list2_id%>','' ,'lebar=518
tinggi=160 kiri=100')>
<%=rs(judul)%></a></td>
<td align=center valign=middle>Hapus</td>
</tr>
<%
rs.movenext
lingkaran
%>
<tr align=valign kiri=bgcolor tengah=efeff6
tinggi=22>
<td colspan=2 style=padding-kiri:6px;>
<a href=search_koushi.asp?page=<%=1%>&title=<%=title%>&list2_id=<%=list2_id%>>Beranda</a> <a
href=search_koushi.asp?page=<%=page-1%>&title=<%=title%>&list2_id=<%=list2_id%>>Halaman sebelumnya</a> <a
href=search_koushi.asp?page=<%=page+1%>&title=<%=title%>&list2_id=<%=list2_id%>>Halaman berikutnya</a> <a
href=search_koushi.asp?page=<%=pagecount%>&title=<%=title%>&list2_id=<%=list2_id%>>Halaman terakhir</a>
Total <%=pagecount%> halaman. Halaman saat ini adalah: <%=page%>/<%=pagecount%> halaman
Total ada <%=rs2(0)%> catatan</td>
</tr>
</tabel>
</tubuh>
</html>
<%
rs2.tutup
atur rs2=tidak ada
rs.tutup
atur rs=tidak ada
berakhir jika
%>