Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Какой из генераторов отчетов самый быстрый?

01.01.2007
Какой из генераторов отчетов самый быстрый?

© 2006 Сергей Медведев

Почему самый быстрый?

Думаю, у каждого, кто столкнулся с выбором инструмента для генерации отчётов, возникал вопрос – как именно выбирать, что сравнивать?

По размеру? А по какому именно размеру? К примеру, по размеру, который добавится к вашему приложению? Но есть генераторы отчётов, которые к приложению вроде как ничего и не добавляют, а идут в отдельном dll-файле, который по своим размерам раз в несколько больше файла самого приложения. Или, к примеру, к самому исполняемому файлу добавляется совсем немного, зато файлы отчётов буквально "перевешивают" приложение...

Или по размеру файла отчёта? Наверное, это будет более весомый фактор, но не решающий.

По удобству для пользователя? А в чём его измерить?

По скорости генерации отчётов? Или же, при нынешних скоростях процессоров, скорость не должна играть решающего значения? Как оказывается, играет. Ведь далеко не каждое приложение генерирует только один простенький отчёт в конце рабочего дня. Если приложение должно быть распределенным, многопользовательским, то, вероятно, скорость генерации и компактность отчётов будут решающими.

Обычно разработчик выбирает себе такой инструмент как супругу – один раз и надолго. Потому как изучать каждый раз для каждого проекта новый инструмент – дело неблагодарное. Выбор такой мучителен, и далеко не каждый находит себе время и силы для досконального сравнения (ведь нужно разобраться с каждым из инструментов). Столкнувшись с такой проблемой, я решил разделаться с этим вопросом окончательно.

Увидев в одном из зарубежных форумов результаты сравнения скорости работы двух генераторов отчетов, включаемых в поставку Borland Delphi: QuickReport и Rave Reports, меня посетила одна мысль: "Какие результаты покажут другие популярные у программистов генераторы отчетов?".

Когда мне в руки попали исходники вышеописанного теста, я решил расширить этот тест, не только за счет новых участников тестирования, но и за счет расширения диапазона тестирования (т.е. добавив новые тесты).

Осмотр трассы и участников

В качестве "участников забега" были выбраны 6 популярных генераторов отчетов:

·QuickReport Pro 4.06 фирмы QBS Software Ltd
·Rave Reports 7.0 фирмы Nevrona Designs
·FastReport 3.23 фирмы Fast Reports Inc
·FastReport 2.56 VCL фирмы Fast Reports Inc
·ReportBuilder 10.02 фирмы Digital Metaphors Corporation
·Crystal Reports 11.0 фирмы Business Objects SA

Все участники опытные, хорошо известны Delphi-разработчикам, обычно, именно между ними и стоит выбор. Надо сказать, что, если визуально различий между ними не так уж и много (к примеру, вы без проблем перейдёте от дизайнера отчётов Crystal Reports к ReportBuilder, как, впрочем, и почти к любому из участников) архитектурно же они различаются очень сильно.

QuickReport

Известен тем, что с давних пор поставляется в составе Delphi. Точнее – поставлялся. Начиная с Delphi 7, это почётное место занял Rave Reports. Один из старейших продуктов. По идее, должен быть наиболее стабилен.

Rave Reports

Раньше назывался Report Printer.Своё новое название приобрёл вместе с визуальным дизайнером отчётов (ранее сам дизайнер отчётов назывался Rave). Изначально был именно генератором отчётов, создаваемых из кода, не ориентированным на бэнды. И, надо сказать, это заметно. Среди участников визуальная часть у него наиболее непроработана.

FastReport

Изучив внимательно FastReport 2 и FastReport 3, могу смело заявить: две версии одного продукта идеологически отличаются между собой практически как два разных продукта! Похоже, ребята из FastReports очень серьезно подошли к вопросу –заявления о "переработанной и улучшенной архитектуре в тройке" весьма скромны.

Несмотря на то, что общего между ними достаточно: все объекты являются внутренними объектами генератора отчётов (тут FastReport ближе, пожалуй, к CrystalReports), различий тоже предостаточно – единый внутренний скрипт у третьей версии и отдельные свои скрипты для каждого объекта во второй, куда большие возможности у третьей версии, поддержка четырёх различных скриптовых языков, поддержка матричных принтеров (из сравниваемых участников такие широкие возможности есть только у FastReport) и т.п. Есть даже конвертор из второй версии в третью (обратите внимание – другие участники не идут на столь радикальное изменение форматов! В этом есть и минусы – переход с версии на версию не всегда прост, лучше сразу выбирать третью версию, так и плюсы – по формату это самый новый генератор, не тянущий за собой пережитки и артефакты – отчёты хранятся в XML, что может служить гарантией теперь уже стабильности формата и его удобочитаемости), Судя по динамике развития, на сегодня это самый динамично растущий продукт.

ReportBuilder

Ранее этот проект назывался PiParty. Достаточно долго он был безоговорочным лидером среди генераторов отчётов для Delphi. Надо сказать, что этот продукт выпускает новую версию сразу же после выпуска новой версии Delphi (потому и номер версии совпадает). Однако, хотелось бы более реальных изменений и улучшений от версии к версии, а не просто "поддержки следующей версии Delphi", особенно ярко это видно на фоне того же FastReport (но это уже моё личное мнение!)

Crystal Reports

Самый опытный участник забега. Некоторые знают его под именем ReportSmith (кузнец отчётов) по Delphi 1. В силу возраста он достаточно велик в размерах и тяжёл в интеграции. Скидки на возраст не делаем – потому выстраиваем всех в один ряд. Borland опять включила его в состав своего продукта, на этот раз Delphi 2005. С Delphi 2006 на момент написания статьи ситуация не ясна...

Количество тестов я решил ограничить 4 этапами:

·Создание и сохранение в файл простого отчета из 2-х страниц с использованием 6-ти полей БД.
·Создание и сохранение в файл сложного отчета из 14-ти страниц с использованием всех полей БД.
·Экспорт в формат Acrobat PDF сложного отчета из 14-ти страниц с использованием всех полей БД.
·Экспорт в формат HTML сложного отчета из 14-ти страниц с использованием всех полей БД.

На старт!

Для получения более точных результатов тестирования, на каждом этапе каждый из генераторов отчетов выполняет задание этапа по 100 раз. Время выполнения одного отчета не вычисляется по причине отсутствия необходимости в этом, так как расстановка мест от деления на 100 не поменяется.

Для получения средних результатов тестирования и исключить влияние архитектуры процессоров, тестирование было проведено на двух компьютерах следующей конфигурации:
1. AMD Athlon XP 3200+ , 1024 МБ RAM;

2. Intel Mobility Pentium M 1.7 ГГц, 512 МБ RAM.

Исходные тексты программы доступны в форматах zip (1.09M) и rar (468K).

Начали!

Пробки на дорогах?

Оказывается, такая проблема как удобство использования и элементарная переносимость программ при переносе с компьютера на компьютер, очень актуальна. При запуске программы на другом компьютере, обнаружилось следующее:

Crystal Reports требует наличия установленного дистрибутива для работы приложения, иначе программа выпадает в ошибку, что не совсем корректно по отношению к пользователю. Конечно, мы как истинные тестеры не боимся трудностей и дадим ему нужные библиотеки, но для конечного пользователя это не совсем удобно, даже, скорее всего очень, обременительно. И к тому же, может возникнуть такая ситуация, когда на компьютере пользователя установлена версия Crystal Reports, отличная от требуемой и тогда такое будет...

Хочу обратить внимание потенциальных пользователей Crystal Reports на следующее:
- при установке текущей версии Crystal Reports, другие программы, использующие другую версию Crystal Reports, с вероятностью 99% перестанут работать, выпадая в ошибку.
- а если не устанавливать, то не будет работать текущая программа, а будет выпадать в ошибку.

Я с этим столкнулся, когда попытался запустить программу с версией Crystal Reports 10.0 на компьютере с 9-й версией Crystal Reports. Кто сомневается – может сам это проверить. В итоге пришлось перекраивать работу с Crystal Reports в программе и вводить проверку установленного Crystal Reports на компьютере, где она запускается.

Для пользователей QuickReport тоже есть неприятная новость.

При экспорте в PDF для QuickReport Pro 4.04 происходит утечка памяти, при которой при выполнении 100 тестов не освобождается порядка 350 Мб RAM, что приводит к некорректной работе других программ. Эта проблема решена в последней версии продукта (в 4.06 этой проблемы не возникает).

Еще мне очень не понравилась реализация визуальности в Rave Reports: у пользователя, который не имел достаточного опыта по работе с данным продуктом, возникнут большие проблемы по созданию какого-либо отчета, особенно это касается работы с базами данных. Я и сам в свое время столкнулся с такими проблемами, когда для создания простого отчета с базами данных потратил, чуть ли не целый день, для выполнения поставленной задачи.

У FastReport 2 отсутствует экспорт в формат PDF, поэтому в третьем тесте он участвовать не будет, хотя , забегая вперед, хотел бы я посмотреть на его результаты в этом тесте.

Марш!

Перейдем, собственно, к самому тестированию.

I – й этап. В этом тесте, все участники выполняют следующее задание: создание и сохранение в файл простого отчета, состоящего из 2-х страниц. Для заполнения используются 6 полей из БД, входящей в поставку любой версии среды программирования от фирмы Borland - customer.db.

Участник

Время выполнения

Размер получаемого файла

ПК №1

ПК №2

Среднее

QuickReport

2.969

2.523

2.746

106 кб

Rave Reports

2.140

2.364

2.252

3.77 кб + 14.4 кб

FastReport 3

0.734

1.051

0.893

0.251 кб

FastReport 2

1.109

1.032

1.070

34.3 кб

ReportBuilder

4.234

4.236

4.235

72.3 кб

Crystal Reports

12.281

20.834

20.783

15 кб

II – й этап. В этом тесте, все участники выполняют следующее задание: создание и сохранение в файл сложного отчета, состоящего из 14-х страниц. Для заполнения используются все поля, в том числе и графические, из БД, входящей в поставку любой версии среды программирования от фирмы Borland - biolife.db.

Участник

Время выполнения

Размер получаемого файла

ПК №1

ПК №2

Среднее

QuickReport

10.875

10.345

10.610

1.32 Мб

Rave Reports

13.124

20.519

16.820

4.62 кб + 1.08 МБ

FastReport 3

9.703

11.307

10.505

2.10 МБ

FastReport 2

4.422

3.004

3.713

519 кб

ReportBuilder

13.969

11.677

12.823

1.15 МБ

Crystal Reports

24.141

25.085

24.613

156 кб

III – й этап. В этом тесте, все участники выполняют следующее задание: экспорт в формат PDF сложного отчета, состоящего из 14-х страниц. Для заполнения используются все поля, в том числе и графические, из БД, входящей в поставку любой версии среды программирования от фирмы Borland - biolife.db.

Участник

Время выполнения

Размер получаемого файла

ПК №1

ПК №2

Среднее

QuickReport

1072.796

654.411

863.604

248 кб

Rave Reports

60.954

48.980

54.967

515 кб

FastReport 3

98.577

92.193

95.385

434 кб

FastReport 2

ReportBuilder

121.781

40.919

81.350

3.11 МБ

Crystal Reports

250.750

251.260

251.009

156 кб

IV – й этап. В этом тесте, все участники выполняют следующее задание: экспорт в формат HTML сложного отчета, состоящего из 14-х страниц. Для заполнения используются все поля, в том числе и графические, из БД, входящей в поставку любой версии среды программирования от фирмы Borland - biolife.db.

Участник

Время выполнения

Размер получаемого файла

ПК №1

ПК №2

Среднее

QuickReport

68.845

50.302

59.569

128 кб + 360 кб(карт.)

Rave Reports

354.062

517.104

435.583

340 кб + 35.2 МБ (карт.)

FastReport 3

26.656

25.797

26.227

76.6 кб + 7.21 МБ (карт.)

FastReport 2

25.453

74.698

50.076

47.8 кб + 11.2 МБ (карт.)

ReportBuilder

340 кб + 35.2 МБ (карт.)

Crystal Reports

225.031

226.102

225.567

197 кб + 20.2 МБ (карт.)

В результате проведения этого теста было замечено следующее:

·При экспорте в HTML для QuickReport изображения выходят за границу блока и размеры изображения в экспорте не соответствуют размерам в исходном отчете.
·При экспорте в HTML для Rave Reports для каждой страницы отчета создается своя HTML-страница, и происходит создание для каждого отчета новых файлов изображений (28 изображений х 100 повторов = 2800 файлов изображений), что приводит к дополнительному расходу и дискового места и времени на экспорт.
·При экспорте в HTML для Crystal Reports происходит создание для каждого отчета новых файлов изображений (28 изображений х 100 повторов = 2800 файлов изображений), что приводит к дополнительному расходу и дискового места и времени на экспорт.

Финиш!

Итоги тестирования:

В первом тесте первое и второе места с большим отрывом занимают продукты от фирмы Fast Reports Inc. Третье занимает Rave Reports с отставанием от второго места на 110.5 %.

Во втором тесте первое и второе места отрывом занимают продукты от фирмы Fast Reports Inc. Третье занимает QuickReport с отставанием от второго места на 1 %.

В третьем тесте первое место занимает Rave Reports. Второе с отставанием на 48 % занял ReportBuilder. На третьем месте с отставанием от второго на 17 % расположился FastReport 3.

Четвертый тест опять завершился победой продуктов от фирмы Fast Reports Inc. На третьем месте с отставанием от второго на 19 % расположился QuickReport.

Кто победил?

По итогам всех четырех тестов первое и второе места заняли продукты от фирмы Fast Reports Inc: FastReport 3 и FastReport 2. Третье место занял Rave Reports от фирмы Nevrona Designs. Четвертое место с очень малым отставанием от третьего занял QuickReport Pro от фирмы QBS Software Ltd. Следом за ним идет ReportBuilder от фирмы DIGITAL METAPHORS CORPORATION. На последнем месте оказался Crystal Reports от фирмы Business Objects SA.

А в это время за кулисами...

Как показали результаты тестов и личные впечатления при создании программы практически все генераторы отчетов имеют свои "узкие места".

Работа по созданию отчетов в Crystal Reports выявила, что из среды программирования нельзя вызвать дизайнер ни для создания нового отчета, ни для внесения исправлений в уже готовом. К тому же формирование отчета, похоже происходит на этапе его построения в дизайнере, на этот вывод наводит тот факт, что при открытии отчетов разной степени сложности время открытия практически одинаково. И программно внести изменения в открываемый отчет очень сложно, вернее практически нереально. Таким образом, ветеран рынка генераторов отчетов мало того, что требует наличия своих библиотек, велик размерами и не поворотлив. К тому же, практически отсутствует какая-либо документация по работе с отчетом в коде программы. Везде как правило, существуют описания, и то не полные, и для определенных версий Crystal Reports, как создавать отчет в дизайнере и больше ничего.

QuickReport, в отличие от других, требует создания отдельной формы, содержащей его отчет, что неудобно для пользователя. К тому же при дублирование Бэндов, например есть необходимость сделать вывод отчета, содержащего два экземпляра бланка, выводится только один и в область просмотра и при экспорте.

ReportBuilder для подключения к БД, помимо ppDBPipeline, требует наличие компонента DataSource (из палитры Data Access), что , по-меньшей мере не удобно для конечного пользователя. К тому же, сам компонент не поддерживает экспорт в формат HTML, для осуществления этой функции разработчики рекомендуют использовать сторонние компоненты, такие как: TExtraDevices by James Waler и TcdHTML Device by Cyberdyme Data Systems, которые также являются платными. Такое отношение к пользователям RB, мягко сказать удивляет, купив сам продукт, цена которого находится примерно на одном уровне с другими генераторами отчетов, приходится для осуществления возможности экспорта в HTML, приобретать еще и отдельные компоненты. Другие продукты имеют собственные методы экспорта.

Rave Reports, помимо вышеописанной неудачной реализации визуальности, еще обладает такой "незадокументированной" возможностью, вернее проводит скрытую от глаз пользователя деятельность: при запуске отчета сохраняет дамп подготовленного отчета в файле *.ndr. К тому же, чтобы Rave Reports нормально работал нужно еще добавить компонент RvNDRWriter, иначе ничего не работает. Ладно, с этим можно было смириться, но что самое интересное, экспорт невозможно осуществить без использования этого самого файла. Другим продуктам дополнительный файл не требуется. Единственным разумным объяснением требования наличия этого файла является предположение о том, что в этом файле находится каким-то образом преобразованный отчет для облегчения работы с его экспортом.

С экспортами в FastReport'ах тоже не все гладко. Например, в FastReport 2 для экспорта в HTML существует целых 3 компонента – для чего это нужно? Первый из них некорректно передает оформление документа, ко второму претензий – нет, это самый оптимальный метод, с 3-им я так и не добился успеха, так что ничего хорошего, так и плохого про него сказать не могу. Конечно, у фирмы Fast Reports Inc приоритетным продуктом является FastReport 3 и, такое количество экспортов скорее всего связано с отладкой разных алгоритмов, выбором лучшего для использования в 3-й версии самого оптимального. В FastReport 3, если для отчета, построенного с использованием определенного frxDBDataSet'а (используется, например при заполнении бэнда), если этот же frxDBDataSet выбрать в качестве источника данных для всего отчета, то при вызове просмотра приложение вылетает в ошибку "Нельзя использовать один DataSet для отчета и бэнда", такого же характера ошибка вылетает при установки этого frxDBDataSet'а для страницы. Как же такое может быть? Или бэнд, лежащий на странице и сама страница не принадлежит отчету, появление такой ошибки непонятно. И скорость экспорта в формат PDF оставляет желать лучшего.

Copyright© 2006 Сергей Медведев Специально для Delphi Plus