Очень я люблю сравнивать несравниваемое, а особенно теплое с мягким.
У меня давно есть и переодически продлевается лицензия на RealBasic. Да, простой как грабли тот самый бэйсик, который обвешали гуем и сделали кросс-платформенным.
А тут субботний вечер, всякие мысли лезут в голову и одна из них почему-то проколупала мне дырку в черепе “А какова скорость обработки всяких UI элементов?”
Фигня вопрос, устраиваем битву. В одном углу ринга ставим RealBasic, а в другой – QT5. Делаем простую формочку:
Кнопка запуска, прогресс-бар и поле для отображения текста. И пишем очень сложный код:
RB:
for i as integer =0 to 100 ProgressBar1.Value=i TextArea1.Text=str(i) for q as integer =0 to 1000 dim p as integer =0 p=p+q*i TextArea1.Text=TextArea1.Text+" "+str(p) next next
QT:
for(int i=0;i<=100;i++) { ui->progressBar->setValue(i); QTextDocument * d; d=new QTextDocument(ui->plainTextEdit); QPlainTextDocumentLayout *layout = new QPlainTextDocumentLayout(d); d->setDocumentLayout(layout); d->setPlainText(QString("%1").arg(i)); ui->plainTextEdit->setDocument(d); for(int q=0;q<=1000;q++) { int p =0; p=p+q*i; d->setPlainText(d->toPlainText()+" "+QString("%1").arg(p)); ui->plainTextEdit->setDocument(d); } }
Результаты меня убили: RB выполнился за 1:20, QT5 на 12 секунд дольше. Плюс RB не вывесило флаг “Application Not Responding” и где-то по середине сумело один раз обновить UI.
PS Я знаю, что код кривой/неоптимальный и там и там.
PSS Пооптимизировал код. При использовании стандартных виджетов результаты еще хуже: RB 8 секунд, QT5 35. Проблема именно в навороченности стандартных виджетов QT: он там судя по всему простой текст в html рендрит, а только потом его уже отображает. Ибо если поставить вместо поля редактирования label, то скорость резко увеличивается. Но тогда нечестно 🙂