Metode 1: Cache data dalam metode init() pada servlet
Setelah server aplikasi menginisialisasi instance servlet dan sebelum melayani permintaan klien, server aplikasi 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 dapat terus digunakan selama panggilan SQL berikutnya:
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";
}
tangkapan(PenamaanPengecualian 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 pemuatan ulang otomatis, yang menyediakan lingkungan pengembangan yang baik bagi pengembang tanpa harus me-restart server aplikasi ketika Anda mengubah halaman servlet dan JSP. 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 dengan menangani HttpSession dengan cara berikut:
Jika tidak diperlukan, Anda harus mematikan pengaturan default HttpSession di halaman JSP: Jika Anda tidak menentukannya secara eksplisit, setiap halaman JSP akan membuat HttpSession secara default. Jika Anda tidak perlu menggunakan sesi di JSP Anda, Anda dapat menonaktifkannya melalui indikator halaman JSP berikut:
<%@ 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: Kompres keluaran halaman
Kompresi 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 bagaimana metode ini diterapkan:
public void doGet (permintaan HttpServletRequest, respons HttpServletResponse)
melempar IOException, ServletException
{
OutputStream keluar = nol
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 tepat
Ada dua cara untuk memasukkan halaman lain di JSP: 1. Gunakan indikator include (<%@ includee file="test.jsp" %>). 2. Gunakan indikator jsp (<jsp:includee page="test.jsp" flush="true"/>). Dalam praktiknya, saya menemukan bahwa jika Anda menggunakan cara pertama, kinerja sistem bisa lebih tinggi.
Metode 7: Tentukan dengan benar siklus hidup javabeans
Salah satu fitur canggih JSP adalah dukungannya terhadap javabeans. Dengan menggunakan tag <jsp:useBean> di halaman JSP, javabeans dapat disisipkan langsung ke halaman JSP. Berikut cara menggunakannya:
<jsp:useBean id="name" scope="page|request|session|application" class=
"package.className" 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.
metode lain
Usahakan untuk tidak menggunakan operator "+" dalam operasi penggabungan string: Dalam pemrograman Java, kita sering menggunakan operator "+" untuk menghubungkan beberapa string, tetapi Anda mungkin tidak pernah menyangka bahwa hal itu sebenarnya akan memengaruhi 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 "+".
Hindari penggunaan metode System.out.println(): Karena System.out.println() adalah panggilan sinkron, artinya, ketika memanggilnya, operasi I/O disk harus menunggu selesai, jadi kita harus mencoba menghindarinya menggunakannya. Namun ini adalah alat yang sangat diperlukan dan berguna saat kita men-debug program. Untuk mengatasi kontradiksi ini, saya sarankan Anda menggunakan alat Log4j, yang dapat memfasilitasi proses debug tanpa membuat metode System.out.println().
Pertukaran antara ServletOutputStream dan PrintWriter: Menggunakan PrintWriter mungkin membawa sedikit overhead, karena ia mengubah semua keluaran mentah 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.
Meringkaskan
Tujuan artikel ini adalah untuk meningkatkan kinerja aplikasi Anda secara signifikan melalui beberapa teknik penyetelan untuk servlet dan JSP, dan dengan demikian 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!