2010-01-05 3 views
5

Согласно this page, кажется, что Perl, PHP, Python в 50 раз медленнее, чем C/C++/Java.Какой язык программирования подходит для разработки веб-критических приложений?

Таким образом, я думаю, что Perl, PHP, Python не смог обработать критическое приложение (например,> 100 миллионов пользователей,> xx миллионов запросов каждую секунду). Но существуют исключения, например. facebook (сказано, что facebook написан на PHP полностью), wikipeida. Кроме того, я слышал, что Google использует Python широко.

Итак, почему? Чем быстрее аппаратное обеспечение заполняет большой промежуток между C/C++/Java и Perl/PHP/Python?

спасибо.

+3

Шаг 1. Определите случаи, о которых вы заботитесь. Шаг 2. Разработать системы для сбора чисел для этих случаев на разных языках. Шаг 3. Сравните, выберите язык и реализуйте. –

+3

Обычно говорят, что великие программисты могут кодировать отличные программы на дерьмовом языке, а дрянной программист может кодировать дерьмовые программы на отличном языке. поэтому важно то, как вы его кодируете, выбор языка является второстепенным. ;) – Lukman

+2

Если вам нужно выбрать быстрый язык для реализации известного алгоритма, контрольные показатели перестрелки означают что-то. Если вам нужно выбрать язык для написания бизнес-приложения, тесты не означают приседания. Проблема заключается не в том, «какой язык может сделать X быстрее», потому что нет простого X для «вашего бизнеса». Производительность и надежность во многом сводятся к тому, насколько хороши ваши программисты, а не язык. – Schwern

ответ

5

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

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

+0

Быстрое аппаратное обеспечение - это решение; Google просто решил, что более экономично использовать товарное оборудование с широкими допусками тепла. –

+0

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

+1

kgiannakakis + Robert Grant ergo, Google - плохо разработанное приложение –

2

нет JIT компилятор в PHP, который компиляции кода в машинный код

Еще одна большая причина динамическая типизация РНР. Динамически типизированный язык всегда будет медленнее ..

нажмите ниже и далее

What makes PHP slower than Java or C#?

+0

почему голосую? !! – Hiyasat

+4

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

+0

Вопрос не в том, почему один язык медленнее другого, вопрос в том, что лучше для веб-разработки, поэтому он отвечает на неправильный вопрос. Кроме того, OP путается, что сырая производительность делает лучший язык, и этот ответ только подпитывает это. – Schwern

3

(такие как> 100 миллионов пользователей,> хх миллионов запрос каждый второй)

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

0

Google использует Python для GAE, а Windows Azure предоставляет PHP. Архитектура LAMP отлично подходит для масштабирования приложений.

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

Я надеюсь, что это помогает

0

Чтобы служить веб-страницы, вам необходимо:

  1. Прием и разбор запроса.
  2. Решите, что вы хотите сделать с запросом.
  3. Чтение/запись постоянных данных (база данных, кэш, файловая система)
  4. Выходные данные HTML.

«Скорость» на стороне сервера относится только к шагам два и четыре. Учитывая, что большинство сценариев стремятся сделать шаг 2 как можно короче, и что большинство веб-языков (включая PHP) оптимизируют шаг 4 настолько, насколько это возможно, на любом серьезном веб-сайте большая часть времени обработки запроса будет потрачена на шаге 3.

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

7

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

В горлышки бутылок в обычном веб-приложении высокого availablility являются (не nessecarility в таком порядке, но скорее всего):

  1. Database (IO и CPU)
  2. File IO
  3. Пропускная способность сети
  4. памяти на сервере приложений
  5. Ваш Java/C++/PHP/Python код

Ваши основные проблемы, чтобы сделать ваше приложение масштабируемым являются:

  1. Сокращение доступа к базе данных (кэширование, при кластеризации в виду, умный quering)
  2. Распределить приложение (кластерной)
  3. Устранение ненужных блокировок синхронизации между потоками (см. commons-pool 1.3)
  4. Создайте правильные индексы БД, модель данных и репликацию для поддержки многих пользователей.
  5. Уменьшите размер своих ответов с использованием инкрементальных обновлений (AJAX)

Только после того, как все вышеперечисленное реализованы, оптимизировать код

Пожалуйста, не стесняйтесь, чтобы добавить больше к списку, если я что-то пропустил

1

C легко самый быстрый язык там. Его так быстро мы пишем в нем другие языки. Никто серьезно не пишет веб-сайты в C. Почему? Его очень легко ввернуть в C способами, которые очень трудно обнаружить, и почти ничего не помогает. Короче говоря, он ест программистов и генерирует ошибки.

Построение надежного, быстрого приложения не связано с выбором самого быстрого langauge, его поддержки A) и B) масштабируемости.

Поддержание работоспособности означает, что у него не так много ошибок. Это означает, что вы можете быстро добавлять новые функции и изменять существующие. Вам нужен язык, который делает как можно больше работы для вас и не мешает. Вот почему такие вещи, как Perl, Python, PHP и Ruby, настолько популярны. Все они были написаны с учетом удобства программиста в отношении сырой производительности или аккуратности. C был написан для сырой производительности. Java была написана для концептуальной аккуратности.

Масштабируемость означает, что вы можете перейти от 10 пользователей до 10 000 пользователей, не переписывая все это. Это означало, что вы написали самый жесткий код, которым вы можете управлять, но очень оптимизированный код обычно сложно поддерживать код.Обычно это означает делать вещи на пользу компьютера, а не человека и бизнеса. Это жертвует ремонтопригодностью, и вы должны сказать своему боссу, что он займет 3 месяца, чтобы добавить новую функцию.

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

К примеру, я взял вялую PHP приложение, которое изо всех сил, чтобы справиться с 50 пользователей в то время, перешли от Apache с mod_php на lighttpd с балансировкой нагрузки, удаленные FastCGI процессы, позволяющие распараллеливание с минимальным изменением кода. Некоторое базовое профилирование показало, что фреймворк PHP, который они использовали для прототипа, был медленным, поэтому он был удален. Профилирование также предложило несколько индексов, чтобы запросы к базе данных выполнялись быстрее. Конечным результатом стала система, которая могла бы обрабатывать тысячи пользователей, и при необходимости можно было бы добавить больше емкости, оставив большую часть кода, не затрагивая бизнес-логику. Прошло несколько недель, и я не очень хорошо знаю PHP.

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

Вы найдете, что большая часть веб-страниц написана на PHP, Perl и Python, потому что их легко писать, с небольшими резкими битами, написанными на таких вещах, как C, Java и экзотики, например Scala (например, Twitter) , Например, Wikia является модифицированной Mediawiki, которая написана на PHP, но она является перманентной (среди прочих причин), делая heroic amount of caching.

+0

«Его так быстро мы пишем в нем другие языки» - это гораздо больше связано с ожиданием того, что какое бы аппаратное обеспечение не существовало, какой-то компилятор C будет поддерживать это оборудование. – igouy

0

Для php есть много вещей, которые вы можете сделать для повышения производительности. Например

  • Php Accelerator
  • Кэширование запросов
  • Оптимизация запросов
  • Использование профайлер, чтобы найти более медленные части и оптимизировать

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

0

Я согласен с luc. Его архитектура, которая действительно имеет значение, а не язык программирования.

Смежные вопросы