JSF พร้อมที่จะส่งมอบเว็บแอปพลิเคชั่นประสิทธิภาพสูงหรือไม่ [ปิด]


16

ฉันเคยได้ยินเรื่องดี ๆ เกี่ยวกับ JSF มาหลายครั้งแล้ว แต่เท่าที่ฉันรู้ว่าผู้คนเคยบ่นอย่างจริงจังกับเทคโนโลยีนี้มาแล้วในอดีตไม่ทราบว่าสถานการณ์ดีขึ้นมากเพียงใด เรากำลังพิจารณา JSF เป็นเทคโนโลยีที่น่าจะเป็นสำหรับโครงการเครือข่ายสังคม แต่เราไม่ทราบถึงคะแนนประสิทธิภาพของ JSF ไม่ว่าเราจะเจอเว็บไซต์ประสิทธิภาพสูงที่มีการใช้ JSF จริงๆ ผู้คนบ่นเกี่ยวกับปัญหาความสามารถในการขยายขีดความสามารถ

เรายังไม่แน่ใจว่าถ้าเราทำสิ่งที่ถูกต้องโดยเลือก jsf และอยากจะได้ยินจากคุณเกี่ยวกับเรื่องนี้และนำข้อมูลของคุณมาพิจารณา

เป็นไปได้หรือไม่ที่จะกำหนดค่า JSF เพื่อสนองความต้องการประสิทธิภาพสูงของบริการเครือข่ายสังคม นอกจากนี้จนถึงระดับที่เป็นไปได้ที่จะอยู่รอดด้วยปัญหาปัจจุบันใน JSF มันมีปัญหาอะไรกันแน่?


ฉันไม่ได้ กังวลเกี่ยวกับความซับซ้อนของการพัฒนากับ JSF สิ่งที่คนอื่นมักจะบ่นเพราะตามประสบการณ์ส่วนตัวของฉันฉันเชื่อว่ามันไม่เป็นความจริงเลย แต่ฉันกังวลเกี่ยวกับประสิทธิภาพและปัญหาการปรับขนาดได้ และโปรดอย่าเพียง แต่ใช้ผิดกฎเกี่ยวกับปัญหาเก่าที่เชื่อมโยงกับรุ่นก่อนหน้า ฉันแค่สนใจเกี่ยวกับสถานะปัจจุบันสิ่งที่เคยเป็นมาในอดีต


7
ptrthomas.wordpress.com/2009/05/15/jsf-sucks ฉันรู้ว่าได้รับการตอบรับจากหัวหน้าสถาปนิก JSF ที่แสดงให้เห็นถึงการตัดสินใจทุกครั้ง แต่สำหรับฉันคนที่รู้จักเทคโนโลยีเว็บและผู้ที่ทุกข์ทรมานแม้กับ JSF 2.0, Facelets และ SEAM นี่เป็นการเยาะเย้ย แม้แต่ James Gosling sais: "ฉันเกลียด JSF ด้วยความหลงใหล" ฉันจะใช้ Wicket หรือ Tapestry และหลีกเลี่ยง JSF และปัญหาทั้งหมด
Falcon

12
@ ThorbjørnRavnAndersenฉันไม่เห็นด้วยกับคุณเบา ๆ ฉันคิดว่าเป็นการดีกว่าที่จะให้คำอธิบายมากกว่าเพียงแค่พูดว่า: "ฉันเกลียด JSF"
Chiron

6
@ ThorbjørnRavnAndersenฉันเข้าใจประเด็นของคุณ แต่ฉันสนับสนุนให้ผู้คนให้ข้อมูลเพิ่มเติม ตัวอย่างเช่นการลงคะแนนโดยไม่มีความคิดเห็นทำให้ฉันรำคาญอยู่เสมอ
Chiron

3
@Chiron คำถามไม่ใช่ว่า JSF นั้นจะสามารถใช้งานได้หรือไม่ แต่หาก JSF สามารถดำเนินการได้ ผู้ที่เริ่มต้นด้วยการวางกรอบลงอาจเป็นไปได้ที่จะไม่ตอบคำถามจริง การบำรุงรักษาแอปพลิเคชัน JSF ด้วยตัวเองฉันต้องการทราบด้วย

3
> แม้แต่ James Gosling sais: "ฉันเกลียด JSF ด้วยความหลงใหล" - เป็นที่ทราบกันดีว่านี่เป็นข้อผิดพลาดเนื่องจากเขาต้องการพูด JSP ฟังอย่างระมัดระวังเพื่อแยกส่วนในคำถาม มันเกี่ยวกับสิ่งที่ถูกสร้างขึ้นเพื่อตอบสนองคลาสสิค ASP และนั่นคือ JSP ไม่ใช่ JSF
Arjan Tijms

คำตอบ:


24

JSF มีความสามารถในการนำเสนอเว็บแอปพลิเคชั่นที่มีประสิทธิภาพสูงสุดอย่างแน่นอนที่สุด แอปที่ฉันกำลังทำงานอยู่นั้นสมบูรณ์ใน JSF และจากสถิติบันทึกการทำงานฉันจะเห็นว่าหน้าเว็บที่ไม่ใช่ฐานข้อมูลจำนวนมากมีเวลาดำเนินการขั้นต่ำ 0ms และเวลาเฉลี่ยน้อยกว่า 10ms

พวก Wicket บางคนพูดถึงการแสดงของ JSF แต่ตามมาตรฐานที่ซับซ้อนของ JSF นี้ทำงานได้ดีกว่า Wicket: http://prezi.com/dr3on1qcajzw/www-world-wide-wait-devoxx-edition/

โปรดสังเกตว่าตราบใดที่เซิร์ฟเวอร์ไม่อิ่มตัว JSF ยังทำงานได้ดีกว่า GWT การเปรียบเทียบเกณฑ์มาตรฐาน GWT / JSF นั้นทำได้ยากเนื่องจากเป็นสิ่งสำคัญมากที่เซิร์ฟเวอร์สำหรับ GWT ยังทำการแปลงและตรวจสอบความถูกต้องของข้อมูลใน postback ที่ JSF ทำ นี่เป็นสิ่งที่คุณไม่สามารถละทิ้งได้ในทางปฏิบัติ (อย่าเชื่อใจลูกค้า) นอกจากนี้สำหรับกราฟ GWT vs JSF / Wicket ควรพิจารณาว่าขั้นตอนการแสดงผลของเบราว์เซอร์นั้นไม่สำคัญสำหรับ JSF / Wicket (เนื่องจากพวกเขาส่วนใหญ่ให้บริการ HTML พร้อมที่จะเรนเดอร์) แต่ลูกค้า GWT ยังคงทำงานบางอย่าง ทำหลังจากได้รับการตอบกลับจากเซิร์ฟเวอร์

หนึ่งในประเด็นหลักประสิทธิภาพ / scalability ที่เก่ารุ่น JSF (ก่อนที่จะ 2.0) ได้ถูกเหยียดหยามประหยัดโดยการวางทางข้อมูลที่มากเกินไปในนั้นรัฐ สิ่งที่ไม่ควรอยู่ที่นั่นอย่างแน่นอน (เช่นค่าคงที่เช่น 'foo' ใน<my:tag attribute="foo"/>)

JSF 2.0 แนะนำpartial state savingกลไกซึ่งหมายความว่ามีการบันทึกสถานะเดลต้าเท่านั้น ในทางปฏิบัติสิ่งนี้อาจน้อยมากและการลดขนาดของสองคำสั่งเมื่อเปรียบเทียบกับ JSF 1.x ไม่ใช่เรื่องแปลก

หลังจากใช้ JSF มาหลายปีฉันสามารถพูดได้ว่ายกเว้นการบันทึกสถานะมากเกินไปใน JSF 1.x ฉันไม่เคยพบปัญหาเกี่ยวกับประสิทธิภาพใด ๆ ที่ฉันสามารถใช้กับ JSF ได้ ปัญหาด้านประสิทธิภาพใด ๆ ที่เราเคยมีมาก่อนในฐานข้อมูลและ / หรือวิธีที่เราตั้งค่าบริการส่วนหลังเขียนแบบสอบถามของเรา ฯลฯ


1
0 ms ... ฉันคิดว่าวิธีการวัดของคุณต้องดู
gbjbaanb

2
@gbjbaanb ฉันไม่คิดอย่างนั้นสิ่งเหล่านี้มาจากสถิติที่ตั้งขึ้นอย่างมืออาชีพ โปรดทราบว่าฉันกำลังพูดถึงเวลาต่ำสุดและเกี่ยวกับหน้าเว็บที่ไม่ใช่ DB หน้าที่ดำเนินการในช่วงเวลาดังกล่าวไม่ได้มีส่วนประกอบ 1,000 รายการที่แพร่กระจายเกินกว่า 100 รายการ เรากำลังพูดถึงหน้าเว็บที่ค่อนข้างเรียบง่ายที่นี่อาจมีส่วนประกอบ 10 ส่วนเทมเพลตต้นแบบ 1 อันบางทีอาจรวม 1 รายการบนเซิร์ฟเวอร์ที่ใช้งานมาระยะหนึ่งเพื่อให้ทุกอย่างร้อนและอยู่ในหน่วยความจำ เวลาโดยเฉลี่ยจะสูงกว่า (10 มิลลิวินาทีตามที่ฉันกล่าวไว้) และ 90% ก็สูงขึ้นเช่นกัน แม็กซ์สามารถเป็นอะไรก็ได้
Arjan Tijms

สถานการณ์คือโลกนี้วิพากษ์วิจารณ์สิ่งเหล่านั้นเท่านั้นที่มีความสามารถในการแก้ปัญหาทั้งหมด แต่นั่นการแก้ปัญหาทั้งหมดมาในราคาและต้องมีความกระตือรือร้นและความกระตือรือร้น สิ่งที่ฉันได้เห็นในทีมคือพวกเขาเริ่มพัฒนาโดยไม่ต้องเข้าใจวงจรชีวิต มันเกี่ยวข้องกับการเรียนรู้ที่สูงชัน แต่มันก็สวยงามและน่าทึ่ง
Shirgill Farhan

คอขวดมีแนวโน้มที่จะอยู่ในฐานข้อมูล / IO และแบนด์วิดท์ (มือถือ ... ) มากกว่าเซิร์ฟเวอร์ Java นั้นเร็วมากเมื่อใช้งานได้ดี
Christophe Roussy

8

ทุกทฤษฎีในโลกสามารถพูดได้ว่า JSF นั้นยอดเยี่ยม แต่เพียงแค่ดูว่าหน้าของคุณเป็นอย่างไร มันสร้างกองใหญ่ของจาวาสคริปต์และอึอื่น ๆ ที่จะพิการอย่างรุนแรงความสามารถของคุณในการเพิ่มโมดูลเช่น jQuery หรือใช้ CSS สะอาด ไม่ได้บอกว่าทำไม่ได้ แต่ราคาเท่าไหร่

ประสบการณ์ส่วนตัวกับโครงการขนาดเล็กและมีความซับซ้อนปานกลาง ภัยพิบัติ มันยุ่งกับการโทรกลับทั้งหมดและคุณไม่สามารถผสมผสานเทคโนโลยีอื่น ๆ ได้อย่างง่ายดาย เรามีข้อผิดพลาดอย่างมากที่เกิดขึ้นเมื่อใช้ JSTL ผสมกับ JSF เราไม่สามารถใช้สิ่ง jQuery ทั้งหมดได้เนื่องจากการเชื่อมโยงทุกอย่างเป็นการโทรกลับด้วยจาวาสคริปต์

วิ่งหนีและวิ่งหนีเร็ว

เมื่อคุณพูดถึงสเกลคุณพูดถึงสเกลประเภทใด จำนวนหน้าจำนวนผู้ใช้จำนวนการร้องขอต่อวินาทีจำนวนคุณสมบัติ คำตอบของสิ่งเหล่านี้อาจช่วยคุณได้ นอกจากนี้เมื่อมีคนบอกคุณว่าจำเป็นต้องไต่ระดับพวกเขาในระดับใดและรวดเร็วแค่ไหน คำตอบจะช่วยคุณอย่างมาก หากคุณกำลังพูดถึง Google scale ในหนึ่งสัปดาห์หรือคุณกำลังพูดถึงผู้ใช้ 1,000 คนและ 10,000 เพจวิวต่อวันในหนึ่งปี

เฟรมเวิร์กเกือบทุกชนิดไม่ว่าคุณจะพิมพ์คำตอบแบบเรียลไทม์ในพื้นหลังจะปรับให้รองรับการใช้งาน 99.999%


3
-1 สำหรับเครื่องชั่งใด ๆ กรอบ นั่นคือการพูดว่า "ไม่สนใจประสิทธิภาพ"
Raynos

3
ในและของตัวเองกรอบเว็บที่เผยแพร่จะขยายรวมถึง JSF พวกเขาทุกคนบอกว่าพวกเขาทำมันจะเป็นกรอบที่เส็งเคร็งถ้ามันไม่เป็นเช่นนั้น ที่กล่าวว่าหลายคนทำสิ่งที่โง่กับมันและที่มักจะเกิดปัญหาการปรับขนาดที่เกิดขึ้น
Bill Leeper

1
จริง แต่กรอบงานบางอย่างสนับสนุนให้คุณทำสิ่งต่าง ๆ ด้วยการขัดขวางการขยายขอบเขตเนื่องจากกรอบการทำงานสนับสนุนหรือชุมชนให้การสนับสนุน ฉันจะโต้แย้งกรอบเหล่านั้นไม่ได้ปรับขนาด
Raynos

บิต "คุณวัดขนาดได้อย่างไร" อาจเป็นข้อคิดเห็นสำหรับคำถามได้

4

ข้อจำกัดความรับผิดชอบ: ฉันชอบ JSF อย่างไรก็ตามถึงแม้จะมี RI ล่าสุด (Mojarra 2.2.x) หรือ MyFaces แม้ ประสิทธิภาพการใช้งานแบบไร้รัฐที่รอคอยมานานนั้นแย่มาก นี่เป็นเพราะวงจรชีวิตของ JSF และข้อเท็จจริงที่ว่าแต่ละมุมมองนั้นถูกสร้างขึ้น (ราคาแพง) สำหรับทุกคำขอ

ในการรับเบาะแสนี่เป็นมาตรฐานที่เรียบง่ายเทียบกับ java servlet ธรรมดากับหน้า JSF ทั้งสองเพียงพิมพ์ "hello world"

servlet

glassfish-3.1.2.2$ ab -n 10000 -c 100 http://localhost:8080/mavenproject-web/NewServlet

Server Software:        GlassFish
Server Hostname:        localhost
Server Port:            8080

Document Path:          /mavenproject-web/NewServlet
Document Length:        128 bytes

Concurrency Level:      100
Time taken for tests:   0.970 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      4300000 bytes
HTML transferred:       1280000 bytes
Requests per second:    10307.02 [#/sec] (mean)
Time per request:       9.702 [ms] (mean)
Time per request:       0.097 [ms] (mean, across all concurrent requests)
Transfer rate:          4328.14 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.0      1       5
Processing:     1    9   4.6      8      51
Waiting:        1    8   4.4      7      40
Total:          4   10   4.1      8      51

Percentage of the requests served within a certain time (ms)
  50%      8
  66%     10
  75%     11
  80%     11
  90%     12
  95%     14
  98%     29
  99%     33
 100%     51 (longest request)

JSF

glassfish-3.1.2.2$ ab -n 10000 -c 100 http://localhost:8080/mavenproject-web/xhtml/test/jsf.xhtml

Server Software:        GlassFish
Server Hostname:        localhost
Server Port:            8080

Document Path:          /mavenproject-web/xhtml/test/jsfxhtml
Document Length:        100 bytes

Concurrency Level:      100
Time taken for tests:   4.676 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      4250000 bytes
HTML transferred:       1000000 bytes
Requests per second:    2138.60 [#/sec] (mean)
Time per request:       46.759 [ms] (mean)
Time per request:       0.468 [ms] (mean, across all concurrent requests)
Transfer rate:          887.60 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       6
Processing:     5   46   6.0     46      73
Waiting:        2   45   5.5     45      72
Total:          8   47   5.8     46      73

Percentage of the requests served within a certain time (ms)
  50%     46
  66%     48
  75%     50
  80%     51
  90%     54
  95%     56
  98%     60
  99%     62
 100%     73 (longest request)

1
ฉันไม่คิดว่าหน้า helloworld ง่ายๆสามารถเป็นตัวแทนหรือมีความหมายได้ การเปรียบเทียบที่จริงจังจะต้องให้ข้อมูลที่จำเป็นเช่นหมายเลขรุ่นการกำหนดค่าที่ใช้เป็นต้น โปรดอ่านการเปรียบเทียบระหว่าง JSF และ Wicket ในคำตอบก่อนหน้า
lu4242

ให้ฉันไม่เห็นด้วย ฉันพบว่ามีความหมายจริงๆว่าในบริบทไร้สัญชาติ jsf ที่ช้ากว่า jsp 5 เท่า เป็นเรื่องเล็กน้อยที่จะตรวจสอบว่าในสถานการณ์ที่ซับซ้อนมากขึ้นประสิทธิภาพ jsf แย่ที่สุด หรือฉันสามารถให้มาตรฐานเพิ่มเติมสำหรับ laziest :-) การใช้ jsf คือ mojarra 2.2 ตามที่ระบุไว้ข้างต้นกับ glassfish 3
gpilotino

"... jsf ช้ากว่า jsp 5 เท่า ... " ฉันคิดว่าข้อผิดพลาดที่นี่คือไม่คำนึงถึงปริมาณงานและพฤติกรรมพื้นฐานของ jsp vs jsf มันซับซ้อนเกินกว่าที่จะอธิบายได้ แต่ในกรณีนี้เวลาตอบสนองช้าลงอย่างเห็นได้ชัดเพราะ jsf มีเอฟเฟกต์พร้อมกันที่ jsp ไม่มี แต่ในตอนท้ายมันมีความแม่นยำมากกว่าในการเปรียบเทียบรอบต่อวินาที นอกจากนี้ Mojarra ไม่เหมือนกับ MyFaces ดังนั้นการนำไปใช้งานทั้งสองจึงมีตัวเลขต่างกันจากมุมมองประสิทธิภาพ โปรดสังเกตว่าผลกระทบที่เกิดขึ้นพร้อมกันในกรณีนี้คือ exagerated
lu4242

ในความเป็นจริงมันเป็นเรื่องไร้สาระอย่างสมบูรณ์เมื่อเปรียบเทียบกับเซิร์ฟเล็ตธรรมดากับ JSF การเปรียบเทียบเพียงอย่างเดียวที่มีเหตุผลคือ "แอปพลิเคชัน" ที่ทำโดยใช้ JSP / servlets เทียบกับ "แอปพลิเคชัน" อื่นที่ทำสิ่งเดียวกันโดยใช้ JSF ทำไม? เนื่องจาก JSF มีโซลูชันในตัวสำหรับการเรนเดอร์ / อาแจ็กซ์ / การนำทาง / การตรวจสอบความถูกต้องสิ่งต่าง ๆ ที่ต้องทำตั้งแต่ต้นหรือด้วยมือใน JSP แม้ว่าการเปรียบเทียบจะน่าสนใจจากมุมมองด้านประสิทธิภาพ (ไม่มีเฟรมเวิร์กจะเร็วกว่า servlet / jsp) แต่ JSP นั้นไม่ตรงกับ JSF เนื่องจากมันไม่ได้ทำสิ่งเล็ก ๆ น้อย ๆ ที่ JSF ทำเพื่อคุณ
lu4242

"มันไร้สาระอย่างสมบูรณ์เมื่อเปรียบเทียบกับเซิร์ฟเล็ตธรรมดากับ JSF" ไม่มันไม่ใช่. เทคโนโลยีทั้งสองควรส่งเนื้อหา นี่คือเหตุผลที่ฉันคำนึงถึงบริบทไร้สัญชาติที่การตรวจสอบและสิ่งอื่น ๆ ก็ไม่นับ "เวลาตอบสนองช้าลงอย่างเห็นได้ชัดเพราะ jsf มีเอฟเฟกต์พร้อมกันที่ jsp ไม่มี" ไม่ใช่ปัญหาการขยายขีดความสามารถเอง เกี่ยวกับ myfaces, afaik mojarra เป็นการดำเนินการที่รวดเร็วที่สุด (ฉันจะตรวจสอบสิ่งนี้)
gpilotino

3

หากคุณต้องการเข้าใจอย่างชัดเจนยิ่งขึ้นว่า JSF ทำงานอย่างไร (ทั้ง Mojarra 2.1.7 และ MyFaces 2.1.7) และเปรียบเทียบกับเฟรมเวิร์กที่คล้ายกันเช่น Apache Wicket (ทั้ง 1.4.20 และ 1.5.5) ลองดูที่นี่ การเปรียบเทียบอย่างลึกซึ้ง (พฤษภาคม 2555):

ทำความเข้าใจกับ JSF 2 และ Wicket: การเปรียบเทียบประสิทธิภาพ

ส่วนที่ดีคือทุกอย่างพร้อมใช้งาน (รหัสข้อมูลการทดลองคำแนะนำเกี่ยวกับวิธีการทำซ้ำการทดสอบรายงานรายละเอียดครบถ้วนสมบูรณ์) มันจะแก้คำถามทั้งหมดของคุณเกี่ยวกับประสิทธิภาพของ JSF และคุณจะเห็นว่า Apache MyFaces สามารถทำอะไรได้บ้าง


3

บทความที่อาจช่วยได้เล็กน้อย (แม้ว่าจะไม่ใช่ข้อสรุปจริง ๆ ) คือServer Centric Java Frameworks: การเปรียบเทียบประสิทธิภาพที่ DZone Javalobby:

... บทความนี้แสดงความคิดเห็นว่าเฟรมเวิร์กเว็บSPI Java ส่วนใหญ่มีประสิทธิภาพเพียงใดในการเปลี่ยนแปลงบางส่วนของเซิร์ฟเวอร์ เราไม่สนใจกิจกรรมที่ไม่มีการสื่อสารเซิร์ฟเวอร์นั่นคือเหตุการณ์ที่ไม่มีการควบคุมเซิร์ฟเวอร์ (เป็นไปได้)

พวกเขาจะถูกวัดอย่างไร

พวกเราจะไปวัดปริมาณของรหัสที่ถูกส่งไปยังลูกค้าเกี่ยวกับการเปลี่ยนแปลงการดำเนินการในภาพลูกค้า

ตัวอย่างเช่นการเปลี่ยนแปลงเล็กน้อยของภาพ (ข้อมูลใหม่บางอย่าง) ในส่วนประกอบที่เราคาดหวังว่ามีโค้ดไม่มากจากเซิร์ฟเวอร์นั่นคือมาร์กอัปใหม่ที่จำเป็นต้องใช้เป็น HTML ธรรมดาหรือฝังใน JavaScript หรือคำแนะนำระดับสูงที่มีข้อมูลใหม่ Visualized ไม่เช่นนั้นจะมีบางสิ่งบางอย่างผิดปกติเช่นส่วนประกอบที่สมบูรณ์หรือโซนหน้าถูกสร้างขึ้นใหม่การสิ้นเปลืองแบนด์วิดท์และพลังงานของไคลเอ็นต์

เพราะเราจะใช้การสาธิตสาธารณะเราจะไม่ได้ไปเพื่อให้ได้มาตรฐานข้าวที่ชัดเจนและปรับ แต่คุณจะเห็นความแตกต่างที่ชัดเจนระหว่างกรอบ

เทคนิคการทดสอบนั้นง่ายมากและทุกคนสามารถทำได้โดยไม่มีโครงสร้างพื้นฐานพิเศษเราแค่ต้องการ FireFox และ FireBug ในการทดสอบนี้ใช้ FireFox 3.6.8 และ FireBug 1.5.4

คอนโซล FireBug เมื่อ "แสดง XMLHttpRequests" ถูกเปิดใช้งานบันทึกคำขอ AJAX ใด ๆ ที่แสดงการตอบสนองของเซิร์ฟเวอร์ ...

กรอบการทดสอบ

RichFaces , IceFaces , MyFaces / Trinidad , OpenFaces , PrimeFaces , Vaadin , ZK , ItsNat

... เห็นได้ชัดว่าการติดตั้ง JSF เพียงครั้งเดียวที่ไม่มีบทลงโทษด้านประสิทธิภาพอย่างร้ายแรงคือ PrimeFaces ...

ฉันไม่สามารถหาการเปรียบเทียบที่เหมาะสม (สำหรับการแสดง) หากใครพบใครที่ฉันอยากจะเห็น!


2

มีปัญหากับ Facelets โดยทั่วไปซึ่ง IMHO เป็นสิ่งที่ไม่สะดวกในการใช้ มันพูดมากเกินกว่าที่จำเป็นจริง ๆ ถึงสี่เท่าและต้องการงานทำด้วยมือมากเกินไปเมื่อคุณทำสิ่งดั้งเดิม HybridJavaจะเป็นตัวทดแทนที่ดีสำหรับ Facelets ในฐานะเครื่องมือนำเสนอภายใน JSF - มันทำงานได้เหมือนกัน


1

ดังนั้นฉันต้องการที่จะโยนมาตรฐานที่คล้ายกันมาฉันเอาหน้าตัวอย่าง bootstrap Twitterและแปลงเป็น xhtml เข้มงวด หลังจากนั้นฉันติดตั้ง ApplicationScoped CDI bean หนึ่งชุดที่ส่งคืน Hello, World ฉันใส่นิพจน์ EL ลงบนหน้า สำหรับเวอร์ชัน JSF ฉันใช้ตัวจัดการรีซอร์ส JSF สำหรับเวอร์ชัน JSPX ฉันใช้ HTML style css และ js

ฉันใช้ apache bench เพื่อทดสอบความเร็วในการโหลดหน้าหลัก การทดสอบดำเนินการบนเซิร์ฟเวอร์ TomEE + v1.5.2 ที่ไม่ได้รับการเพิ่มประสิทธิภาพ ฉันวิ่งแต่ละเกณฑ์มาตรฐาน 5x แล้ววิ่ง GC เต็มก่อนที่จะทำการวัด ทำการทดสอบ Bost ใน JVM อินสแตนซ์เดียวกันโดยไม่ต้องรีสตาร์ท JVM ฉันมี APR อยู่ใน libpath แต่ฉันไม่แน่ใจว่าจะมีผลกับการทดสอบนี้

JSF ช้าลง แต่ไม่ใช่ทั้งหมดเพราะเราจัดการกับปริมาณที่น้อยมาก คืออะไรไม่ได้แสดงให้เห็นก็คือเมื่อหน้าเว็บมีความซับซ้อนมากขึ้นไม่ปรับขนาด JSF / JSPX เป็นเส้นตรงหรือเป็นทวีคูณ

สิ่งหนึ่งที่ฉันสังเกตเห็นคือ JSPX สร้างขยะน้อยมากเมื่อเทียบกับ JSF การรันเบนช์มาร์กในหน้า JSPX ทำให้ฮีปที่ใช้ข้ามไปจาก 184mb เป็น 237mb การรันเบนช์มาร์กใน JVM เดียวกันบนหน้า JSF ทำให้ฮีปที่ใช้แล้วกระโดดจาก 108mb เป็นอย่างน้อย 404mb แต่การรวบรวมขยะอัตโนมัติจะเริ่มขึ้นในจุดนั้น มันจะดูเหมือนการปรับจูนเก็บขยะของคุณสำหรับ JSF เป็นที่แน่นอนจำเป็น

JSF

jonfisher@peanut:~$ /usr/local/bin/ab -n 10000 -c 100 http://localhost:8080/cdi-jsp/index.jsf
This is ApacheBench, Version 2.3 <$Revision: 1373084 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache-Coyote/1.1
Server Hostname:        localhost
Server Port:            8080

Document Path:          /cdi-jsp/index.jsf
Document Length:        2904 bytes

Concurrency Level:      100
Time taken for tests:   2.138 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      32160000 bytes
HTML transferred:       29040000 bytes
Requests per second:    4677.27 [#/sec] (mean)
Time per request:       21.380 [ms] (mean)
Time per request:       0.214 [ms] (mean, across all concurrent requests)
Transfer rate:          14689.55 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.3      1      21
Processing:     1   20   9.0     18      63
Waiting:        1   19   8.8     17      62
Total:          2   21   8.8     20      64

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     23
  75%     25
  80%     27
  90%     32
  95%     39
  98%     46
  99%     50
 100%     64 (longest request)

JSPX

jonfisher@peanut:~$ /usr/local/bin/ab -n 10000 -c 100 http://localhost:8080/cdi-jsp/page2.jspx
This is ApacheBench, Version 2.3 <$Revision: 1373084 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache-Coyote/1.1
Server Hostname:        localhost
Server Port:            8080

Document Path:          /cdi-jsp/page2.jspx
Document Length:        2440 bytes

Concurrency Level:      100
Time taken for tests:   1.273 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      26290000 bytes
HTML transferred:       24400000 bytes
Requests per second:    7856.63 [#/sec] (mean)
Time per request:       12.728 [ms] (mean)
Time per request:       0.127 [ms] (mean, across all concurrent requests)
Transfer rate:          20170.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5   2.3      6      20
Processing:     1    8   4.6      6      40
Waiting:        1    8   4.3      6      40
Total:          2   13   3.8     12      41

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     12
  75%     13
  80%     13
  90%     17
  95%     20
  98%     24
  99%     28
 100%     41 (longest request)

-3

GWT แปลงจาวาโค้ดของคุณเป็นจาวาสคริปต์ ดังนั้นมันจะทำงานเป็นสคริปต์จาวาที่ฝั่งไคลเอ็นต์ของคุณ นอกจากนี้คุณยังสามารถรวม css เข้ากับแอพพลิเคชั่น gwt ของคุณ โดยทั่วไป gwt มีน้ำหนักเบาและสามารถทำงานกับเบราว์เซอร์ทั้งหมดได้โดยไม่มีปัญหา ฉันไม่รู้เกี่ยวกับ JSF มากนัก แต่ฉันคิดว่า dt JSF นั้นมีความยืดหยุ่นไม่เหมือน GWT


1
ไม่ตอบคำถามซึ่งเกี่ยวข้องกับประสิทธิภาพของ JSF และไม่ใช่การแนะนำเฟรมเวิร์ก อย่างไรก็ตาม GWT มักชอบคนที่ไม่รู้จักจาวาสคริปต์ ^^
Danubian Sailor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.