Интерпретированные и скомпилированные языки для веб-сайтов (PHP, ASP, Perl, Python и т. Д.)

Я строю веб-сайты на основе базы данных. Ранее я использовал Perl или PHP с MySQL.

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

Я видел несколько страниц здесь, где вопросы о том, как оптимизировать PHP, подвергаются критике с различными версиями: "Не стоит идти на все, чтобы оптимизировать PHP, поскольку это интерпретируемый язык, и это не будет иметь большого значения".

Я также слышал различные дискуссии (особенно на подкасте SO) о преимуществах компилируемых и интерпретируемых языков, и кажется, что в моих интересах было бы использовать скомпилированный язык для обслуживания сайта вместо интерпретируемого языка.

Возможно ли это даже в веб-контексте? Если да, то какой будет разумный выбор языка?

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

7 ответов

Решение

То, что вы можете сделать, - это то, что делают несколько сайтов с большим трафиком (например, Facebook или Twitter), то есть записать свой алгоритм использования процессора в C-плагине.

Например, вы можете написать расширение PHP, если вы планируете использовать PHP, или расширение Ruby, если вы планируете использовать Ruby / Ruby on Rails и т. Д.

Таким образом, вы можете сделать свой оптимизированный код простым и легким в обслуживании (это может быть намного сложнее обрабатывать запросы из C, а не из PHP), при этом имея сильное и твердое фоновое ядро ​​(потому что оно скомпилировано, и компилятор скажет вам, что вопросы находятся во время компиляции)

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

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

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

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

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

Есть много частей, которые входят в веб-приложение. Время, занимаемое прикладным уровнем, не должно быть большим. Для типичного приложения самые большие уловки были бы в веб-сервере и в базе данных. Замена PHP на двоичный cgi не изменит этого.

Кроме того, хотя интерпретируемые части PHP могут быть несколько медленными, это лишь малая часть того, что происходит при выполнении сценария PHP. Все функции, которые предоставляются как часть языка, реализованы в собственном коде. Например, когда вы вызываете функцию, такую ​​как preg_match, он вызовет библиотеку собственного кода и позволит ей делать свою работу. Это означает, что происходит меньше фактической интерпретации, чем вы думаете.

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

ИМХО, это бессмысленно писать сложные веб-приложения на скомпилированном языке, так как это не дает преимуществ против ряда проблем управляемости.

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

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

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

  1. Сетевые задержки
  2. Статические носители, особенно изображения
  3. Запросы к базе данных
  4. Серверный код обработки
  5. Код обработки на стороне клиента

1 и 5 не имеют большого отношения к этому вопросу.

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

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

Люди могут спросить "Зачем оптимизировать PHP?" потому что 2 и 3 часто более важны в любом случае. Часто хорошая структура кэширования базы данных будет лучшей (и более простой) оптимизацией.

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

Perl не является интерпретируемым языком: он компилируется в байт-код, поэтому вы платите за интерпретацию только при запуске исполняемого файла perl. Поэтому при использовании его с Apache не используйте CGI, а mod_perl.

Что бы вы ни делали, время разработки, вероятно, будет значительно превышать время отклика, если вы выберете язык, который не подходит для веб-программирования или не имеет хороших библиотек для поддержки того, что вам нужно делать. Например, я бы никогда не выбрал C или C++. Вам не нужно веб-приложение, которое быстро работает, но с ошибками и запаздывает на 6 месяцев.

Другие вопросы по тегам