Как я могу сравнить различные языки / фреймворки? - PullRequest
0 голосов
/ 12 августа 2010

Я бы хотел сравнить производительность разных языков и / или разных фреймворков на одном языке.Это нацелено на серверные языки, используемые для веб-разработки.Я знаю, что сравнение яблок с яблоками невозможно, но я бы хотел, чтобы это было как можно более непредвзято.Вот некоторые идеи:

  • Простая страница "Hello World"
  • Инициализация объекта
  • Вызовы функций / методов
    • Тела метода будут варьироваться от пустыхк большому
  • Доступ к файлу (чтение и запись)
  • Доступ к базе данных

Они могут измеряться запросами в секунду, или я могуиспользуйте цикл for и повторяйте цикл много раз.Некоторые из этих тестов должны измерять накладные расходы языка (т. Е. Пустой вызов функции), а не то, насколько быстро они выполняют определенную задачу.Я приму некоторые меры предосторожности:

  • Они будут работать на той же машине, на новых установках с минимальным количеством процессов в фоновом режиме.
  • Я попробую установитьдо сервера, как официально рекомендовано;Я не буду пытаться оптимизировать.

Как я могу улучшить это?

Ответы [ 4 ]

2 голосов
/ 12 августа 2010

Есть много полезных советов (и огромное количество примеров тестов для разных языков) на http://shootout.alioth.debian.org/

С

1 голос
/ 12 августа 2010

Я написал множество модульных тестов, чтобы вы могли тестировать слои.

Например, напишите веб-сервис SOAP на PHP, Python и C #.

Написать веб-сервис REST на тех же языках (те же веб-сервисы, только два способа добраться до них).Этот должен иметь возможность возвращать как минимум JSON и XML.

Писать модульные тесты на C # и Python, которые будут служить клиентами, и тестировать REST с различными типами результатов (XML / JSON).Это важно, так как позже вам может потребоваться проверить, какой из них лучше всего подходит для сквозного соединения, и JSON может быть быстрее для вас, чем XML, для вас (это должно быть).

Итак, REST /Службы SOAP должны идти к одному и тому же контроллеру, чтобы упростить вам жизнь.

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

Я бы использовал одну базу данных для этого, если вы не хотите оценивать различные базы данных, но для веб-теста, просто сделайте это для фазы 2.:)

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

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

Например, я узнал (пару лет назад, когда я это сделал), что JSON был быстрее XML, а REST был быстрее SOAP.

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

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

Я бы сделал это с каким-то реальным приложением, чтобы работа не пропала даром, просто дублировалась.

1 голос
/ 12 августа 2010

Лучше взять один из существующих тестов:

http://www.sellersrank.com/web-frameworks-benchmarking-results/

http://avnetlabs.com/php/php-framework-comparison-benchmarks

http://www.yiiframework.com/performance/

http://www.google.ru/search?q=php+benchmark+frameworks&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

Но если вам действительно нужно выяснить, какая инфраструктура будет быстрее для ВАШЕГО проекта - вам нужно будет написать модель вашего проекта с использованием этой инфраструктуры и протестировать ее.

0 голосов
/ 12 августа 2010

Вы проведете много времени и поймете, что все было потрачено впустую.
После завершения ваших тестов вы узнаете, что циклы из 1000000 пустых итераций далеки от реальной жизни и достигают уровня Apache.
Тогда вы не узнаете о кэшах опкодов, которые разрушат все ваши предыдущие результаты.
Затем вы узнаете, что один запрос к БД займет в 1000 раз больше времени, чем вызов API, поэтому сравнение методов доступа к базе данных действительно бесполезно.
Затем вы узнаете о memcache, который позволит вам просто перепрыгнуть через некоторые ужасные узкие места, которые вы уже обнаружили, и т. Д. И т. Д.

...