Очень я люблю сравнивать несравниваемое, а особенно теплое с мягким.
У меня давно есть и переодически продлевается лицензия на 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, то скорость резко увеличивается. Но тогда нечестно 🙂
