Я хочу привести сравнение производительности двух удивительных (и, по моему скромному мнению, восхитительных) фреймворков, Kohana и Codeigniter. Тест синтетический, но, как мне кажется, все-таки интересный.
В обоих фреймворках я не использовал view, а только работу внутри контроллеров. БД: Postgresql 8.3 на localhost. Оба контроллера имеют простейший вид.
В первом тесте был простой цикл в 333 итерации, внутри которого запускалось обращение к БД по следующему запросу:
Дополнительно был включен встроенный в оба контроллера профайлер.
Во втором тесте использовался Apache JMeter
На каждом из фреймворков я повторял действия 10 раз (10 раз [F5]) и записывал результаты выполнения приложения (не учитывается время доставки — только работа PHP). Результаты в таблице:
И еще. Важное замечание: Codeigniter потреблял в этом тесте 1,74Мб оперативки, а Kohana — 1,35Мб
В этом тесте использовался JMeter для симуляции одновременных запросов.
Заключался тест в следующем. На каждый из испытуемых (CI и KOH) отправлялось по 10 одновременных потоков по 5 запросов в каждом (в потоке они будут выполняться по очереди), но, чтобы не «убивать» стенд, количество запросов к БД было уменьшено с 333 до 9 (ну да, люблю я цифру 3 ;))
В первом случае фреймворки отдавали данные профайлера, но они оказались различными по объему передаваемых байт, поэтому вторую серию тестов я провел, когда оба фреймворка отдавали только по 2 байта ('ok') после выполненной работы. Каждый тест запускался в JMeter по 3 раза.
Таблицы итогов:
Codeigniter 9 запросов профайлер включен
Kohana 9 запросов профайлер включен
Codeigniter 9 запросов, вывод'ok'
Kohana 9 запросов, вывод'ok'
Как видно из этих таблиц, количество отдаваемых байт на время работы приложений не сказывался никак.
Выводы делает каждый для себя сам, я лишь просто решил провести тестирование таких похожих, но в то же время различных фреймворков. Для себя я, кажется, его сделал.
Ни в коем случае не забывайте, что для каждой работы есть самый подходящий для нее инструмент...
Условия тестирования
В обоих фреймворках я не использовал view, а только работу внутри контроллеров. БД: Postgresql 8.3 на localhost. Оба контроллера имеют простейший вид.
В первом тесте был простой цикл в 333 итерации, внутри которого запускалось обращение к БД по следующему запросу:
SELECT *
FROM tbl_clients
JOIN tbl_clients_recvisites ON tbl_clients.clientid = tbl_clients_recvisites.clientid
JOIN tbl_recvisites ON tbl_clients_recvisites.recvisiteid = tbl_recvisites.recvisiteid
JOIN tbl_clients_contacts ON tbl_clients.clientid = tbl_clients_contacts.clientid
JOIN tbl_contacts ON tbl_clients_contacts.contactid = tbl_contacts.contactid
* This source code was highlighted with Source Code Highlighter.
Дополнительно был включен встроенный в оба контроллера профайлер.
Во втором тесте использовался Apache JMeter
Тест первый — чистая синтетика без эмуляции
На каждом из фреймворков я повторял действия 10 раз (10 раз [F5]) и записывал результаты выполнения приложения (не учитывается время доставки — только работа PHP). Результаты в таблице:
Codeigniter | Kohana | |
---|---|---|
1 | 26,6959 | 14,808 |
2 | 26,6049 | 14,178 |
3 | 27,5487 | 14,289 |
4 | 26,7427 | 13,845 |
5 | 26,6099 | 14,554 |
6 | 26,5644 | 14,381 |
7 | 26,9622 | 13,717 |
8 | 26,8828 | 14,242 |
9 | 27,2445 | 13,771 |
10 | 26,8514 | 14,479 |
Среднее | 26,87 | 14,23 |
И еще. Важное замечание: Codeigniter потреблял в этом тесте 1,74Мб оперативки, а Kohana — 1,35Мб
Тест второй — приближение к реальности
В этом тесте использовался JMeter для симуляции одновременных запросов.
Заключался тест в следующем. На каждый из испытуемых (CI и KOH) отправлялось по 10 одновременных потоков по 5 запросов в каждом (в потоке они будут выполняться по очереди), но, чтобы не «убивать» стенд, количество запросов к БД было уменьшено с 333 до 9 (ну да, люблю я цифру 3 ;))
В первом случае фреймворки отдавали данные профайлера, но они оказались различными по объему передаваемых байт, поэтому вторую серию тестов я провел, когда оба фреймворка отдавали только по 2 байта ('ok') после выполненной работы. Каждый тест запускался в JMeter по 3 раза.
Таблицы итогов:
Codeigniter 9 запросов профайлер включен
Среднее (мс) | Мин. (мс) | Макс. (мс) | Пропускная способность (запросов/сек) | Кб/сек |
---|---|---|---|---|
3880 | 2492 | 4370 | 2,5 | 57,17 |
3729 | 2538 | 4105 | 2,6 | 59,5 |
3760 | 2608 | 4263 | 2,6 | 59,04 |
Kohana 9 запросов профайлер включен
Среднее (мс) | Мин. (мс) | Макс. (мс) | Пропускная способность (запросов/сек) | Кб/сек |
---|---|---|---|---|
2495 | 1104 | 2990 | 3,9 | 27,62 |
2462 | 1239 | 2873 | 3,9 | 27,89 |
2485 | 933 | 2955 | 3,9 | 27,68 |
Codeigniter 9 запросов, вывод'ok'
Среднее (мс) | Мин. (мс) | Макс. (мс) | Пропускная способность (запросов/сек) | Кб/сек |
---|---|---|---|---|
3749 | 2778 | 4241 | 2,6 | 0,01 |
3691 | 2187 | 4111 | 2,6 | 0,01 |
3776 | 3041 | 4208 | 2,6 | 0,01 |
Kohana 9 запросов, вывод'ok'
Среднее (мс) | Мин. (мс) | Макс. (мс) | Пропускная способность (запросов/сек) | Кб/сек |
---|---|---|---|---|
2451 | 1035 | 2870 | 3,9 | 0,01 |
2445 | 997 | 2924 | 3,9 | 0,01 |
2448 | 1266 | 2883 | 3,9 | 0,01 |
Как видно из этих таблиц, количество отдаваемых байт на время работы приложений не сказывался никак.
Выводы
Выводы делает каждый для себя сам, я лишь просто решил провести тестирование таких похожих, но в то же время различных фреймворков. Для себя я, кажется, его сделал.
Ни в коем случае не забывайте, что для каждой работы есть самый подходящий для нее инструмент...