ฉันพบคำพูดที่ดุร้ายว่า ASP.NET MVC เร็วกว่า ASP.NET WebForms ถึง 30 เท่า มีการวัดความแตกต่างของประสิทธิภาพที่แท้จริงอะไรบ้างและผลประโยชน์ด้านประสิทธิภาพคืออะไร
นี่คือการช่วยฉันในการพิจารณาย้ายจาก ASP.NET WebForms เป็น ASP.NET MVC
ฉันพบคำพูดที่ดุร้ายว่า ASP.NET MVC เร็วกว่า ASP.NET WebForms ถึง 30 เท่า มีการวัดความแตกต่างของประสิทธิภาพที่แท้จริงอะไรบ้างและผลประโยชน์ด้านประสิทธิภาพคืออะไร
นี่คือการช่วยฉันในการพิจารณาย้ายจาก ASP.NET WebForms เป็น ASP.NET MVC
คำตอบ:
เราไม่ได้ทำการทดสอบความสามารถในการปรับขนาดและความสมบูรณ์แบบที่จำเป็นเพื่อหาข้อสรุปใด ๆ ฉันคิดว่า ScottGu อาจกำลังพูดคุยเกี่ยวกับเป้าหมายที่เป็นไปได้ ในขณะที่เราก้าวไปสู่ Beta และ RTM เราจะทำการทดสอบที่สมบูรณ์แบบมากขึ้นภายใน อย่างไรก็ตามฉันไม่แน่ใจว่านโยบายของเราคืออะไรในการเผยแพร่ผลการทดสอบความสมบูรณ์แบบ
ไม่ว่าในกรณีใดการทดสอบดังกล่าวจำเป็นต้องพิจารณาการใช้งานจริง ...
ฉันคิดว่านี่จะเป็นคำถามที่ยากที่จะตอบอย่างชัดเจนเนื่องจากส่วนใหญ่จะขึ้นอยู่กับA)วิธีที่คุณใช้งานแอปพลิเคชัน WebForms และB)วิธีที่คุณใช้แอปพลิเคชัน MVC ในรูปแบบ "ดิบ" MVC น่าจะเร็วกว่า WebForms แต่เครื่องมือและประสบการณ์หลายปีและหลายปีได้ผลิตเทคนิคมากมายในการสร้างแอปพลิเคชัน WebForms ที่รวดเร็ว ฉันยินดีที่จะเดิมพันว่านักพัฒนา ASP.NET อาวุโสสามารถสร้างแอปพลิเคชัน WebForms ที่เหนือกว่าความเร็วของแอปพลิเคชัน MVC ใด ๆ หรืออย่างน้อยก็บรรลุความแตกต่างเล็กน้อย
ความแตกต่างที่แท้จริงตามที่ @tvanfosson แนะนำ - อยู่ในการทดสอบและทำความสะอาด SoC หากการปรับปรุงประสิทธิภาพเป็นข้อกังวลหลักของคุณฉันไม่คิดว่าเป็นเหตุผลที่ดีที่จะกระโดดเรือบน WebForms และเริ่มสร้างใหม่ใน MVC อย่างน้อยก็จนกว่าคุณจะได้ลองใช้เทคนิคที่มีอยู่เพื่อเพิ่มประสิทธิภาพ WebForms
มันลดหนึ่งในหน้าของฉันจาก 2MB payload เหลือ 200k เพียงแค่กำจัด viewstate และทำให้มันสามารถทำงานร่วมกับเอาต์พุตที่ส่งมาได้
ขนาดเพียงอย่างเดียวแม้ว่าการประมวลผลจะเท่ากันจะทำให้เกิดการปรับปรุงการเชื่อมต่อต่อวินาทีและความเร็วของคำขอได้อย่างมากมาย
ฉันคิดว่าหลายคนที่คิดว่า WebForms โดยเนื้อแท้ช้าหรือใช้ทรัพยากรมากกำลังวางความผิดไว้ผิดที่ 9 เท่าจาก 10 ครั้งเมื่อฉันถูกนำไปปรับแต่งแอปเว็บฟอร์มมีหลายจุดที่ผู้เขียนแอปเข้าใจจุดประสงค์ของ viewstate ไม่ถูกต้อง ฉันไม่ได้บอกว่า viewstate นั้นสมบูรณ์แบบหรืออะไรก็ได้ แต่มันง่ายเกินไปที่จะใช้ในทางที่ผิดและเป็นการละเมิดที่ทำให้ช่อง viewstate บวม
บทความนี้ใช้ไม่ได้ในการช่วยให้ฉันเข้าใจการละเมิดต่างๆเหล่านี้ https://weblogs.asp.net/infinitiesloop/truly-understand-viewstate
ในการทำการเปรียบเทียบที่ถูกต้องระหว่าง MVC และ WebForms เราต้องตรวจสอบให้แน่ใจว่าทั้งสองแอปใช้สถาปัตยกรรมอย่างถูกต้อง
การทดสอบของฉันแสดงให้เห็นบางอย่างระหว่าง 2x ถึง 7x req / วินาทีบน MVC แต่ขึ้นอยู่กับว่าคุณสร้างแอปเว็บฟอร์มของคุณอย่างไร ด้วยข้อความ "สวัสดีชาวโลก" โดยไม่มีการควบคุมฝั่งเซิร์ฟเวอร์ใด ๆ mvc เร็วขึ้นประมาณ 30-50%
สำหรับฉันการปรับปรุง "ประสิทธิภาพ" ที่แท้จริงใน MVC คือการเพิ่มพื้นผิวที่ทดสอบได้ของแอปพลิเคชัน ด้วย WebForms มีแอปพลิเคชันจำนวนมากที่ยากต่อการทดสอบ ด้วย MVC จำนวนรหัสที่สามารถทดสอบได้โดยทั่วไปจะเพิ่มเป็นสองเท่า โดยพื้นฐานแล้วสิ่งที่ไม่สามารถทดสอบได้ง่ายๆคือรหัสที่สร้างเค้าโครง ตรรกะทางธุรกิจและตรรกะการเข้าถึงข้อมูลทั้งหมดของคุณรวมถึงตรรกะที่เติมข้อมูลจริงที่ใช้ในมุมมองขณะนี้สามารถทดสอบได้แล้ว ในขณะที่ฉันคาดหวังว่ามันจะมีประสิทธิภาพมากขึ้นเช่นกันวงจรชีวิตของเพจนั้นง่ายขึ้นอย่างมากและสามารถตอบสนองต่อการเขียนโปรแกรมบนเว็บได้มากขึ้นแม้ว่าจะเหมือนกันหรือช้ากว่าเล็กน้อย แต่ก็คุ้มค่าที่จะเปลี่ยนจากมุมมองด้านคุณภาพ
ฉันคิดว่าปัญหาที่นี่คือไม่ว่า ASP.Net MVC จะเร็วกว่าเว็บฟอร์มแบบเก่าแค่ไหน แต่ก็ไม่ได้สร้างความแตกต่างเพราะเวลาส่วนใหญ่ที่ใช้อยู่ในฐานข้อมูล โดยส่วนใหญ่เว็บเซิร์ฟเวอร์ของคุณจะนั่งอยู่ที่การใช้งาน CPU 0-10% รออยู่บนเซิร์ฟเวอร์ฐานข้อมูลของคุณ หากคุณไม่ได้รับ Hit จำนวนมากบนเว็บไซต์ของคุณและฐานข้อมูลของคุณนั้นเร็วมากคุณอาจจะไม่สังเกตเห็นความแตกต่างอย่างมาก
ตัวเลขที่เป็นรูปธรรมเพียงอย่างเดียวที่ฉันสามารถหาได้ซึ่งมาจากการพัฒนา ASP.NET MVC ในช่วงต้นอยู่ในฟอรัมนี้:
http://forums.asp.net/p/1231621/2224136.aspx
Rob Connery ค่อนข้างยืนยันคำแถลงว่า ScottGu อ้างว่า ASP.NET MVC สามารถให้บริการได้ 8000 คำขอต่อวินาที
บางทีเจฟฟ์และทีมงานของเขาอาจให้คำแนะนำบางอย่างจากการพัฒนาไซต์นี้
ตรงกันข้ามกับความคิดเห็นที่ยอมรับการใช้เว็บฟอร์มที่ได้รับการปรับให้เหมาะสมจะฆ่า MVC ในแง่ของประสิทธิภาพดิบโดยสิ้นเชิง เว็บฟอร์มได้รับการปรับให้เหมาะสมสำหรับงานในการให้บริการ html นานกว่าที่ MVC มี
สามารถดูเมตริกได้ที่http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db
mvc การเปรียบเทียบทุกรายการจะอยู่ในอันดับล่างกลาง / ล่าง - บนของรายการในขณะที่เว็บฟอร์มที่ปรับให้เหมาะสมจะวางตำแหน่งการใช้งานในอันดับบนกลาง / บน - ล่าง
การตรวจสอบความถูกต้องของเมตริกเหล่านี้โดยสรุป แต่จริงจังมากwww.microsoft.comให้บริการโดยเว็บฟอร์มไม่ใช่ MVC มีใครบ้างที่เชื่อว่าพวกเขาจะไม่เลือก MVC ถ้ามันเร็วกว่าในเชิงประจักษ์?
ไม่มีทางตอบคำถามนี้ได้ MVC ใช้เอ็นจิ้นมุมมองเว็บฟอร์มตามค่าเริ่มต้นและสามารถกำหนดค่าให้ใช้เอ็นจินมุมมองแบบกำหนดเองจำนวนเท่าใดก็ได้ดังนั้นหากคุณต้องการเปรียบเทียบประสิทธิภาพคุณจะต้องเจาะจงมากขึ้น
ฉันเริ่มทำงานใน MVC เมื่อประมาณหนึ่งปีที่แล้วฉันได้รับแรงบันดาลใจ แต่ไม่ประทับใจ
ฉันเกลียดสถานะมุมมองและเห็นว่ามันเป็นรากเหง้าของความชั่วร้ายทั้งหมดในแง่ของ ASP.NET นี่คือเหตุผลที่ฉันไม่ใช้มันและจะซื่อสัตย์อย่างสมบูรณ์ทำไมคุณ?
ฉันใช้แนวคิด ASP.NET MVC Framework เป็นหลักและสร้างขึ้นในแบบของฉันเอง ฉันเปลี่ยนสองสามอย่างแม้ว่า ฉันสร้างรหัสการตัดตัวควบคุมของฉันหรือรหัสเส้นทาง URL รอบการคอมไพล์ใหม่แบบไดนามิก
ตอนนี้ฉันจะพูดได้ไกลว่าแอปพลิเคชัน ASP.NET MVC จะเร็วขึ้นตามวิธีที่คุณใช้ หากคุณละทิ้ง WebForms โดยสิ้นเชิงคุณจะเร็วขึ้นเนื่องจากวงจรชีวิตของ ASP.NET และแบบจำลองวัตถุนั้นมีความสำคัญ
เมื่อคุณเขียนคุณกำลังสร้างอินสแตนซ์กองทัพ ... ไม่ต้องรอกองกำลังของวัตถุที่จะเข้าร่วมในการแสดงผลของมุมมองของคุณ สิ่งนี้จะช้ากว่าที่คุณจะแสดงพฤติกรรมจำนวนน้อยที่สุดในหน้า ASPX เอง (ฉันไม่สนใจเกี่ยวกับสิ่งที่เป็นนามธรรมของเอ็นจิ้นมุมมองเนื่องจากการรองรับเพจ ASPX ใน Visual Studio นั้นเหมาะสม แต่ฉันได้ทิ้ง WebForms เป็นแนวคิดและโดยพื้นฐานแล้วกรอบ ASP.NET ใด ๆ เนื่องจากโค้ดขยายตัวหรือไม่สามารถเปลี่ยน สิ่งที่เชื่อมโยงแอปพลิเคชันของฉัน)
ฉันพบวิธีการใช้การคอมไพล์ใหม่แบบไดนามิก (System.Reflection.Emit) สำหรับการปล่อยวัตถุและรหัสวัตถุประสงค์พิเศษเมื่อใดก็ตามที่จำเป็น การเรียกใช้รหัสนี้เร็วกว่าการสะท้อนกลับ แต่สร้างขึ้นผ่านบริการสะท้อนแสง สิ่งนี้ทำให้เฟรมเวิร์กปรุงรส MVC ของฉันมีประสิทธิภาพที่ยอดเยี่ยม แต่ยังพิมพ์แบบคงที่ ฉันไม่ได้ใช้สตริงและคอลเลกชันคู่ชื่อ / ค่า บริการคอมไพลเลอร์ที่กำหนดเองของฉันกลับไปในการเขียนโพสต์แบบฟอร์มใหม่ไปยังแอ็คชันคอนโทรลเลอร์ที่ส่งผ่านประเภทการอ้างอิง เบื้องหลังมีหลายสิ่งหลายอย่างเกิดขึ้น แต่โค้ดนี้เร็วเร็วกว่า WebForms หรือ MVC Framework มาก
นอกจากนี้ฉันไม่ได้เขียน URL ฉันเขียนนิพจน์แลมบ์ดาที่แปลเป็น URL ซึ่งจะบอกได้ในภายหลังว่าจะเรียกใช้การดำเนินการของคอนโทรลเลอร์ใด สิ่งนี้ไม่ได้เร็วเป็นพิเศษ แต่มี URL ที่ไม่สมบูรณ์ เหมือนกับว่าคุณมีทรัพยากรที่พิมพ์แบบคงที่และวัตถุที่พิมพ์แบบคงที่ เว็บแอปพลิเคชันที่พิมพ์แบบคงที่? นั่นคือสิ่งที่ฉันต้องการ!
ฉันขอแนะนำให้คนอื่น ๆ ลองใช้สิ่งนี้
โครงการที่สร้างด้วยสตูดิโอภาพ หนึ่งคือเทมเพลต mvc4 อีกอันคือ WebForm (tranditional) และเมื่อทำการทดสอบโหลดด้วย WCAT นี่คือผลลัพธ์
อาจสูงกว่า 2500 rps
นักฆ่าประสิทธิภาพพบว่าเป็นบั๊กของ MVC Bata หรือ RC และประสิทธิภาพจะดีขึ้นเมื่อฉันลบ Bundles things ขณะนี้เวอร์ชันล่าสุดได้รับการแก้ไขแล้ว
ประสิทธิภาพขึ้นอยู่กับสิ่งที่คุณกำลังทำ ... โดยปกติแล้ว MVC จะเร็วกว่า asp.net เป็นส่วนใหญ่เนื่องจากไม่มี Viewstate และเนื่องจาก MVC ทำงานกับ Callback มากกว่า Postback โดยค่าเริ่มต้น
หากคุณเพิ่มประสิทธิภาพหน้าเว็บฟอร์มของคุณคุณสามารถมีประสิทธิภาพเช่นเดียวกับ MVC แต่จะต้องทำงานมาก
นอกจากนี้พวกเขายังเป็นนักเก็ตจำนวนมากสำหรับ MVC (และสำหรับ Webform) เพื่อช่วยให้คุณปรับปรุงประสิทธิภาพของเว็บไซต์เช่นรวมและย่อขนาด css และ javascripts จัดกลุ่มรูปภาพของคุณและใช้เป็นสไปรท์และอื่น ๆ
ประสิทธิภาพของเว็บไซต์ขึ้นอยู่กับสถาปัตยกรรมของคุณเป็นอย่างมาก รหัสที่สะอาดพร้อมการแยกข้อกังวลที่ดีจะทำให้คุณมีรหัสที่ชัดเจนยิ่งขึ้นและแนวคิดที่ดีขึ้นในการปรับปรุงประสิทธิภาพ
คุณสามารถดูเทมเพลต " Neos-SDI MVC Template " ซึ่งจะสร้างสถาปัตยกรรมที่สะอาดตาพร้อมการปรับปรุงประสิทธิภาพมากมายตามค่าเริ่มต้น (ตรวจสอบเว็บไซต์MvcTemplate )
ฉันทำการทดสอบการโหลด VSTS เล็กน้อยกับโค้ดพื้นฐานและพบว่าเวลาตอบสนองของ ASP.NET MVC เร็วขึ้นสองเท่าเมื่อเทียบกับ ASP.NET Webforms ด้านบนคือกราฟที่แนบมาพร้อมกับพล็อต
คุณสามารถอ่านรายละเอียดเกี่ยวกับการทดสอบการทดสอบโหลดได้จากบทความ CP นี้https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari
ดำเนินการทดสอบตามข้อกำหนดด้านล่างโดยใช้ VSTS และซอฟต์แวร์ทดสอบการโหลด telerik: -
ผู้ใช้โหลดผู้ใช้ 25 คน
ระยะเวลาดำเนินการทดสอบคือ 10 นาที
เครื่อง config DELL Ram 8 GB, Core i3
โครงการถูกโฮสต์ใน IIS 8
สร้างโครงการโดยใช้ MVC 5
ถือว่าการเชื่อมต่อ LAN เครือข่าย ดังนั้นการทดสอบนี้ไม่ได้พิจารณาถึงความล่าช้าของเครือข่ายในตอนนี้
เบราว์เซอร์ในการทดสอบเลือก Chrome และ Internet explorer
การอ่านหลายครั้งที่เกิดขึ้นระหว่างการทดสอบเพื่อหาค่าเฉลี่ยเหตุการณ์ที่ไม่รู้จัก การอ่าน 7 ครั้งที่นำมาและการอ่านทั้งหมดได้รับการเผยแพร่ในบทความนี้ในรูปแบบการอ่าน 1, 2 และอื่น ๆ