1. Apa itu cache ASP/mengapa harus di-cache? Ketika situs web Anda pertama kali dibuat menggunakan teknologi ASP, Anda mungkin merasakan kemudahan yang dibawa oleh teknologi halaman web dinamis ASP, serta kebebasan untuk memodifikasi 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 dapat diringkas tanpa otorisasi. Cache ASP dapat dibagi menjadi dua kategori:
1. File caching. Yang disebut file caching didasarkan pada penilaian logis bahwa eksekusi spesifik ASP tertentu tidak akan berubah secara signifikan dalam jangka waktu tertentu, oleh karena itu, konten disimpan dalam bentuk HTML statis, dan kemudian teknologi pengalihan web digunakan untuk memungkinkan pelanggan mengakses file statis secara ujung ke ujung untuk mengurangi kebutuhan CPU, sumber daya basis data, 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 - dapat dengan mudah diindeks oleh mesin pencari seperti Google. Beberapa sistem rilis berita telah mengadopsi teknologi ini.
2. Caching fragmen file. Yang disebut caching file juga didasarkan pada penilaian logis. Bagian tertentu dari data (biasanya diperoleh dengan menanyakan database berkapasitas besar yang menghabiskan sumber daya) tidak akan berubah dalam jangka waktu tertentu. Data tersebut dapat kita simpan dalam bentuk file, bila diperlukan data dapat diperoleh dengan membaca file agar tidak menambah beban 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 begitu akses diperlukan, konten tersebut akan segera ditransfer dari penyimpanan cepat. 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. Cara menerapkan/menggunakan cache. Untuk mengimplementasikan cache, Anda perlu mempertimbangkan masalah berikut:
1. Halaman mana yang tidak akan berubah dalam waktu singkat?
Analisis situs Anda sendiri, ada banyak halaman seperti itu. 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 menyimpan cache halaman kueri dinamis. Konten kueri setiap orang berbeda, sehingga hasil tampilan berbeda, sehingga tidak mungkin untuk menyimpan hasil kueri dalam cache. Oleh karena itu, cache lebih rumit dan tingkat pemanfaatan cache rendah. menyebabkan masalah manajemen. Biayanya tinggi (dengan asumsi Anda menyimpan 1.000 kata kunci kueri dalam cache, maka mengelola korespondensi antara kata kunci tersebut dan cache juga merepotkan).
4. Contoh Analisis Asumsikan tata letak asli forum saran adalah sebagai berikut:
Di bawah direktori root:
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 mencantumkan semua postingan, dan jika membawa MainBID, berarti mencantumkan semua postingan di blok tertentu. 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 merespon postingan tertentu dan membawa parameter Id untuk membalas postingan tertentu.
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 queries, 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" ini, server perlu membuka koneksi database, kueri, 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 menjadi 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 bahwa "konten 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?subID=123 sama dengan LISTtHREAD_D.ASP ? Hasil akses SUBID=123 akan berupa konten yang sama), jadi dalam logika yang perlu menghasilkan file statis, kita memanggil salinan sebelum transformasi melalui permintaan akses WEB, mendapatkan kode html, dan menyimpannya sebagai 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 menggunakan teknologi caching di sisi klien.
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=JavaS
skrip % >
<html>
<tubuh>
<metode formulir=posting>
Klasifikasi buku; < %= getBooksListBox() % >
<p>
< jenis masukan=kirim >
<%
fungsi getBooksListBox()
{
KotakDaftar Buku = Aplikasi("KotakDaftar Buku")
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.Koneksi");
cnnBooks.Open("Buku", "Admin","");
Buku pertama = cnnBooks.Execute(SQL);
fldNamaBuku = 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. Pada saat yang sama, ini juga menjawab pertanyaan yang disebutkan beberapa netizen tentang apakah objek ADO dapat digunakan di Applocation. Penjelasannya kurang jelas, biarkan kode yang berbicara:
File GLOBAL.ASA:
< !–METADATA TYPE=”TypeLib” FILE=”C:Program FilesCommon
Filesystemadomsado15.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
%>