Perancah yang telah lama mendominasi bidang Javaee telah dipimpin dengan Spring Struts2 Mybatis/Hibernate;
Musim semi:
Musim semi bukan hanya untuk layanan Java. Sebagai implementasi Spring sebagai standar CGI, ini bukan hanya kerangka kerja di bidang Java, tetapi platform C# masih dapat bermanfaat; Spring menyediakan berbagai metode konfigurasi anotasi yang nyaman seperti abstraksi atau solusi terintegrasi bootde, yang sangat menyederhanakan basis proyek Javaee;
Selama penggunaan musim semi, kedua belah pihak dibedakan, beberapa adalah anotasi ringan, dan beberapa cenderung menjadi anotasi penuh.
Pertama -tama, premis anotasi adalah bahwa ia harus melalui proxy proxy, dinamis, statis, dan cGlib. Untuk anotasi ringan, sudutnya statis atau anotasi satu kali.
Misalnya, anotasi pengontrol, anotasi satu kali atau anotasi waktu kompilasi ini diinisialisasi dalam konteks proyek sebagai pemindaian satu kali implisit, dan anotasi terkait seperti layanan, memberikan instance objek ringan singleton. Dianggap sebagai pilihan pertama. Ini mengurangi biaya proxy dan refleksi selama periode runtime, dan juga menghemat sumber daya yang lebih baik untuk tumpukan runtime.
Jenis lain, seperti responseBody, adalah anotasi dinamis atau anotasi run-time. Setiap kali Anda meminta, refleksi anotasi akan dieksekusi. Anotasi periode berjalan tentu saja untuk menempati sumber daya.
Secara umum, anotasi yang tidak perlu dapat sepenuhnya diabaikan. Berdasarkan metode permintaan dan respons berdasarkan dasar -dasar servlet, tidak ada MVC, yang tidak dapat diselesaikan, mengambil parameter, parameter lewat, kembali, dll., Dan tidak perlu untuk anotasi selama runtime. Anotasi selama runtime tampaknya mengurangi jumlah kode. Untuk menebus berbagai kekurangan dalam proses ini, anotasi dinamis dari lingkaran akan dijalankan untuk menjalankan anotasi yang Anda gunakan di dalam metode ini. Untuk anotasi param yang ditulis dalam metode ini, kode apa yang hilang dibandingkan dengan menggunakan permintaan mendapatkan diri Anda sendiri? Hanya saja proses satu langkah asli telah ditambahkan untuk menambahkan lapisan intersepsi kode.
Bagaimana mengetahui apakah anotasi adalah anotasi dalam periode run-time atau kompilasi waktu sangat sederhana. Klik Ctrl+Mouse dan Anda akan melihat:
@Target ({elementType.type, elementType.method})
@Retention (retentionpolicy.runtime)
@Documented
Retensi jenis enumerasi ini sepenuhnya dan dengan jelas menggambarkan periode anotasi yang Anda gunakan.
Semua orang suka menggunakan singleton dengan Spring, yang merupakan cara yang sangat baik. Singleton tidak ada hubungannya dengan konkurensi itu sendiri, kecuali bahwa Anda harus membuatnya bersaing untuk identifikasi sumber daya.
Jika Anda harus memiliki banyak objek prototipe dalam proyek Anda, itu berarti Anda menyalahgunakan atau menggunakan objek yang salah. MVC pada dasarnya memiliki parameter dan pengembalian yang masuk. Setiap permintaan adalah utas. Respons permintaan terpisah memiliki apa yang mereka masukkan dan keluar, yang sepenuhnya terisolasi. Dari sini, ketika datang ke Mybatis, banyak orang menggunakan berbagai resmapper dalam konfigurasi mybatis, dan setiap kali berbagai kacang bolak -balik. Setelah permintaan, kacang sebagai parameter dan hasil harus sekali. Permukaan mybatis jelas untuk pemeliharaan SQL, yaitu dengan biaya mengurangi efisiensi JDBC. Maka tidak ada yang peduli tentang hal itu. Bagi mereka, kacang tidak memiliki apa -apa, dan mereka tidak mengerti atau peduli tentang GC. Jika mereka mendapatkan masalah, tambahkan memori dan tambahkan memori ke atas. Yang mereka selesaikan hanyalah masalah waktu, dan menggunakan ruang untuk bertukar waktu. Dengan parameter dan pemetaan hasil yang sama, maka jika Anda menggunakan peta JDK, yang mana yang lebih baik, secara alami adalah peta JDK sendiri.
Saya selalu dengan keras kepala percaya bahwa konsumsi objek JDK baru jauh lebih kecil daripada mendefinisikan kacang sendiri. Kenapa, maaf, aku juga tidak tahu. Jadi saya selalu datang ke peta dan peta pergi. Saat menggunakan mybatis, Anda harus mendeteksi dengan cermat apakah barang -barang Anda memberikan proksi ke kelas Anda? Metode ini sangat sederhana. Di log proyek, buka debug untuk melihat apakah log Anda dibuat SQLSession baru setiap saat. Jika ini masalahnya, Anda harus mencatat bahwa sesi mybatis Anda tidak dikumpulkan dan tidak diproksi oleh hal -hal. Jika ada SQL kompetitif dalam suatu metode, tidak ada kesalahan dalam maaf, tetapi ditemukan bahwa database tidak menjalankan SQL Anda. Segera, Anda akan menemukan bahwa kumpulan koneksi digunakan dengan sangat cepat dan akan sering membuat koneksi baru. Tentu saja, jika Anda tidak dapat menggunakan mybatis, jangan ragu, itu benar untuk tidak menggunakannya.
Mengapa kita harus mencoba menggunakan anotasi statis? Ini sangat sederhana. Kelas musim semi pada dasarnya adalah singleton. Proyek -proyeknya cukup besar, dan instance kacang sudah cukup. Apa yang diambil singleton ini? Contoh objek ada di ruang tumpukan dan dirujuk dalam tumpukan. Jadi kapan GC mendaur ulang objek dari singleton ini? apa yang kamu pikirkan? Oleh karena itu, ketika berdasarkan anotasi, cobalah untuk meminimalkan penggunaan proxy dinamis. Tinggalkan lebih banyak sumber daya untuk digunakan jika diperlukan.
Di masa lalu, kita akan mengatakan bahwa tidak ada tumpukan, tetapi sekarang kumpulan string konstan JDK1.7 telah memasuki tumpukan.
Mana yang lebih baik, jenis kompilasi atau interpretabilitas? Tentu saja, itu analitik, dan jenis kompilasi mirip dengan model mediasi. Oleh karena itu, jauh lebih sulit untuk membangun bahasa yang dikompilasi yang sangat baik daripada bahasa yang ditafsirkan.
Struktur web sangat jelas. Pertama, masih dalam konteks, dan kemudian serangkaian komponen secara berurutan. Hal terpenting adalah komponen servlet, yang merupakan standar Javaee, dan komponen web lainnya adalah standar protokol, yang harus dimiliki semua orang. Maka Anda akan melihat bahwa pemetaan servlet di banyak proyek adalah /, yang merupakan cara yang buruk. Karena sangat sederhana, JS atau CSS tidak perlu diproses melalui servlets. Oleh karena itu, pemetaan terutama mempertimbangkan interaksi dengan komponen server dari wadah web, dan umumnya memberikan dua jenis identifikasi, seperti .do dan .action .do memerlukan otentikasi izin, dll., Tindakan dilepaskan secara langsung. JS, dll. Tidak perlu memasukkan servlet, dan kembali langsung dari konteks web sesuai dengan URL, dan kemudian tidak ada cara untuk mencegat dan melepaskan MVC ke MVC. Ini adalah buang -buang waktu untuk menciptakan masalah dan memecahkan masalah, yang bukan cara yang baik. Dengan cara ini, terlepas dari apakah Nginx terlibat atau tidak, sumber daya statis Anda statis untuk wadah web dan tidak memiliki hubungan dengan servlet. Servlets hanya berhubungan dengan apa yang perlu Anda tangani.
Di mana tempat terbaik untuk menulis JS?
Banyak orang terbiasa menulis JS di JSP atau HTML, yang buruk.
Ketika kami membangun sebuah proyek, kami harus berharap bahwa JS dan CSS kami akan di -cache oleh browser.
Kemudian, JS yang ditulis dalam tag skrip halaman hanyalah tag, yang tidak berbeda dari div atau input dan tidak akan di -cache. Saya memeriksa banyak informasi, dan cache yang saya lihat jelas mengatakan bahwa unit cache adalah file. Bukan labelnya. Jadi saya tidak sepenuhnya yakin tentang menulis CSS JS Anda ke dalam file dan memperkenalkan file sehingga file tersebut akan di -cache, karena tidak ada jawaban afirmatif langsung, itu adalah tebakan saya.
JSP sebenarnya adalah servlet, jadi ini adalah halaman yang dinamis. Setiap kali Anda perlu memuat kelas untuk menerjemahkan secara dinamis, dan kemudian metode tulis di kelas menulis halaman ke HTTP ke browser dan membuat browser. Jika html, statis. Dinamis dan fleksibel, tidak ada keraguan bahwa karena itu adalah servlet, itu adalah objek Java, dan berbagai tag dan metode java disebut kemungkinan. Halaman statis perlu ditangani sendiri. Jika Anda menggunakan bahasa makro yang mirip dengan halaman statis, lebih baik menggunakan JSP secara langsung.
Berapa banyak data yang dimuat pada satu waktu di halaman?
Jika konten yang ditampilkan pada halaman Anda didasarkan pada kategori dan daftar, jumlah data sangat kecil, dengan ratusan item. Jenisnya sekarang ditampilkan di aplikasi Pesanan Takeaway, maka semua kategori dan data diberikan pada satu waktu. Oleh karena itu, pemrosesan diproses di sisi klien, pengalihan dan pratinjau kategori di seluruh proses diproses pada halaman, termasuk pencarian. JS dieksekusi pada klien kami, ponsel atau komputer A tidak akan bersaing dengan ponsel atau komputer B. Jika Anda beralih jenis setiap kali Anda beralih ke jenis, Anda akan menyikat Ajax, dan itu adalah grup wadah web yang sama, sehingga akan ada kompetisi. Semakin sering operasinya, semakin besar kompetisi. Ini terkait erat dengan skenario yang sebenarnya.
Jumlah data yang dikembalikan oleh kueri tidak ada hubungannya dengan kinerja. Ribuan ribu data hanya pada tingkat puluhan KB.
Jumlah kueri, yaitu, jumlah interaksi dengan server, adalah alasan langsung yang mempengaruhi kinerja keseluruhan.
Jumlah data dalam kueri sebanding dengan ukuran tabel yang ditanya. Ini tidak akan mempercepat kueri dengan mengembalikan 10 kueri sekaligus, dan 10 kueri sekaligus, memperlambat kueri. Operasi basis data pada dasarnya adalah aplikasi pengumpulan dan tidak ada yang dibuat.
Premis penyetelan adalah bahwa jumlah yang diberikan adalah yang paling tepat, bukan semakin banyak yang Anda berikan, semakin tepatnya. Memori yang dapat dikonsumsi oleh JDK atau Tomcat pada angka OS yang berbeda.
Gunakan nginx;
Gunakan cache bila perlu;
Pilih middleware pesan atau middleware lainnya sesuai dengan apakah Anda perlu;
Pemisahan basis data atau master-slave, dll. Harus bahwa database saat ini tidak dapat mendukung volume lalu lintas.
Singleton adalah cara yang baik.
Multithreading adalah pisau yang tajam, dan tidak membedakan antara bahasa tertentu.
Manajemen Maven adalah cara yang baik, tetapi badan utama proyek Anda harus berupa webmvc, membangun proyek web, menanamkan Maven sebagai komponen, alih -alih membuat proyek Maven dan kemudian mengubahnya menjadi proyek web, kecuali jika tidak menganggur.
Menggunakan Spring, saat ini perancah terbaik.
Gunakan JDBC sebanyak mungkin, jika memungkinkan.
Jangan berinteraksi dengan server ketika Anda dapat mencapai hal -hal pada klien. Sumber daya klien sangat luas dan sumber daya server terbatas.
Cobalah untuk mengirim lebih sedikit permintaan. Kode yang mengirim lebih sedikit permintaan adalah kode yang baik, kecuali jika Anda adalah aplikasi instan.
Alat dalam setiap kode adalah alat, dan API adalah yang paling Anda pahami. Tidak ada jawaban yang akurat untuk mana yang lebih baik dan mana yang tidak baik.
Semuanya adalah objek, dan itu murni untuk Java. Proxy adalah objek, refleksi adalah objek, objek adalah objek, dan tipe data dasar bukan objek.
Hal -hal selain tipe dasar diselesaikan melalui objek. Tidak peduli seberapa rumit prosesnya, mereka diselesaikan melalui metode objek yang sesuai dikombinasikan dengan parameter metode. Cara membuat serial kelas dan deserialisasi, untuk terus terang, itu adalah IO dan transmisi file, dan kemudian memuatnya ke JVM dan membangunnya menjadi objek.
Alasan mengapa RPC tidak dipanggil di utas. Hal yang disebut proxyed. Proxy mengubah kebutuhan Anda menjadi parameter dan mengirimkannya sebagai aliran data. Server mengubah aliran permintaan Anda menjadi objek dan kemudian streamingnya kembali. Anda kemudian membangun objek dan memprosesnya melalui objek.
Nio adalah cara yang baik, Netty adalah pilihan yang baik, apakah ada soket multi-threaded yang melampaui Netty?
Zookeeper adalah alat yang sangat baik untuk serangkaian solusi seperti pendaftaran terdistribusi yang baik.
Hal -hal ini adalah semua prinsip dan objek, jadi Anda perlu menggunakannya untuk membacanya dengan keras.
Di atas adalah pemahaman pribadi, dan Anda dipersilakan untuk memperbaikinya.