Kylix 2: перший погляд

Kylix 2 продовжує напрямок, початок якому було покладено Kylix 1 – засобом швидкої розробки додатків для операційної системи Linux. Як і Kylix 1, Kylix 2 продовжує традиції компонентного програмування, закладені фірмою в добре відомому вітчизняним програмістам засобі розробки Delphi, що дозволяє легко і швидко створювати, наприклад, клієнтські додатки до серверних баз даних. До появи Kylix для Linux не було аналогічних засобів розробки. Як очікується, поява подібних засобів розробки в Linux має підвищити її конкурентоспроможність по відношенню до сімейства операційних систем Windows. Розглянемо, чим відрізняється Kylix 2 від Kylix 1 і Delphi 6.


Тестування продуктивності додатків


Для оцінки продуктивності засобів розробки будемо використовувати наявний в комплекті поставки цього засоби розробки демонстраційний приклад з каталогу DemosThreads, що показує можливі способи реалізації алгоритмів бульбашкової сортування, сортування допомогою вибору і швидкого сортування (метод Хоара) для масиву цілих чисел:


TSortArray = array[0..114] of Integer;


Інтерфейс даного додатку представлений на рис. 1. Експерименти проводяться на двопроцесорних комп'ютері з двома процесорами Pentium III-550 та об'ємом оперативної пам'яті 1 гбайт, який крім оцінки продуктивності додатків, отриманих компіляцією в різних засобах розробки, дозволить оцінити масштабованість різних ОС.


Рис. 1


Для проведення подальших експериментів введемо деякі зміни в демонстраційний проект. Покладемо на форму компонент TLabel, присвоївши йому ім'я Test та помістивши додатковий код, що використовує дві функції (TimeToStr і Time) з модуля SysUtils в методи StartBtnClick і ThreadDone:


with Test do


Caption:=Caption+’-’+TimeToStr(Time);


Тоді на формі буде відображатися час завершення кожного алгоритму сортування.


Читачі, які експериментували з Kylix 1, знають, що виконання програми, скомпільованого за допомогою Kylix в ОС Linux і має графічний інтерфейс, виробляється значно довше в порівнянні з аналогічним додатком, скомпільований з допомогою Delphi для ОС Windows. Тим приємніше буде дізнатися, що Kylix 2 зводить цю різницю практично до нуля. У табл. 1 представлені результати роботи зазначеного вище програми, скомпільованого за допомогою Kylix 1 і Kylix 2 i виконується в ОС Linux, а також додатки, скомпільованого з допомогою Delphi 6 і виконується у Windows XP.




























Розмір сортованого масиву

Операційна система і засіб розробки  Час виконання алгоритму швидкого сортування  Час виконання алгоритму сортування за допомогою вставки  Час виконання алгоритму бульбашкового сортування 

115
Linux, Kylix 1 45 з 54 з 1 хв 34 з

115
Linux, Kylix 2 1 з 1 з 1 з

115
Windows XP, Delphi 6 0 з 0 з 0 з



Таблиця 1

Якщо залишити в проекті графічний висновок, код буде працювати десятки хвилин навіть при невеликих розмірах сортованого масиву. Тому відключимо виклики процедури PaintArray в методах BubbleSortBoxPaint, SelectionSortBoxPaint і QuickSortBoxPaint. Суть експерименту полягає в тому, що ми будемо змінювати розмір сортованого масиву від 65 000 до 250 000 елементів і фіксувати зміну часу, що витрачається на виконання реалізованих алгоритмів. Результати представлені в табл. 2. Звичайно, обраний спосіб вимірів часу має погрішності. Цим можна пояснити наявність нульових значень для деяких вимірів.
























































Розмір сортованого масиву  Операційна система і засіб розробки  Час виконання алгоритму швидкого сортування  Час виконання алгоритму сортування за допомогою вставки  Час виконання алгоритму бульбашкового сортування 
62 500 Windows XP, Delphi 6 1 з 15 с 58 з
125 000 Windows XP, Delphi 6 2 з 62 з 4 хв 1 с
250 000 Windows XP, Delphi 6 3 з 11 хв 59 с 31 хв 35 с
62 500 Linux, Kylix 2, з графічним виводом 25 з 25 з 1 хв 1 с
62 500 Linux, Kylix 2 0 з 8 з 57 з
62 500 Linux, Kylix 1 1 з 15 с 1 хв 4 с
125 000 Linux, Kylix 2 0 з 1 хв 14 с 4 хв 14 с
250 000 Linux, Kylix 2 0 з 12 хв 22 с 31 хв 58 с



Таблиця 2

Тим не менш якісні висновки можна зробити навіть на основі цих даних. По-перше, код, скомпільований з допомогою Kylix 2, працює більш ефективно в порівнянні з аналогічним кодом, скомпільований за допомогою Kylix 1. По-друге, час виконання додатків під управлінням ОС Windows XP і під управлінням Mandrake 8.1 Linux виявилося порівнянним. По-третє, незалежно від засобів розробки і використовуваних ОС, найкращий час показав алгоритм швидкого сортування (c теоретичної трудомісткістю операцій).


Щоб не витрачати багато часу на тестування, у вихідному проекті було вироблено відключення методів, що реалізують алгоритми бульбашкового сортування та сортування за допомогою перебору. Результати тестування представлені в табл. 3. Вони виявилися аналогічні попереднім.
















































Розмір сортованого масиву
 
Операційна система і засіб розробки  Час виконання алгоритму швидкого сортування 
500 000 Windows XP, Delphi 6 0 з
5 000 000 Windows XP, Delphi 6 3 з
50 000 000 Windows XP, Delphi 6 29 з
62 500 000 Windows XP, Delphi 6 36 с
72 500 000 Windows XP, Delphi 6 42 з
500 000 Linux, Kylix 2 0 з
5 000 000 Linux, Kylix 2 2 з
50 000 000 Linux, Kylix 2 29 з
62 500 000 Linux, Kylix 2 36 с
72 500 000 Linux, Kylix 2 42 з

Таблиця 3


Web-сервіси і Web-додатки


У палітрі компонентів Kylix 2 з'явилися дві нові сторінки: WebServices і WebSnap. Компоненти, представлені на цих сторінках, повністю еквівалентні компонентів Delphi з аналогічними назвами (рис. 2, 3).

Рис. 2

Рис. 3


Тепер можна створювати Web-сервіси XML для Linux за допомогою Kylix 2 так само просто, як і для Windows за допомогою Delphi, і швидко розробляти розподілені додатки, використовуючи технологію WebSnap.


Web-сервіс – це об'єкт, який реалізує один або декілька методів, до яких можна звертатися через Internet з будь-якого іншого застосування. Ця технологія дозволяє створювати розподілені додатки, частини яких можуть функціонувати на будь-яких платформах і розташовуватися в довільних місцях, що робить її досить привабливим засобом інтеграції корпоративних додатків.


Технологія WebSnap дозволяє створювати потужні і складні за структурою Internet-додатки. Технологія WebSnap допускає поділ програми на блоки з декількома контейнерами WebModule, що дає можливість вести їх паралельну розробку. Також у додатку може існувати кілька компонентів-диспетчерів, що обробляють різні типи запитів. У WebSnap підтримуються сценарії на JScript або VBScript, дозволяють відокремити логіку генерації HTML-коду від бізнес-логіки. Крім того, диспетчер сторінок може обробляти запити до іменованих сторінкам при зверненні до них з серверних сценаріїв і додатків. Підтримка сесій дозволяє зберігати інформацію про кінцевий користувача, яка може бути корисна для реалізації таких можливостей, як авторизація та відключення користувачів. Компоненти-диспетчери автоматично відповідають на різні запити відповідно до закладеної бізнес-логікою. Дизайнер WebSnap дозволяє створювати Web-сторінки візуально і переглядати результати під час розробки. Попередній перегляд згенерованих сторінок доступний для всіх компонентів.


Компоненти TAdapter, TPagedAdapter, TDataSetAdapter, TLoginFormAdapter, TApplicationAdapter та ін служать для підтримки мов сценарію на стороні сервера.


Компоненти TPageDispatcher, TAdapterDispatcher, TWebDispatcher забезпечують диспетчеризацію HTML-запитів і відповідей на них відповідно до бізнес-логікою.


Компоненти TStringsValuesList, TDataSetValuesList, TWebUserList дають можливість включити у вміст HTML-сторінок різні списки (текстових рядків, рядків наборів даних, користувачів і т.п.). Компоненти TXSLPageProducer і TAdapterPageProducer дозволяють генерувати сторінки на основі компонентів типу TXXXAdapter та інших, що представляють собою окремі сторінки, «збираючи» їх в єдиний HTML-документ. При цьому TXSLPageProducer дозволяє формувати вміст сторінки на основі XML-трансформації вихідного шаблону, описаного у відповідності зі стандартами XML і XSL (eXtensible Stylesheet Language) і вихідними даними в тому ж форматі, сформованими усередині додатку, ліченими з файлу або отриманими за допомогою компонентів доступу до даних (dbExpress, DataSnap). Контейнерами в ієрархії WebSnap є компоненти TWebSnapDataModule, TWebAppPageModule та ін Всередині цих контейнерів можуть перебувати компоненти для генерації змісту та компоненти WebActionItem для опису реакції додатки на HTTP-запити.


Всередині контейнера може бути кілька компонентів-диспетчерів WebDispatcher, що мають окремі дерева WebActionItem для різних типів запитів (рис. 4).


Рис. 4


Технологія WebSnap підтримується великою кількістю майстрів (Wizards) для генерації скелетів додатків і повторюваних проміжних дій, а також засобами візуальної розробки і попереднього перегляду генеруються даних.


Будь-який додаток, побудоване за технологією WebSnap, містить принаймні один контейнер. Всього допускається чотири типи контейнерів – WebAppPageModule, WebAppDataModule, WebPageModule і WebDataModule. Робота додатка при використанні WebSnap будується за такою схемою (рис. 5).


Рис. 5


Компонент TAdapterDispatcher здійснює пошук заданого поля HTTP-запиту (query field) або поля контенту (content field) і направляє запит до відповідного компоненту програми WebSnap, а також автоматично обробляє вхідні дані від елементів HTML-форм і динамічні запити зображень.


Компонент WebDispatcher здійснює пошук у списку компонентів TWebActionItem на відповідність частини URL PathInfo та наявність заданого в URL методу, потім передає виконання відповідної частини HTTP-запиту знайденому компоненту.


Компонент TPageDispatcher забезпечує передачу управління обробкою HTTP-запиту одному з контейнерів PageModule (явно зазначеному в запиті, призначеному властивістю DefaultPage або головному PageModule додатки).

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*