เรามักมีภาพจำว่า cross-platform มักทำงานช้ากว่า Native จึงมีคนวัด performance เพื่อเปรียบเทียบประสิทธิภาพดู
performance แบ่งเป็น 3 ชนิด ได้แก่
- การติดต่อกับ API ของเครื่อง (เข้าถึงรูปภาพ, file system, GPS, location, และอื่นๆ)
- ความเร็วในการเรนเดอร์
- การคำนวนทางลอจิก
ในบทความนี้เป็นผลลัพธ์ของการทดสอบ performance ของการคำนวนทางลอจิกเพื่อหาค่า PI ได้ผลดังนี้
CPU-intensive test (Gauss-Legendre algorithm) for iOS
Objective-C ยังทำงานเร็วที่สุด, Flutter เร็วกว่า Swift นิดนึง ส่วน React-Native ช้ากว่า Objective-C กว่า 20 เท่า
CPU-intensive test (Borwein algorithm) for iOS
Objective-C ยังเร็วที่สุด ส่วนช้าที่สุดยังเป็น React-Native
CPU-intensive test (Gauss-Legendre algorithm) for Android
Kotlin กับ Java แทบไม่ต่างกัน ส่วน Flutter ช้ากว่านิดหน่อย และ React-Native ช้ากว่า มาก
CPU-intensive test (Borwein algorithm) for Android
Kotlin และ Java แทบไม่ต่างกันเหมือนเดิม และยังเร็วกว่า Flutter ถึง 2 เท่าตัว ส่วน React-Native ก็ช้ากว่า Native ถึง 6 เท่าเลย
Technical Detail
- ทุกการทดสอบทำบนเครื่องจริง (iPhone 6s, 1IS 13.2.3 และ Xiaomi Redmi Note 5, Android 9.0)
- วัดประสิทธิภาพใน Release Build ทั้งหมด
- วัดหลายๆ รอบ แล้วเอาค่ามาเฉลี่ยกัน
- ใช้ Gauss-Legendre & Borwein algorithm คำนวนหาค่า PI 100 ครั้งและใช้ทศนิยม 10 ล้านตำแหน่ง
- Gauss-Legendre เป็นอัลกอริทึมที่ใช้ memory-intensive ส่วน Borwein เป็น CPU-intensive
- Source Code
ที่มา: inVerita