ทิศทางของไมโครซอฟท์เรื่อง .NET ชัดเจนว่าต้องการย้ายจาก .NET Framework ไปสู่ .NET Core แต่การเปลี่ยนผ่านก็ยังไม่ง่ายนัก เพราะ .NET Core ยังขาดฟีเจอร์หลายอย่างที่เคยมีใน .NET Framework (เช่น การซัพพอร์ต WPF/WinForms ที่จะมาใน .NET Core 3.0)
อย่างไรก็ตาม สถานะของ .NET Core 2.x ในปัจจุบัน ถือว่าพร้อมแล้วสำหรับงานฝั่งเซิร์ฟเวอร์ ทำให้ทีมงาน Bing.com เวอร์ชันเว็บ ที่สร้างขึ้นตั้งแต่สมัย .NET Framework ตัดสินใจย้ายงานมารันบน .NET Core 2.1 ได้สำเร็จด้วยดีในเดือนมิถุยายนที่ผ่านมา
ทีมงาน Bing.com บอกว่าอยากย้ายมาสู่ .NET Core นานแล้ว แต่ต้องรอให้ .NET Core พร้อมก่อนในเวอร์ชัน 2.x เพื่อให้มีฟีเจอร์ทัดเทียมกันกับ .NET Framework เดิม ทำให้ลดภาระดัดแปลงแก้ไขโค้ดของ Bing.com ลงจากเดิมมาก
ผลจากการย้ายมาสู่ .NET Core 2.1 ที่มีประสิทธิภาพสูงกว่าในระดับรันไทม์ ทำให้ Bing.com มีประสิทธิภาพสูงตามไปด้วย โดยเฉพาะ latency ที่ลดลงได้ถึง 34% หลังย้ายระบบ (ดูกราฟประกอบ)
ข้อดีอื่นๆ ของการใช้ .NET Core เหนือ .NET Framework คือ
ที่มา - .NET Blog
Comments
.Net Framework มันซับซ้อนเกิน พอเปลี่ยนไปใช่ .Net Core มันเลยเร็ว
รอซักพักมันก็คงกลับมาช้าอย่างเดิม
แต่กว่ามันจะช้าก็คงอีกนานครับเพราะ .Net core มันไม่ได้เร็วเพราะตัวเล็กกว่าอย่างเดัยวครับ มันมาในช่วงที่ฟีเจอร์ใหม่ๆเพิ่มขึ้น ทำให้ดึงประสิทธิภาพการประมวลผลที่ดีกว่าออกมาได้ครับ ถ้าได้ลองใช้จะเห็นชัดเจนครับว่าฟังก์ชั่นแต่ละอย่างแยกเป็นโมดูลมากขึ้นถ้าไม่ใช้ก็ไม่ต้องโหลด ถ้าเริ่มสร้างโปรเจคฝหม่ๆจะเห็นเลยว่าระบบแทบไม่มีอะไรเลย แล้วจะใช้อะไรค่อยเรียกมา ผิดกับ .NET framwork ที่ขนมาหมดทั้งที่ไม่ได้ใช้เลย
.Net Core มันเลยเร็วขึ้นไม่ใช่เพราะว่ามันเล็กลงนะครับ แต่เกิดจากการ Optimization ครับ https://blogs.msdn.microsoft.com/dotnet/2017/06/07/performance-improvements-in-net-core/ และ technic ใหม่ๆ เช่น
span ที่ช่วยลดการ allocate memory และอื่นอีกมากมาย และเร็วขึ้นจนติด top performance ไปแล้วครับ https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=plaintext
และมันก็ไม่มีทางช้าลงแน่นอน ในทางตรงข้ามกันจะเร็วขึ้นเรื่อยๆจาก https://blogs.msdn.microsoft.com/dotnet/2018/08/02/tiered-compilation-preview-in-net-core-2-1/
ลองหาข้อมูลดูก่อนนะครับ
ขอบคุณมากทั้งสองท่าน
ทีมเทพ Devops
2 วัน ตัวเลขระดับตำนาน
ไม่พูดเยอะ ทำให้เด็กมันดู ผมสาย nodejs ยังหวั่นไหวอยากกลับไปทำ .net เลย
.Net Core มันมี feature Self Contained ประมาณ embed framework ทั้งตัวเข้าไปกับ code ของเราเลย ครับเครื่อง Production ไม่ต้องลงอะไรเลย เอา program ไปวางแล้ว run ได้เลย ไม่ต้องมาดูว่าติดตั้ง runtime version ที่เราใช้แล้วหรือยัง ถ้าจะ update version ก็แค่ระบุ runtime ใหม่แล้วสั่ง publich จบเลย แต่เข้าใจว่า bing น่าจะ container แล้ว
เร็วขึ้นจริง ทำ Production ให้ลูกค้าตั้งแต่ 1.0 ลูกค้าว้าวเลย ลำบากอยู่อย่างเดียวตอนต่อ Oracle ด้วย EF พลิกหาทั่วโลกกว่าจะ Build ผ่าน ณ เมื่อ ปีครึ่งที่ผ่านมา ตอนแรกจะเอา SQL Server ก็หวาน ส่งมอบเปลี่ยนเป็น Oracle รัองจ๊ากกันเลยทีเดียว ดีที่เขียนด้วย EF หาวิธี Build อย่างเดียวก็เหนื่อยแล้ว ณ ช่วงเวลานั้น
แต่ถ้าเทียบ Node.js ผมว่าดีคนละอย่าง .Net Core เหมาะกับงาน Enterprise ที่ต้องการประสิทธิภาพเทียบเท่า Node แต่ก็อยากได้เรื่องการการันตีเรื่องมาตรฐานต่างๆ จากองค์กรผู้ผลิต งบไม่เกี่ยง ส่วน .Node.js เหมาะกับงาน Consumer ที่ต้องใช้เครื่องเล็กๆ เยอะๆ ช่วยกันประมวลผลซึ่งผมหา Infra Node ได้ในราคาที่ถูกกว่า จากคนที่เขียนทั้ง 2 อย่างในฝั่ง Server แบบ WebAPI
เลยใช้ PHP + Phalcon Extension + jQuery + JSON
โดยรวมยังพอไหวครับ และ User ไม่เยอะมาก อีกอย่างเอกสารบน
อินเตอร์เน็ตก็เพียบ
Performance ของ .Net Core ตอนนี้แซง Node.js ไปไกลแล้วครับ อ้างอิงจาก TechEmpower รอบล่าสุดนี่เร็วกว่าประมาณ 9 เท่า https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=plaintext
ผมอ่านแล้วก็แปลกใจ คือถ้ามันช้ากว่า Node นี่ผมว่ามันแย่แล้วนะ คือ Node มันก็เร็วแหละ แต่ .Net มันเป็น VM กึ่ง ๆ Native แล้วนะ มันเร็วกว่า Java อีกในหลาย ๆ กรณี
แต่เอ้อ Java เร้วส์ นี่นะ ...
คนส่วนใหญ่จะเข้าใจว่ามันช้ากว่า node เพราะสมัย .net framework web stack มันช้ากว่าชาวบ้านเค้าครับ
ถ้าวัดกันที่ clr นี่ยังไงก็เร็วกว่า และในตัว coreclr vs jvm ผลทดสอบล่าสุดคลต้องบอกว่าเร็วกว่า Java แล้วครับ https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/csharp.html
[นอกเรื่อง]NET Core มีวิธีแก้ไปรันไป (On the fly) โดยที่ไม่ต้อง start/stop ใหม่ไหมครับ
มันมี dotnet watch ให้ใช้ ครับลองหาข้อมูลดูนะครับ