Saya telah mendengar banyak hal baik tentang JSF tetapi sejauh yang saya tahu orang-orang juga memiliki banyak keluhan serius dengan teknologi ini di masa lalu, tidak menyadari seberapa besar situasinya telah membaik. Kami mempertimbangkan JSF sebagai teknologi yang memungkinkan untuk proyek jaringan sosial. Tetapi kami tidak mengetahui skor kinerja JSF, kami juga tidak dapat menemukan situs web kinerja tinggi mana pun yang telah menggunakan JSF. Orang-orang mengeluh tentang masalah skalabilitas kinerjanya.
Kami masih belum yakin apakah kami melakukan hal yang benar dengan memilih jsf, dan karenanya ingin mendengar dari Anda semua tentang ini dan mempertimbangkan masukan Anda.
Apakah mungkin untuk mengkonfigurasi JSF untuk memenuhi kebutuhan kinerja tinggi dari layanan jejaring sosial? Juga sampai sejauh mana dimungkinkan untuk bertahan dengan masalah saat ini di JSF. Apa sebenarnya masalahnya?
Saya tidak khawatir tentang kompleksitas pengembangan dengan JSF apa yang biasanya dikeluhkan orang lain karena sesuai pengalaman pribadi saya, saya percaya itu sama sekali tidak benar, tetapi saya lebih peduli tentang masalah kinerja dan skalabilitas. Dan tolong jangan hanya menyalahgunakannya pada masalah lama yang ditautkan ke versi sebelumnya. Saya hanya peduli dengan keadaan saat ini, apa pun yang telah berlalu.
Jawaban:
JSF paling pasti mampu memberikan aplikasi web berkinerja tinggi. Aplikasi yang sedang saya kerjakan sepenuhnya dalam JSF dan dari statistik log saya dapat melihat bahwa banyak halaman intensif non-DB memiliki waktu eksekusi minimum 0 ms dan waktu rata-rata kurang dari 10 ms.
Beberapa orang Wicket telah mengatakan hal-hal tentang kinerja JSF, tetapi menurut tolok ukur yang rumit ini JSF benar-benar berkinerja lebih baik daripada Wicket: http://prezi.com/dr3on1qcajzw/www-world-wide-wait-devoxx-edition/
Perhatikan bahwa selama server tidak jenuh, JSF juga berkinerja lebih baik daripada GWT. Perbandingan GWT / JSF sulit, karena sangat penting bahwa server untuk GWT juga melakukan konversi dan validasi data di postback yang dilakukan JSF. Ini adalah sesuatu yang tidak bisa Anda tinggalkan dalam praktik (jangan pernah mempercayai klien). Juga, untuk grafik GWT vs JSF / Wicket, harus diperhitungkan bahwa langkah perenderan browser adalah sepele untuk JSF / Wicket (karena sebagian besar melayani HTML yang siap-render), tetapi klien GWT masih memiliki beberapa pekerjaan untuk dilakukan. lakukan setelah menerima respons server.
Salah satu masalah kinerja / skalabilitas utama yang lama versi JSF (sebelum 2.0) memiliki, menyalahgunakan tabungan dengan menempatkan terlalu banyak data di dalamnya negara. Hal-hal yang benar-benar seharusnya tidak ada di sana dimasukkan ke dalamnya (seperti konstanta seperti 'foo' seperti di
<my:tag attribute="foo"/>
).JSF 2.0 memperkenalkan
partial state saving
mekanisme, yang berarti hanya keadaan delta yang diselamatkan. Dalam praktiknya ini bisa sangat sedikit dan pengurangan dua urutan besarnya dibandingkan dengan JSF 1.x tidak biasa.Setelah bertahun-tahun menggunakan JSF, saya dapat mengatakan bahwa kecuali untuk menyimpan terlalu banyak status di JSF 1.x, saya tidak pernah mengalami masalah kinerja yang dapat saya kaitkan ke JSF. Setiap masalah kinerja yang pernah kami alami selalu berakar pada DB dan / atau bagaimana kami mengatur layanan back-end, menulis pertanyaan kami, dll.
sumber
Semua teori di dunia dapat mengatakan JSF luar biasa, tetapi lihatlah seperti apa tampilan halaman Anda. Ini menghasilkan tumpukan besar javascript dan omong kosong lain yang akan sangat menghambat kemampuan Anda untuk menambahkan modul seperti jQuery atau membersihkan penggunaan CSS. Bukan mengatakan itu tidak bisa dilakukan, tetapi berapa biayanya.
Pengalaman pribadi dengan proyek yang relatif kecil dan kompleksitas sedang. Sebuah bencana. Itu berantakan berurusan dengan semua panggilan balik dan Anda tidak dapat menggabungkan teknologi lain dengan mudah. Kami memiliki bug besar yang ternyata disebabkan ketika menggunakan JSTL dicampur dengan JSF. Kami tidak pernah dapat menggunakan semua hal jQuery karena fakta bahwa setiap tautan adalah panggilan balik javascript.
Lari dan lari cepat.
Juga ketika Anda mengatakan skala, skala apa yang Anda bicarakan. Jumlah halaman, jumlah pengguna, jumlah permintaan per detik, jumlah fitur. Jawaban untuk ini dapat membantu Anda. Juga ketika seseorang memberi tahu Anda, perlu mengukur untuk menanyakan derajat dan seberapa cepat. Jawabannya akan sangat membantu Anda. Jika Anda berbicara skala google dalam seminggu atau Anda berbicara tentang 1000 pengguna dan 10.000 tampilan halaman per hari dalam setahun.
Hampir semua kerangka kerja, singkatnya Anda mengetik respons real time di latar belakang, akan berskala untuk memenuhi 99,999% dari kasus penggunaan.
sumber
Penafian: Saya suka JSF. Pokoknya, bahkan dengan terbaru RI (Mojarra 2.2.x) atau MyFaces, bahkan dengan lama ditunggu pelaksanaan stateless kinerja yang sangat buruk. Ini karena siklus hidup JSF dan fakta bahwa setiap Tampilan dibangun (mahal) untuk setiap permintaan.
Untuk mendapatkan petunjuk, ini adalah patokan sederhana terhadap servlet java biasa vs halaman JSF, keduanya hanya mencetak "hello world"
Servlet
JSF
sumber
Jika Anda ingin memahami lebih jelas bagaimana kinerja JSF (baik Mojarra 2.1.7 dan MyFaces 2.1.7) dan membandingkannya dengan kerangka kerja yang sama seperti Apache Wicket (keduanya 1.4.20 dan 1.5.5), lihat di sini perbandingan mendalam (MEI 2012):
Memahami JSF 2 dan Wicket: Perbandingan Kinerja
Bagian yang baik adalah semuanya tersedia (kode, data eksperimental, instruksi tentang cara mereproduksi tes, laporan lengkap terperinci). Ini akan menyelesaikan semua pertanyaan Anda tentang kinerja JSF, dan Anda akan melihat apa yang dapat dilakukan Apache MyFaces.
sumber
Artikel yang mungkin membantu sedikit (meskipun tidak benar-benar konklusif) adalah Kerangka Kerja Server Centric Java: Perbandingan Kinerja di DZone Javalobby:
Saya belum dapat menemukan perbandingan yang tepat (untuk kinerja), jika ada yang menemukan saya ingin melihatnya!
sumber
Ada masalah dengan Facelets secara umum yang IMHO adalah hal yang cukup nyaman untuk digunakan. Ini empat kali lebih banyak dari yang seharusnya dan membutuhkan terlalu banyak pekerjaan manual begitu Anda membuat satu langkah dari sesuatu yang primitif. HybridJava akan menjadi pengganti yang baik untuk Facelet sebagai mesin presentasi dalam JSF - ini melakukan pekerjaan yang sama (dan bahkan lebih banyak lagi, khususnya - itu membuat semua "binding" dan id untuk Anda) dengan penekanan tombol yang jauh lebih sedikit.
sumber
Jadi saya ingin melempar tolok ukur serupa. Saya mengambil halaman contoh bootstrap twitter dan mengubahnya menjadi xhtml ketat. Setelah itu, saya mengatur persis satu kacang CDI ApplicationScoped yang mengembalikan Hello, World. Saya menempatkan ekspresi EL di halaman. Untuk versi JSF, saya menggunakan penangan sumber daya JSF, untuk versi JSPX, saya menggunakan css dan js termasuk gaya HTML.
Saya menggunakan bangku apache untuk menguji waktu buka halaman utama. Pengujian dilakukan pada server TomEE + v1.5.2 yang tidak dioptimalkan. Saya menjalankan setiap benchmark 5x, lalu menjalankan GC penuh sebelum melakukan pengukuran. Tes Bost dilakukan dalam instance JVM yang sama tanpa memulai kembali JVM. Saya memiliki April tersedia di libpath, tapi saya tidak yakin itu mempengaruhi tes ini.
JSF lebih lambat, tetapi tidak banyak, karena kita berurusan dengan jumlah yang sangat kecil. Apa yang tidak ditunjukkan adalah ketika halaman menjadi lebih kompleks, apakah skala JSF / JSPX linear atau eksponensial.
Satu hal yang saya perhatikan adalah bahwa JSPX menghasilkan sangat sedikit sampah dibandingkan dengan JSF. Menjalankan patokan pada halaman JSPX menyebabkan tumpukan bekas melompat dari 184mb ke 237mb. Menjalankan patokan dalam JVM yang sama pada halaman JSF menyebabkan tumpukan bekas melompat dari 108mb menjadi setidaknya 404mb, tetapi pengumpulan sampah otomatis muncul pada saat itu. Tampaknya menyetel pengumpul sampah Anda untuk JSF adalah kebutuhan mutlak .
JSF
JSPX
sumber
GWT mengubah kode java Anda menjadi skrip java. jadi itu berjalan sebagai skrip java di sisi klien Anda. Dan juga, Anda dapat mengintegrasikan css ke dalam aplikasi gwt Anda. Secara umum, gwt ringan dan dapat berjalan di semua browser tanpa masalah. Saya tidak tahu banyak tentang JSF. Tapi saya pikir dt, JSF tidak sefleksibel GWT.
sumber