Metode 1: Cache data dalam metode init() servlet.
Setelah server aplikasi menginisialisasi instance servlet dan sebelum melayani permintaan klien, ia memanggil metode init() servlet. Dalam siklus hidup servlet, metode init() hanya akan dipanggil satu kali. Dengan menyimpan beberapa data statis dalam metode init() atau menyelesaikan beberapa operasi yang memakan waktu dan hanya perlu dilakukan satu kali, kinerja sistem dapat ditingkatkan secara signifikan.
Misalnya, membuat kumpulan koneksi JDBC dalam metode init() adalah contoh terbaik. Misalkan kita menggunakan antarmuka DataSource jdbc2.0 untuk mendapatkan koneksi database. Dalam keadaan normal, kita perlu mendapatkan data tertentu melalui sumber JNDI. Kita dapat membayangkan bahwa dalam aplikasi tertentu, jika kueri JNDI dijalankan untuk setiap permintaan SQL, kinerja sistem akan turun tajam. Solusinya adalah kode berikut, yang menyimpan DataSource dalam cache sehingga masih dapat digunakan selama panggilan SQL berikutnya:
Berikut ini adalah fragmen referensi:
kelas publik ControllerServlet memperluas HttpServlet{
javax.sql.DataSource testDS pribadi = null;
public void init (konfigurasi ServletConfig) menampilkan ServletException {
super.init(konfigurasi);
Konteks ctx = null;
mencoba{
ctx = InitialContext baru();
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}menangkap(NamingException ne){ne.printStackTrace();}
}menangkap(Pengecualian e){e.printStackTrace();}
}
javax.sql.DataSource getTestDS(){ publik
kembalikan tesDS;
}
...
...
}
Metode 2: Nonaktifkan servlet dan JSP reload otomatis (auto-reload)
Servlet/JSP menyediakan teknologi praktis, yaitu teknologi reload otomatis, yang memberikan pengembang lingkungan pengembangan yang baik ketika Anda mengubah halaman servlet dan JSP tanpa harus me-restart server aplikasi. Namun, teknologi ini merupakan kerugian besar pada sumber daya sistem selama tahap pengoperasian produk, karena akan membawa beban besar pada pemuat kelas mesin JSP. Oleh karena itu, mematikan fungsi isi ulang otomatis sangat membantu untuk meningkatkan kinerja sistem.
Metode 3: Jangan menyalahgunakan HttpSession.
Di banyak aplikasi, program kami perlu menjaga status klien agar halaman dapat berkomunikasi satu sama lain. Namun sayangnya, karena HTTP pada dasarnya tidak memiliki kewarganegaraan, maka HTTP tidak dapat menyimpan status klien. Oleh karena itu, server aplikasi umum menyediakan sesi untuk menyimpan status klien. Di server aplikasi JSP, fungsi sesi diimplementasikan melalui objek HttpSession, namun meskipun nyaman, namun juga membawa banyak beban pada sistem. Karena setiap kali Anda memperoleh atau memperbarui suatu sesi, operator sistem harus melakukan operasi serialisasi yang memakan waktu. Anda dapat meningkatkan kinerja sistem melalui metode pemrosesan berikut untuk HttpSession.
Jika tidak diperlukan, pengaturan default untuk HttpSession di halaman JSP harus dimatikan. Setiap halaman JSP akan membuat HttpSession secara default jika Anda tidak menentukannya secara eksplisit. Jika Anda tidak perlu menggunakan sesi di JSP Anda, Anda dapat menonaktifkannya melalui indikator halaman JSP berikut:
Berikut ini adalah fragmen referensi:
<%@ halaman sesi="salah"%>
Jangan menyimpan objek data besar di HttpSession: Jika Anda menyimpan objek data besar di HttpSession, server aplikasi akan membuat serialisasinya setiap kali dibaca atau ditulis, sehingga menambah beban ekstra pada sistem. Semakin besar objek data yang Anda simpan di HttpSession, maka kinerja sistem akan semakin cepat menurun.
Bila Anda tidak lagi memerlukan HttpSession, lepaskan sesegera mungkin: Bila Anda tidak lagi memerlukan sesi, Anda dapat melepaskannya dengan memanggil metode HttpSession.invalidate(). Cobalah untuk mengatur batas waktu sesi sesingkat mungkin: Di server aplikasi JSP, ada batas waktu sesi default. Ketika pelanggan tidak melakukan operasi apa pun setelah waktu ini, sistem akan secara otomatis melepaskan sesi yang relevan dari memori. Semakin besar batas waktu yang ditetapkan, semakin rendah performa sistem, jadi cara terbaik adalah mencoba menjaga nilainya serendah mungkin.
Metode 4: Mengompresi keluaran halaman
adalah cara yang baik untuk mengatasi redundansi data, terutama saat ini ketika bandwidth jaringan tidak cukup berkembang. Beberapa browser mendukung gzip (GNU zip) untuk mengompres file HTML. Metode ini dapat mengurangi waktu pengunduhan file HTML secara signifikan. Oleh karena itu, jika halaman HTML yang dihasilkan oleh halaman servlet atau JSP dikompres, pengguna akan merasakan kecepatan penelusuran halaman akan sangat cepat. Sayangnya, tidak semua browser mendukung kompresi gzip, tetapi Anda dapat memeriksa program Anda apakah browser klien mendukungnya. Berikut cuplikan kode penerapan metode tersebut:
Berikut cuplikan kutipannya:
public void doGet (permintaan HttpServletRequest, respons HttpServletResponse)
melempar IOException, ServletException {
Aliran Keluaran keluar = null;
Pengkodean string = request.getHeader("Terima-Encoding");
if (pengkodean != null && pengkodean.indexOf("gzip") != -1){
request.setHeader("Pengkodean Konten" , "gzip");
keluar = new GZIPOutputStream(permintaan.getOutputStream());
}
else if (pengkodean != null && pengkodean.indexOf("comdivss") != -1){
request.setHeader("Pengkodean Konten" , "comdivss");
keluar = ZIPOutputStream baru(permintaan.getOutputStream());
}kalau tidak{
keluar = permintaan.getOutputStream();
}
...
...
}
Metode 5: Gunakan kumpulan thread.
Server aplikasi membuat thread untuk memproses setiap permintaan klien yang berbeda secara default, dan menetapkan metode service() kepada mereka. Ketika pemanggilan metode service() selesai, thread yang sesuai juga Kemudian dibatalkan . Karena membuat dan menghancurkan thread menghabiskan sumber daya sistem tertentu, mode default ini mengurangi kinerja sistem. Tapi untungnya kita bisa mengubah situasi ini dengan membuat thread pool.
Selain itu, kita juga perlu mengatur jumlah minimum thread dan jumlah maksimum thread untuk kumpulan thread ini. Ketika server aplikasi dimulai, itu akan membuat kumpulan thread dengan jumlah yang sama dengan jumlah minimum thread. Ketika pelanggan memiliki permintaan, thread dikeluarkan dari pool untuk diproses dimasukkan kembali ke dalam kolam tengah. Jika jumlah thread di pool tidak mencukupi, sistem akan secara otomatis menambah jumlah thread di pool, namun jumlah totalnya tidak boleh melebihi jumlah maksimum thread. Dengan menggunakan kumpulan thread, ketika permintaan klien meningkat tajam, beban sistem akan menunjukkan kurva ke atas yang mulus, sehingga meningkatkan skalabilitas sistem.
Metode 6: Pilih mekanisme penyertaan halaman yang benar.
Ada dua metode di JSP yang dapat digunakan untuk memasukkan halaman lain:
1. Gunakan direktif include.
Berikut ini adalah fragmen referensi:
<%@ includee file=”test.jsp” %>
2. Gunakan indikator jsp.
Berikut ini adalah cuplikan referensinya:
<jsp:termasuk halaman="test.jsp" flush="true"/>
Dalam praktiknya, ditemukan bahwa jika cara pertama digunakan, kinerja sistem bisa lebih tinggi.
Metode 7: Menentukan dengan benar siklus hidup javabeans.
Salah satu aspek kuat dari JSP adalah dukungannya terhadap javabeans. JavaBeans dapat disisipkan langsung ke halaman JSP dengan menggunakan tag jsp:useBean di halaman JSP. Berikut cara menggunakannya:
Berikut cuplikan kutipannya:
<jsp:useBean id="name" scope="halaman|permintaan|sesi|aplikasi"
kelas="paket.namakelas" type="typeName">
</jsp:useBean>
Atribut scope menunjukkan siklus hidup kacang ini. Siklus hidup default adalah halaman. Jika Anda tidak memilih siklus hidup bean dengan benar, hal itu akan mempengaruhi kinerja sistem.
Misalnya, jika Anda hanya ingin menggunakan kacang tertentu dalam satu permintaan, tetapi Anda mengatur siklus hidup kacang ke sesi, maka ketika permintaan berakhir, kacang akan tetap berada di memori kecuali sesi Timeout atau pengguna menutup browser. Hal ini akan menghabiskan sejumlah memori dan menambah beban kerja pengumpul sampah JVM secara tidak perlu. Oleh karena itu, menetapkan siklus hidup kacang yang benar dan membersihkannya sesegera mungkin setelah misinya selesai akan meningkatkan kinerja sistem.
Beberapa metode bermanfaat lainnya
1. Cobalah untuk tidak menggunakan operator "+" dalam operasi koneksi string: Dalam pemrograman java, kita sering menggunakan operator "+" untuk menghubungkan beberapa string, tetapi Anda mungkin tidak pernah memikirkannya kinerja sistem? Karena string adalah konstanta, JVM akan menghasilkan beberapa objek sementara. Semakin banyak "+" yang Anda gunakan, semakin banyak objek sementara yang dihasilkan, yang juga akan berdampak pada kinerja sistem. Solusinya adalah dengan menggunakan objek StringBuffer alih-alih operator "+".
2. Hindari penggunaan metode System.out.println(): Karena System.out.println() adalah panggilan sinkron, yaitu ketika memanggilnya, operasi I/O disk harus menunggu selesai, jadi kita harus mencoba untuk menghindari penggunaannya. Namun ini adalah alat yang sangat diperlukan dan berguna saat kita men-debug program. Untuk mengatasi kontradiksi ini, saya sarankan Anda menggunakan alat Log4j ( http://Jakarta.apache.org ), yang dapat memfasilitasi proses debug tanpa Metode seperti System.out. .println() akan dihasilkan.
3. Pertukaran antara ServletOutputStream dan PrintWriter: Menggunakan PrintWriter mungkin membawa sedikit overhead, karena mengubah semua keluaran asli menjadi aliran karakter untuk keluaran, jadi jika digunakan sebagai keluaran halaman, sistem harus menanggung proses konversi. Tidak ada masalah jika Anda menggunakan ServletOutputStream sebagai keluaran halaman, tetapi keluarannya dalam biner. Oleh karena itu, pro dan kontra dari keduanya harus dipertimbangkan dalam penerapan praktisnya.
Ringkasan
Tujuan artikel ini adalah untuk meningkatkan kinerja aplikasi Anda melalui beberapa teknik penyetelan untuk servlet dan JSP, dan oleh karena itu meningkatkan kinerja seluruh aplikasi J2EE. Melalui teknik penyetelan ini, Anda dapat mengetahui bahwa bukan platform teknis tertentu (seperti perselisihan antara J2EE dan .NET) yang menentukan kinerja aplikasi Anda itu Hanya dengan begitu Anda dapat mengoptimalkan aplikasi Anda secara mendasar.