
Hari baik untuk semua!
Tahun ini, dengan rilis Flutter , kerangka kerja untuk pengembangan aplikasi lintas-platform, telah terjadi peningkatan hype dalam bahasa Dart. Seperti perfeksionis mana pun malas menunda-nunda Saya berpikir tentang membandingkan kinerja implementasi server dari mesin virtual Dart dengan potensi antagonisnya dalam pribadi Node.js. Saya harus segera mengatakan bahwa ada harapan dalam diri saya bahwa Dart akan menang, dan saya akan mendapatkan cawan suci yang memberi saya keunggulan atas pesaing potensial untuk dua periode lima tahun berikutnya, tetapi kenyataannya sedikit berbeda ...
Toolkit
- Mesin uji: Core I7, SSD, 12GB RAM (baik disediakan oleh majikan saya sebelumnya)
- Pengujian beban: k6.io (omong-omong, kerangka kerjanya sangat menarik dalam arsitekturnya)
Organisasi kode aplikasi
Kode sumber
Kemudian saya secara khusus memutuskan untuk tidak repot dan memutuskan untuk mengikuti rekomendasi yang saya baca pada suatu waktu di Habré. Khususnya:
- Menambahkan muatan sebagai tugas menghasilkan data acak (data acak untuk menghilangkan potensi caching hasil)
class Human { constructor (id, name, surname, age, gender) { this.id = id this.name = name this.surname = surname this.age = age this.gender = gender } }
- Baik Dart dan Node.js menggunakan opsi pemrosesan permintaan sinkron dan asinkron.
- Solusi dan solusi asli yang digunakan pada kerangka kerja industri (saluran untuk panah dan ekspres untuk node.js)
- Karena penelitian ini berhasil mendapatkan akselerasi Dart yang signifikan ketika menggunakan saluran air, yang menjalankan isolat pada setiap inti, saya menggunakan modul cluster untuk node.js untuk menyeimbangkan
Metodologi pengujian
- jalankan uji beban dengan jumlah permintaan per detik (500, 750) dan batas pada jumlah iterasi tes (jumlah permintaan yang diselesaikan)
- baik aplikasi dan kerangka kerja pengujian dijalankan pada mesin yang sama, jadi Anda harus memahami bahwa semua hasilnya relatif dan hanya dapat dibandingkan satu sama lain
Hasil
Panah asli
500 rps

750 rps
Kerangka saluran air untuk Dart
500 rps

750 rps

Node.js asli
500 rps

750 rps

Node Express dengan Cluster
500 rps

750 rps

Kesimpulan
- Tentu saja, banyak tergantung pada bagaimana Anda menerapkan logika aplikasi, saya tidak benar-benar yakin bahwa kode saya optimal baik dalam kasus panah dan node.js
- Secara khusus, fungsi menghasilkan array dapat ditampilkan dalam aliran pekerja terpisah dengan output asinkron, dalam kasus saya itu tidak diterapkan, oleh karena itu, seluruh mosh asinkron tidak digunakan di sini
- Baik di Dart dan Node.js, output dapat diatur melalui aliran
- Oleh karena itu, masih ada banyak ruang untuk penelitian kinerja dan optimasi.
- Dart dalam implementasi asli handler menunjukkan file epik, namun, ketika diimplementasikan melalui framework, itu menunjukkan hasil yang mengesankan, yang menurutnya mesin virtual Dart sekarang dapat bersaing dengan Node.js
- Sejauh yang saya tahu, sejumlah besar jam kerja telah diinvestasikan untuk mengoptimalkan V8, saya lebih yakin bahwa jauh lebih sedikit waktu yang diinvestasikan dalam mesin virtual Dart. Oleh karena itu, yang kedua mungkin memiliki potensi optimisasi yang cukup besar sebelum V8