Пожалуйста, заполните ваше имя Ваше имя:
Нужен ваш телефон Ваш email или телефон:
Введите текст задания Ваше задание на сайт:

Galleo (главная страница) :: Статьи :: WEB-приложения, ВЕБ-приложения , Web-application :: Сравнительный тест эффективности языков программирования для WEB

Сравнительный тест эффективности языков программирования для WEB

  

Увеличить шрифт  Уменьшить шрифт

Сравнивать всегда интересно и сложно одновременно - особенно в случае, когда сравниваемые системы выполняют одинаковые функции, но делают это по-разному.
Сравнительный тест эффективности языков программирования для WEB

Современные веб-приложения становятся все более изощренными и все более перегружаются сложной логикой. Раньше производительность таких приложений определялась, в основном, скоростью работы того или иного sql-сервера и тем, существует ли для него достаточно эффективная реализация драйвера доступа к sql-серверу для выбранного языка программирования. Это объясняется тем, что первое поколение веб-приложений просто читало и писало информацию в базы данных. Пользователей при этом было относительно немного. Таким образом, время на отработку sql-запроса составляло 70…90% от общего времени обработки http-запроса.

С повышением требований к масштабируемости (увеличение количества пользователей) и наращиванием логики приложения требования к языку программирования и среде выполнения существенно возрастают. К этому следует также прибавить, что относительно недавно веб-приложения перешли из мира интернет в мир корпоративных приложений. Это снова повысило требования к эффективности среды выполнения.

В настоящие время для создания веб-приложений существует множество различных языков программирования. Самые популярные из них - php, perl, С# (dot.net), java2. Классическая технология asp становится историей, поскольку asp dot.net практически вытиснило эту технологию на windows-серверах в новых приложениях.

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

Существует огромное количество тестов, сравнивающих производительность веб-приложений, реализованных с помощью asp dot.net с java2 технологий. Тесты эти достаточно сложны - как правило, это классическое "pet shop"-приложение (или его аналог), реализованное в двух вариантах. Соотношение производительности в этих случаях определяется как отношение времени реакции приложения на http-запрос при одинаковом числе запросов в секунду. Соотношение при стрессовой нагрузке при этом обычно составляет 2/3 в пользу dot.net. Прежде всего, это объясняется более эффективной реализацией dot.net-машины и очень тесной интеграцией с mssql-сервером. При этом такие приложения не отличаются большим количеством бизнес-логики.

А вот сравнений с современными скриптовыми языками, такими как perl и php, я и вовсе не нашел.

Для выяснения потенциала языков программирования было решено написать простые тесты в виде консольных приложений. Цель этого приложения - эмуляция большого количества бизнес логики, то есть циклов и условных переходов. Далее в тест была добавлена конкатенация строки, поскольку это одно из самых часто встречающихся операций в бизнес-логике веб-приложений. Тест является синтетическим, но я и не ставил себе целью получение реальной картины при работе среднего приложения. Целью, скорее, являлось получение некоторых экстремальных условий. Выводы делайте сами. Единственное, что можно сказать в утешение любителям скриптовых языков, это то, что взаимодействие с базами данных у них реализовано посредством native-драйверов, что в значительной степени увеличивает скорость работы в самом узком месте любого веб-приложения. Для себя же я сделал заключение, что не стану использовать их для создания чего-либо ответственного.

Задача бизнес-логики теста - это нахождение первых ста простых чисел. (Напомню, что простое число - это такое число, которое может быть получено только умножением самого себя на единицу.) Естественно, если бы в реальном приложении стояла подобная задача, то целесообразнее было бы, найдя эти числа один раз, просто записать их виде массива из 100 чисел. К сожалению, в реальной жизни не все задачи можно решить предварительно. Результаты вывода программы перенаправлялись в текстовый файл, что позволило в значительной степени оптимизировать потери при выводе текста на консоль. Хотя программа выводит всего сто строк, разница получается достаточно ощутимая. Ниже приведен исходный код java-варианта приложения. Он достаточно прост и не нуждается в дополнительных пояснениях:

import java.text.*;
import java.util.*;
public class test {
public static void main (string [] args) {
int maxprimes = 100;
int value = 1;
int count = 0;
stringbuffer sb = new stringbuffer ();
long start = system.currenttimemillis ();
system.out.println ("printing the first " + maxprimes +
" numbers that are prime… n");
while (count < maxprimes) {
value++;
int composite = 0; //false
for (int i = 2; i < value; i++) {
for (int j = i; j < value; j++) {
sb.append ("a");
if ((j * i) == value) {
composite = 1; //true
break;
}
}
if (composite == 1) {
break;
}
}
if (composite == 0) {
count++;
system.out.println (value + " is prime");
}
}
long time = (system.currenttimemillis () - start);
system.out.println ("took " + time + " mseconds.");
long len = sb.length ();
system.out.println ("string length " + len + " symbols.");
}
} // end of class


Если необходимо получить тест без конкатенации строки - просто закомментируйте строчку кода:


// sb.append ("a");


Все остальные реализации теста на других языках программирования являются абсолютно идентичными.

Результаты тестов на производительность приведены ниже.

Платформа - linux redhat 9 (celeron 1700) под vmware.
Язык - perl.

логика: 6 секунд;
логика + конкатенация строки: интерпретатор не справился с выполнением теста. Тест выполнялся более десяти минут. Мне надоело ждать, и я прекратил его выполнение.
Платформа - linux redhat 9 (Сeleron 1700) под vmware.
Язык - php4.2.2

логика: 15 секунд;
логика + конкатенация строки: тест не выполнен с ошибкой интерпретатора - "превышено время ожидания 30 секунд - выполнение прервано".
Платформа - linux redhat 9 (Сeleron 1700) под vmware.
Язык - java2 (jvm sun 1.4.2).

логика: 0,657 секунд;
логика + конкатенация строки: 3,680 секунд.
Платформа - windows 2000 sp.4 (Сeleron 1700).
Язык - perl (active perl).

логика: 4 секунды;
логика + конкатенация строки: 7 секунд.
Платформа - windows 2000 sp.4 (Сeleron 1700).
Язык - С# (dot.net 1.1).

логика: 0,030 секунды;
логика + конкатенация строки: 0,721 секунды.
Платформа - windows 2000 sp.4 (Сeleron 1700).
Язык - java2 (jvm sun 1.4.2).

логика: 0,070 секунды;
логика + конкатенация строки: 1,422 секунды.
Стоит отметить что, несмотря на значительное отставание, все же достаточно неплохо показала себя реализация active perl для windows - она заслужено считается одной из лучших реализаций этого языка программирования.
Олег Ремизов


http://wm-help.net/
Добавить в закладки: 

Различные способы печати из приложенийРазличные способы печати из приложений
В этой статье я постараюсь рассказать Вам о самых удобных и распространенных способах печати текстов и изображений из Ва... Читать дальше...
Приложения и языки сценариевПриложения и языки сценариев
Если необходимо, чтобы Web-страница могла делать что-нибудь еще, кроме отображения текста и изображений, в нее следует в... Читать дальше...
Ajax - новый подход к разработке веб-приложенийAjax - новый подход к разработке веб-приложений
Если что-нибудь в области разработки интерфейсов взаимодействия с пользователем и можно назвать завораживающим, так это ... Читать дальше...
Приемы безопасного программирования веб-приложений на PHPПриемы безопасного программирования веб-приложений на PHP
Данная статья не претендует на роль всеобъемлющего руководства на тему "как сделать так, чтоб меня никто не поломал". Та... Читать дальше...
Скупка картриджей как сервис для системных администраторов

Скупка картриджей как сервис для системных администраторов
... Читать дальше...
Сделать сайт самостоятельно или заказать готовый?

Сделать сайт самостоятельно или заказать готовый?
... Читать дальше...
Федор Иванович Лидваль. Часть 7

Федор Иванович Лидваль. Часть 7
... Читать дальше...
Ваш комментарий к данной статье:
Жирный шрифт Курсив Подчеркнуть Выровнять влево Выровнять по центру Выровнять вправо Выровнять по ширине Вырезать Копировать Вставить Отменить Повторить Список Нумерованный список Верхний индекс Нижний индекс Вставить ссылку  Цвет:
Инфо от наших друзей:




Наши партнёры: