Saya memutuskan untuk melanjutkan serangkaian artikel tentang Aurora OS (sampai saat ini disebut Sailfish). Selama saya bekerja dengan OS ini, saya telah mengumpulkan berbagai pengamatan yang berhubungan dengan kinerja aplikasi pada Qt dan sistem secara keseluruhan, karena digantung dengan berbagai perangkat, seperti pohon Natal, saya perhatikan semua hal kecil saat startup. Saya pikir ini bisa menarik dan bermanfaat bagi kolega yang juga bekerja dengan Qt (atau akan segera bekerja). Sarankan agar Anda dapat menguji lebih banyak.

Saya memprogram di Qt dan sering berdiskusi dengan kolega, pengembang iOS, persamaan, perbedaan, dan manfaat dari pendekatan. Pada titik tertentu, kami masih memutuskan untuk beralih dari kata-kata ke perbuatan dan melakukan pengukuran. Kami tidak menemukan programmer Android yang siap berpartisipasi dalam hiburan kami, jadi perbandingan dengan partisipasi angka dan tabel hanya untuk Swift dan C ++.
Saya ingin mengingatkan Anda bahwa Qt / C ++ tidak memaksakan mekanisme manajemen memorinya, dan pengguna sendiri memecahkan masalah ini dalam kerangka kemampuan yang tersedia di C ++, sementara Swift menggunakan penghitungan referensi, dan di Jawa menggunakan pengumpul sampah. Dengan demikian, programmer memiliki kesempatan untuk berinteraksi dengan memori secara lebih efisien. Untuk mengirim permintaan http atau membaca data dari database, Qt mengandalkan kekuatannya sendiri, dan tidak menggunakan kerangka kerja siap pakai yang disediakan oleh OS. Pengecualian - interaksi dengan keyboard, menggambar jendela mulai aplikasi, menampilkan pemberitahuan dan hal-hal lain.
Tes 1
Pertama-tama, kami memutuskan untuk menulis algoritma sederhana (ayakan Eratosthenes), menjalankannya dalam jumlah besar dan membandingkan waktu perhitungan. Diluncurkan pada iPhone 7.
Program cepat:swift
Saya tidak akan membahas kode secara rinci, Eratosthenes linier tidak jelas untuk dipahami, terutama jika salah satu bahasa tidak Anda kenal. Berikut ini tautan dengan deskripsi:
https://e-maxx.ru/algo/prime_sieve_linear , yang tertarik, dapat memeriksa kejujurannya. By the way, versi cepat ternyata sedikit lebih dioptimalkan dalam hal-hal kecil (Anda dapat mencarinya), yang tidak mencegah versi plus dari memenangkan kinerja.
Program qt: #include "eratosthenes.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include <QVector> #include <QDebug> #include <vector> #include <cmath> Eratosthenes::Eratosthenes(QObject *parent) { time = 0; } void Eratosthenes::qtFunction(int n) { clock_t start, end; start = clock(); std::vector<int> lp = std::vector<int>(n + 1, 0); std::vector<int> pr; // pr.reserve(std::sqrt(n) / 2); for (int i = 2; i <= n; ++i) { if (lp[i] == 0) { lp[i] = i; pr.emplace_back(i); } for (int j = 0; j < pr.size() && pr[j] <= lp[i] && i * pr[j] <= n; ++j) { lp[i * pr[j]] = pr[j]; } } end = clock(); time = (end - start) / (double)CLOCKS_PER_SEC; pTimeChanged(); qDebug() << " " << pr.size() << "" << time; }
Jalankan programnya. Aplikasi memiliki bidang untuk memasukkan angka n, tombol mulai dan bidang dengan total waktu:

Swift - di sebelah kiri, Qt - di sebelah kanan.Hasil. Saya akan memberikan tabel pengukuran untuk n yang berbeda dan pada titik waktu yang berbeda:

Seperti yang Anda lihat, aplikasi C ++ ~ 1,5 kali lebih cepat daripada yang asli dengan algoritma yang identik.
Tes 2
Secara alami, komputasi dalam konteks aplikasi mobile adalah hal yang penting, tetapi jauh dari itu. Oleh karena itu, kami membuat ListView yang terdiri dari 1000 elemen, yang masing-masing berisi teks dan gambar, untuk melihat kecepatan rendering elemen grafis. Di bawah, di video, Anda dapat melihat hasilnya:
Qt:
Cepat:
Secara visual, perbedaannya tidak terlihat.
Tes 3
Di Sailfish OS, kami memiliki kernel Linux dan shell asli grafis pada Qt, dan ini dengan sendirinya menunjukkan pemikiran tentang kinerja yang baik dari OS ini. Saya sering memperhatikan bahwa Inoi R7 menang dalam hal kecepatan beberapa tugas, meskipun Samsung Galaxy S8 melakukan hal yang sama. Jadi, misalnya, Samsung Galaxy S8 mengirim, menerima, memproses, mengemas ke dalam basis data, dll. Permintaan 10K http dalam waktu sekitar 3-4 menit, dan Inoi R7 melakukan hal yang sama selama 5-6 menit. Mengingat perbedaan dalam kinerja besi, hasilnya sangat mengesankan.
Untuk pengujian kinerja OS yang lebih jujur, saya memutuskan untuk melihat kecepatan respons gerobak.
Test.cpp:
#include "mypainter.h" #include <QPainter> MyPainter::MyPainter(QQuickItem *parent) : QQuickPaintedItem(parent) { } void MyPainter::paint(QPainter *painter) { QPen pen; pen.setWidth(10); pen.setColor(Qt::red); painter->setPen(pen); painter->drawPolyline(pol); } void MyPainter::xyCanged(int x, int y) { pol.append(QPoint(x, y)); update(); }
Test.qml:
import QtQuick 2.9 import QtQuick.Window 2.2 import Painter 1.0 Window { visible: true Painter { id: painter anchors.fill: parent MouseArea { anchors.fill: parent onPressed: { painter.xyCanged(mouseX, mouseY) } onMouseXChanged: { painter.xyCanged(mouseX, mouseY) } onMouseYChanged: { painter.xyCanged(mouseX, mouseY) } } } }
Sederhana dan bersahaja. Saya tidak memiliki telepon yang mendukung Sailfish dan Android untuk penggunaan pribadi, jadi saya harus melihat rekan kerja saya untuk telepon yang sedekat mungkin dengan Inoi r7, tetapi di Android. Yang tiba-tiba menjadi sangat sulit, mengingat saya sedang duduk di kantor pengembangan ponsel.
Sony Xperia Z5 compact:
Prosesor - Qualcomm Snapdragon 810 MSM8994, 2000 MHz
Jumlah inti prosesor - 8
Pemroses Video - Adreno 430
Jumlah memori internal - 32 GB
Jumlah RAM - 2 GBInoi R7:
Prosesor - Qualcomm Snapdragon 212 MSM8909AA, 1200 MHz
Jumlah inti prosesor - 4
Pemroses Video - Adreno 304
Jumlah memori internal - 16 GB
Jumlah RAM - 2 GBMeskipun demikian Sony ternyata lebih kuat, tetapi untuk persamaan peluang kami mengaktifkan mode hemat daya di atasnya, semua itu tidak akan menyebabkan kesetaraan penuh kekuatan perangkat. Pada video Anda dapat melihat bahwa di Android salurannya tidak semulus di Sailfish.
Kiri - Sony, kanan - Inoi:
Saya tidak berpendapat, ini bukan indikator yang sangat serius, Anda perlu membandingkan tidak hanya kemampuan bahasa murni, tetapi juga perpustakaan yang berbeda, asli dan lintas platform, untuk membandingkan kinerja dan kemudahan penggunaan, karena ada sangat sedikit aplikasi yang hanya menggunakan ListView dan saringan Eratosthenes. Meskipun semua hal-hal kecil ini bersama-sama terlihat sangat meyakinkan bagi saya.
Cons
Tentu saja, semuanya tidak begitu cerah dengan Qt, ketika saya mencoba melukis di sini, ada kontra. Misalnya, bekerja dengan TextInput di Android, Anda dapat menyiksa perfeksionis yang sangat sensitif terhadap kruk, karena pada setiap perangkat Qt berhasil menempatkan tongkat yang benar-benar unik di roda ketika berinteraksi dengan keyboard. Di satu ponsel, gambar naik, di lain berdiri, tetapi EnterKey tidak berfungsi, di ketiga, hanya huruf besar yang selalu dimasukkan, dan tidak ada cara untuk meyakinkannya untuk beralih ke huruf kecil. Anda dapat menggunakan ad infinitum. Dan semua ini juga melambat! (Grunts hanya relevan untuk Android, tidak ada masalah pada Sailfish, semuanya berfungsi dengan baik). Selain itu, pada Qt sulit untuk mencapai tampilan asli aplikasi.
Kesimpulan
Kesimpulan utama yang dapat ditarik: Qt, sebagai alat lintas platform, tidak kalah dalam kinerjanya dengan alat pengembangan asli. Ini sempurna untuk program-program di mana, selain GUI, masih ada banyak matematika, dan terutama untuk aplikasi perusahaan, di mana ada banyak nuansa dan beberapa karyawan, sehingga tidak membuat versi independen untuk setiap OS. Fungsi lebih penting bagi pengguna korporat daripada UI asli. Untuk Aurora, Qt adalah alat asli untuk pengembangan aplikasi, yang mungkin memberikan beberapa peningkatan kinerja lainnya.
Akan menarik untuk menguji Aurora pada perangkat keras yang kuat seperti Galaxy S8 saya.