1. Apa itu caching ASP/mengapa harus di-cache?
Ketika situs web Anda dibangun menggunakan teknologi ASP pada tahap awal, Anda mungkin merasakan kemudahan yang dibawa oleh teknologi halaman web dinamis ASP, serta kebebasan modifikasi dan kontrol http gratis. Namun, seiring dengan meningkatnya jumlah kunjungan, Anda pasti akan menemukan bahwa kecepatan akses situs Anda semakin lambat, dan IIS semakin sering restart. Selanjutnya Anda harus ingin mengoptimalkan asp, seperti mengganti database dengan kinerja yang lebih baik, membuat indeks, menulis prosedur tersimpan, dll. Beberapa dari langkah-langkah ini tidak memerlukan peningkatan tekanan biaya, sementara yang lain memerlukan tekanan biaya yang signifikan (seperti pengelompokan akses ke SQL), dan dampaknya belum tentu pasti.
Menghadapi tekanan akses web, menurut saya cara paling ekonomis adalah dengan menggunakan teknologi pengoptimalan cache untuk mengurangi tekanan layanan web.
Peningkatan lalu lintas web sering kali berarti pertumbuhan pesat dalam permintaan akan sumber daya berikut:
1. Peningkatan lalu lintas kartu jaringan memerlukan lebih banyak CPU untuk memproses lalu lintas jaringan dan thread I/O jaringan.
2. Kebutuhan untuk membuka/menutup koneksi database lebih sering (jika teknologi database digunakan - biasanya ASP menggunakan database sebagai penyimpanan data), banyaknya hal yang menghabiskan sumber daya secara serius, dan kebuntuan yang disebabkan oleh transaksi yang bersaing untuk mendapatkan sumber daya akan meningkatkan jaringan I/ O Atau konsumsi CPU.
3. Jika sesi digunakan, IIS akan menggunakan lebih banyak memori untuk mempertahankan status, dan konsumsi memori dapat menyebabkan memori fisik tidak mencukupi, menyebabkan seringnya pertukaran antara memori fisik dan memori tambahan, menyebabkan eksekusi kode terhenti dan respons web diblokir. .
4. Karena kurangnya respons akses yang tepat waktu, akan menyebabkan kegagalan akses halaman web, menyebabkan pengguna melakukan penyegaran, sehingga memperburuk permintaan sumber daya seperti CPU dan memori.
Faktanya, mengingat aplikasi web umum, seringkali eksekusi kode dinamis tidak diperlukan.
2. Klasifikasi cache asp
Untuk meringkas tanpa otorisasi, cache asp dapat dibagi menjadi dua kategori:
1. Tembolok berkas
Apa yang disebut cache file didasarkan pada penilaian logis bahwa eksekusi spesifik ASP tertentu tidak akan berubah secara signifikan dalam jangka waktu tertentu, sehingga konten disimpan dalam bentuk HTML statis, dan kemudian teknologi pengalihan web digunakan untuk memungkinkan klien untuk mengakses file statis, untuk memenuhi kebutuhan pengurangan CPU, sumber daya database, dll. Ada banyak aplikasi seperti itu. Misalnya, banyak forum membuat ulang seluruh postingan menjadi file statis saat membalas postingan, dan kemudian mengalihkannya, seperti forum donews.com. Ada juga efek samping (keuntungan) dari sifat statis - hal ini dapat dengan mudah dimasukkan oleh mesin pencari seperti Google. Beberapa sistem rilis berita telah mengadopsi teknologi ini.
2. Cache fragmen file
Yang disebut file cache juga didasarkan pada penilaian logis. Bagian tertentu dari data (biasanya diperoleh dengan query database berkapasitas besar yang membutuhkan sumber daya) tidak akan berubah dalam jangka waktu tertentu, sehingga kita dapat menyimpan data tersebut di dalam. berbentuk file. Bila diperlukan, Data dapat diperoleh dengan membaca file untuk menghindari bertambahnya beban pada database. Misalnya, kami biasanya menyimpan beberapa data dalam format XML, lalu menggunakannya Beginilah cara forum CSDN ditangani.
3. Cache memori utama
Selain itu, Anda juga dapat mempertimbangkan caching di memori, menyimpan konten yang memerlukan respons tepat waktu di memori, dan segera memindahkannya dari penyimpanan cepat setelah akses diperlukan. Jika sejumlah besar kebutuhan akses terkonsentrasi pada beberapa halaman kecil atau jika memori utama cukup besar, menurut saya menggunakan cache memori utama pasti dapat meningkatkan kinerja akses web secara signifikan.
3. Bagaimana menerapkan/menggunakan cache
Masalah-masalah berikut perlu dipertimbangkan ketika menerapkan caching:
1. Halaman mana yang tidak akan berubah dalam waktu singkat?
Analisis situs Anda sendiri, ada banyak halaman seperti ini. Misalnya, sebuah situs web biasanya memiliki kolom berita dan informasi. Kolom ini biasanya diposting oleh pengelola situs pada waktu tertentu dalam sehari, dan halamannya jarang diubah setelahnya. Maka halaman-halaman ini cocok untuk cache file statis. Faktanya, inilah yang disebut sistem rilis berita, jadi Anda juga dapat merujuk pada ide sistem ini untuk mengubah halaman ASP dinamis asli Anda.
2. Halaman-halaman tersebut dibuat dengan logika yang sama untuk semua pengunjung (yaitu pengunjung tidak dibedakan).
Selain kolom seperti berita dan informasi di mana semua pengunjung melihat antarmuka yang sama, aplikasi yang memakan sumber daya seperti forum umumnya dapat dirancang untuk menghasilkan logika terpadu (postingan yang sama akan dilihat secara sama oleh tiga orang dan tiga orang). halaman aplikasi tersebut, kami juga Ini dapat dicapai dengan menggunakan cache statis. Anda juga dapat mempertimbangkan untuk memecah data dan menggunakan teknologi skrip untuk memprosesnya di luar kemampuan pemrosesan server, yaitu browser klien.
3. Biaya dan keuntungan menggunakan caching.
Yang utama adalah ruang untuk waktu (respons). Gunakan teknologi caching untuk melakukan pra-pemrosesan konten yang sering dibutuhkan di masa mendatang guna meningkatkan daya tanggap server web dan, yang lebih penting, memenangkan hati pengunjung.
Dampaknya adalah permintaan ruang web meningkat, dan pada saat yang sama, efek akses mungkin terpengaruh.
Namun menurut saya caching yang tepat memiliki lebih banyak keuntungan daripada kerugian.
4. Tempat-tempat tersebut tidak cocok untuk cache
Pada halaman kueri dinamis, konten kueri setiap orang berbeda, sehingga hasil tampilan berbeda, sehingga kecil kemungkinannya untuk menyimpan hasil kueri dalam cache, sehingga cache lebih rumit dan pemanfaatan cache rendah, sehingga mengakibatkan biaya manajemen yang tinggi (dengan asumsi Anda melakukan cache 1000 kata kunci query, lalu mengatur korespondensi antara kata kunci tersebut dan cache juga merepotkan).
4. Contoh analisis
Misalkan tata letak asli forum saran adalah sebagai berikut:
Di bawah direktori root:
halaman beranda default.asp, biasanya sorotan, rekomendasi, dll.
listBorad.asp File ini mencantumkan nama dan perkenalan semua kolom. Jika membawa parameter MainBID, berarti kolom di bawah bagian tersebut akan dicantumkan.
listThread.asp Jika file ini tidak membawa parameter apa pun, berarti semua postingan terdaftar, dan jika membawa MainBID, berarti semua postingan di blok tertentu terdaftar. Jika subBID dibawa, berarti mencantumkan postingan di kolom tertentu. Jika parameter halaman dibawa, topik dicantumkan dalam halaman.
ViewThread.asp mencantumkan konten postingan. Kami berasumsi bahwa postingan tersebut ditampilkan sebagai komentar, dan komentar apa pun dicantumkan di bagian akhir. Parameter ID adalah postingan yang akan ditampilkan.
Reply.asp merespons sebuah postingan dan membawa parameter Id untuk merespons sebuah postingan.
Yang lainnya tidak akan dibahas untuk saat ini.
Dari penjelasan di atas kita dapat melihat bahwa jika semua dilakukan menggunakan ASP/PHP asli, maka eksekusi hampir setiap file asp memerlukan operasi database, frequent query, dan query multi-tabel. Anda harus tahu bahwa menanyakan database pada akhirnya akan menyebabkan penurunan kinerja dan kecepatan respons, yang akan mempengaruhi lambatnya penelusuran pengunjung dan tidak kondusif bagi kualitas web. Yang lebih penting bagi dua orang A dan B, jika mengakses ViewThread.asp dan sejenisnya, jika ID-nya sama, maka berkali-kali mereka akan melihat konten yang sama (kode HTML yang diterima browser mereka hampir sama). sama), tetapi untuk konten yang sama, server perlu membuka koneksi database, menanyakan, membaca catatan, menampilkan, menutup catatan, dan koneksi database. . . . Jika lebih banyak orang mengakses operasi berikut yang menghabiskan sumber daya server, hasil akhirnya adalah orang-orang tersebut mengonsumsi lebih banyak sumber daya server. Faktanya, upaya berulang-ulang untuk konten yang sama dapat dihindari dengan menggunakan teknologi caching untuk pengoptimalan. Misalnya:
Setelah mengirimkan konten di reply.asp, kami segera memanggil fungsi statis dan menyimpan seluruh konten postingan sebagai file html statis seperti viewThread_xxxx.htm. Dalam keadaan normal, saat mengakses viewThread.asp?ID=xxxx, sistem secara otomatis Redirect ke file statis yang sesuai viewThreadxxxx.htm. Dengan cara ini, ketika sebuah postingan tidak memiliki rilis terbaru, konten statis tersebut akan selalu diberikan kepada pemirsa; setelah ada kiriman baru, postingan tersebut akan diperbarui ke file statis. Dengan cara ini, banyak operasi database akan disimpan dan kecepatan responsnya akan sangat meningkat.
listBorad.asp juga dapat diimplementasikan secara statis. Kita dapat menganalisis parameter yang dibawanya, mengatur nama file cache ke listBoard_xx.htm, dan memperbarui listBoard_xxx.htm saat menambahkan kolom baru. listThread.asp serupa, hanya saja karena memiliki lebih banyak parameter, akan ada banyak file cache. Jika Anda ingin menyimpan listThread.asp? subBID=xxx&page=2, maka file statis yang sesuai adalah listThread_xxx_p2.htm. Hal yang sama berlaku untuk default.asp.
Jadi bagaimana Anda mengetahui kapan harus memperbarui? Kapan akan diperbarui?
Membahas listThread.asp? subBID=xxx&page=2, kami mengekstrak subID dan halaman saat menjalankan listThread.asp, lalu mendeteksi apakah listThread_xxx_p2.htm ada di sini file statis. Perhatikan bahwa ketidakhadiran di sini berarti ada konten baru yang perlu diperbarui.
Lalu bagaimana cara menyebabkan file tersebut tidak ada? menghapus. Saat kita memublikasikan postingan baru, menghapus postingan, atau memindahkan postingan, kita dapat menghapus semua file statis seperti listThread_xxx_p2.htm. Ini memberitahu Anda kapan harus melakukan cache.
Sekarang tinggal satu pertanyaan lagi, bagaimana cara menghasilkan file statis?
Kami mencatat, hal yang sama yang kami sebutkan sebelumnya. Kita dapat membuat salinan default.asp, listThread.asp, dll. sebelum transformasi, bernama default_d.asp, listThread_2.asp, dan di direktori yang sama (secara teoritis listThtrad.asp?s Hasil akses ubID=123 dan LISTtHREAD_D.ASP?SUBID=123 akan sama), jadi dalam logika yang perlu menghasilkan file statis, kami memanggil salinan sebelum transformasi melalui permintaan akses WEB, mendapatkan kode html, dan menyimpannya itu Untuk file statis. Permintaan web ini sebenarnya setara dengan server itu sendiri yang melihat HTML yang akan dikeluarkan sebelum browser sebenarnya mengakses konten statis, dan kemudian mengembalikan kode-kode ini dan menyimpannya sebagai file statis menggunakan fungsi operasi file. Dengan cara ini, file cache dibuat sebelum penampil sebenarnya.
Solusi seperti itu hampir tidak akan menyentuh tata letak aslinya, dan hampir tidak pernah menyebabkan kesalahan seperti 404 karena modifikasi. Kedua, file statis juga akan membantu situs Anda mudah terindeks oleh mesin pencari seperti Google. Mengapa tidak?
Terakhir, sebagai pengingat, melalui akses web, di lingkungan pemrograman ASP, banyak orang menggunakan komponen xmlHTTP untuk mengakses, yang akan menimbulkan banyak masalah. xmlhttp sendiri akan menyimpan sumber daya yang diminta dalam cache, menyebabkan konten yang kami minta melalui komponen ini bukan yang terbaru, sehingga menyebabkan kebingungan logis. Oleh karena itu, Anda harus memilih objek xml Server http atau komponen winhttp untuk mengimplementasikan sumber daya permintaan web.
Menggunakan teknologi caching di ASP dapat sangat meningkatkan kinerja situs web Anda. Faktanya, metode penerapan ini sangat sederhana. Ini akan menjelaskan cara kerja caching di server dan bagaimana Anda dapat menggunakan metode yang disebut teknologi koneksi ADO.
Sebelum memperkenalkan teknologi ini, mari kita jelaskan apa sebenarnya teknologi caching ASP.
Yang disebut cache sebenarnya adalah untuk membuka ruang di memori untuk menyimpan data. Dengan menggunakan cache, Anda tidak perlu sering-sering mengakses data yang Anda simpan di harddisk kesusahan melihat hard disk yang malang menjadi penuh. Saya tersiksa dengan membaca data. Setelah Anda menjalankan kueri dan memasukkan hasil kueri ke dalam cache, Anda dapat dengan cepat mengakses data berulang kali. Dan jika Anda tidak memasukkan data ke dalam cache, saat Anda menjalankan kueri lagi, server akan menghabiskan proses mengambil dan mengurutkannya dari database.
Ketika data disimpan dalam cache, waktu yang dihabiskan saat melakukan kueri lagi sebagian besar adalah waktu untuk menampilkan data.
Dengan kata lain, kita tidak boleh memasukkan data yang perlu sering diubah ke dalam cache server. Kita harus memasukkan data yang lebih sedikit perubahannya tetapi perlu sering diakses ke dalam cache.
Sekarang kita akan membahas bagaimana ASP menggunakan teknologi caching di sisi server, dan selanjutnya kita akan membahas bagaimana ASP menggunakannya di sisi klien.
Teknologi cache.
Bila Anda memiliki sejumlah besar data (statis, yaitu lebih sedikit perubahan) yang perlu ditampilkan ke klien, Anda dapat mempertimbangkan untuk menggunakan teknologi cache sisi server. Teknologi ini sangat cocok untuk situs web dengan konsistensi gaya tampilan yang kuat (haha, tidak mudah digunakan untuk situs web non-mainstream.)
Sebenarnya cara penerapannya sangat sederhana, Anda hanya perlu melihat contoh sederhana di bawah ini untuk memahaminya.
Ini adalah contoh program untuk menampilkan kategori buku
File DisplayBooks.ASP:
< %@ BAHASA=JavaScript % >
<html>
<tubuh>
<metode formulir=posting>
Klasifikasi buku; < %= getBooksListBox() % >
<p>
< jenis masukan=kirim >
<%
fungsi getBooksListBox()
{
BooksListBox = Aplikasi(BooksListBox)
jika (BooksListBox != null) mengembalikan BooksListBox;
crlf = String.fromCharCode(13, 10)
BooksListBox = <pilih nama=Buku> + crlf;
SQL = Pilih * DARI Buku diurutkan BERDASARKAN Nama;
cnnBooks = Server.CreateObject(ADODB.Connection);
cnnBooks.Open(Buku, Admin,);
Buku pertama = cnnBooks.Execute(SQL);
fldBookName = Buku pertama(Nama Buku);
sementara (!rstBooks.EOF){
KotakDaftar Buku = KotakDaftar Buku + <pilihan> +
fldNamaBuku + + crlf;
rstBooks.MoveNext();
}
KotakDaftar Buku = KotakDaftar Buku +
Aplikasi(KotakDaftar Buku) = KotakDaftar Buku
kembalikan KotakDaftar Buku;
}
%>
Ini sangat sederhana, sebenarnya menggunakan teknologi Aplikasi yang sangat sederhana, dan perbedaannya hanya satu kalimat:
Aplikasi(KotakDaftar Buku) = KotakDaftar Buku
Anda dapat memverifikasinya dan Anda akan menemukan bahwa jumlah permintaan di server akan berkurang banyak. Situasi ini sangat cocok untuk konten situs web yang tidak terlalu sering diperbarui, misalnya Anda hanya memperbaruinya sekali sehari (atau dalam waktu lama).
Selanjutnya kita akan membahas teknologi caching sisi klien. Teknologi ini disebut juga teknologi koneksi ADO terputus (tingkat terjemahannya terlalu rendah, mengapa terdengar canggung). Teknologi ini terutama digunakan untuk menyimpan informasi pribadi pengguna, seperti kata sandi pengguna, nama kode, dll. Ini terutama menggunakan beberapa properti ADO. Sekaligus menjawab pertanyaan apakah objek ADO dapat digunakan di Applocation yang disebutkan beberapa netizen. Penjelasannya kurang jelas, biarkan kode yang berbicara:
File GLOBAL.ASA:
< !--METADATA TYPE=TypeLib FILE=C:/Program Files/Umum
File/sistem/ado/msado15.dll-->
< BAHASA SKRIP=VBScript RUNAT=Server >
Sub Aplikasi_OnStart
SQL = Pilih Nama Pengguna, Kata Sandi DARI Info Pengguna
cnnPengguna = DSN=Pengguna
Setel rsUsers = Server.CreateObject(ADODB.Recordset)
'Perhatikan bahwa dua kalimat berikut digunakan untuk mengimplementasikan teknologi ADO yang disebut pemutusan tersedia.
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly
' Putuskan sambungan RecordSet dari database
rsCustomers.ActiveConnection = Tidak ada
Setel Aplikasi(rsCustomers) = rsCustomers
Akhiri Sub
Pengguna File.ASP
<%
'Metode klon memungkinkan setiap pengguna memiliki koleksi RecordSet sendiri
Setel Pengguna Anda = Aplikasi (rsUsers).Klon
Tetapkan Nama Pengguna = Pengguna Anda(Nama Pengguna)
Tetapkan Kata Sandi = Pengguna Anda (Kata Sandi)
Lakukan Sampai Pengguna Anda.EOF
%>
Nama pengguna: < %= Nama Pengguna % > Kata sandi pengguna: < %= Kata Sandi % >
<%
Pengguna Anda.MoveNext
Lingkaran
%>
Mengenai peran caching, saya rasa tidak perlu dijelaskan lebih lanjut, perannya sudah jelas, terutama untuk website dengan jumlah informasi yang sangat besar atau halaman database yang lengkap mempercepat efisiensi eksekusi ASP, mengurangi beban pada server Dongwang adalah yang paling menonjol dalam aspek ini. Misalnya, versi dvbbs7.1.0 saat ini telah membawa pemanfaatan cache ke tingkat yang lebih tinggi. Sebagian besar operasi di depan dan belakang terkait dengan cache, dan sekarang Yang digunakan di Dongwang adalah kelas cache Anak Hilang Kota yang Hilang:
<%
Kelas Cls_Cache
'===Petunjuk penggunaan======
'Modul ini adalah ciptaan asli Dongwang Pioneer, penulis: Lost City Prodigal. Jika Anda menggunakan modul jenis ini, mohon jangan hapus deskripsi ini. Komentar ini tidak mempengaruhi kecepatan eksekusi.
'Peran: Kelas manajemen cache dan cache
'Variabel publik: Waktu kedaluwarsa waktu muat ulang (dalam menit), nilai defaultnya adalah 14400
'MaxCount adalah nilai maksimum objek yang di-cache. Jika melebihi, objek dengan penggunaan lebih sedikit akan dihapus secara otomatis. Nilai defaultnya adalah 300
'CacheName adalah nama total grup cache. Nilai defaultnya adalah Dvbbs. Jika ada lebih dari satu grup cache di sebuah situs, nilai ini perlu diubah secara eksternal.
'Atribut: Nama mendefinisikan nama objek cache, atribut hanya tulis.
'Atribut:nilai Membaca dan menulis data cache.
'Fungsi: ObjIsEmpty() menentukan apakah cache saat ini telah kedaluwarsa.
'Metode: DelCahe(MyCacheName) secara manual menghapus objek cache, parameternya adalah nama objek cache.
'=========
Waktu Muat Ulang Publik,MaxCount,CacheName
LocalCacheName Pribadi, CacheData, DelCount
Sub Kelas Pribadi_Inisialisasi()
Reloadtime=14400 'Waktu kedaluwarsa (satuan: menit)
CacheName=Dvbbs 'Nama total grup cache
Akhiri Sub
Sub SetCache Pribadi (SetName, NewValue)
Aplikasi.Kunci
Aplikasi(NamaSet) = Nilai Baru
Aplikasi.buka kunci
Akhiri Sub
Properti Publik Biarkan Nama(ByVal vNewValue) 'Nama objek cache
LocalCacheName=LCase(vNilai Baru)
Properti Akhir
Properti Publik Biarkan Nilai(ByVal vNewValue) 'Membaca dan menulis data cache
Jika LocalCacheName<> Lalu
CacheData=Aplikasi(NamaCache&_&NamaCacheLokal)
Jika IsArray(CacheData) Lalu
CacheData(0)=vNilai Baru
Data Cache(1)=Sekarang()
Kalau tidak
Redupkan Ulang Data Cache(2)
CacheData(0)=vNilai Baru
Data Cache(1)=Sekarang()
Akhiri Jika
SetCache Nama Cache&_&NamaCache Lokal,DataCache
Kalau tidak
Err.Raise vbObjectError + 1, DvbbsCacheServer, silakan ubah CacheName.
Akhiri Jika
Properti Akhir
Properti Publik Dapatkan Nilai()
Jika LocalCacheName<> Lalu
CacheData=Aplikasi(Nama Cache&_&NamaCache Lokal)
Jika IsArray(CacheData) Lalu
Nilai=Data Tembolok(0)
Kalau tidak
Err.Naikkan vbObjectError + 1, DvbbsCacheServer, CacheData Kosong.
Akhiri Jika
Kalau tidak
Err.Raise vbObjectError + 1, DvbbsCacheServer, silakan ubah CacheName.
Akhiri Jika
Properti Akhir
Fungsi Publik ObjIsEmpty() 'Tentukan apakah cache saat ini telah kedaluwarsa
ObjIsEmpty=Benar
CacheData=Aplikasi(NamaCache&_&NamaCacheLokal)
Jika Bukan IsArray(CacheData) Kemudian Keluar dari Fungsi
Jika Bukan IsDate(CacheData(1)) Kemudian Keluar dari Fungsi
Jika DateDiff(s,CDate(CacheData(1)),Now()) < 60*Reloadtime Maka ObjIsEmpty=False
Fungsi Akhir
Sub Pribadi makeEmpty(SetName) 'Lepaskan memori
Aplikasi.Kunci
Aplikasi(NamaSet) = Kosong
Aplikasi.buka kunci
Akhiri Sub
Sub Publik DelCache(MyCacheName) 'Hapus cache
makeEmpty(NamaCache&_&NamaCacheSaya)
Akhiri Sub
Kelas Akhir
'Setel WydCache=Cls_Cache Baru
'WydCache.Reloadtime=0.5 'Tentukan waktu kedaluwarsa (dalam menit)
'WydCache.CacheName=pages 'Tentukan nama cache
'IF WydCache.ObjIsEmpty() Lalu ''Tentukan apakah tersedia (termasuk masa berlakunya dan apakah kosong)
'Respon.tulis WydCache.Value
'Kalau tidak
'.............
'Daftar Lompatan Papan=xxx
'WydCache.Value=BoardJumpList 'Tulis konten
'Respon.tulis BoardJumpList
'Akhiri jika
'
'mycache.DelCache (nama cache) menghapus cache
%>