Почему так много веб-языков интерпретируются, а не компилируются? - PullRequest
34 голосов
/ 04 декабря 2008

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

Ответы [ 15 ]

25 голосов
/ 04 декабря 2008

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

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

23 голосов
/ 04 декабря 2008

Большинство веб-приложений общаются с базой данных. Подавляющее большинство этих приложений тратят почти все свое время на связь с базой данных. Таким образом, для любого данного запроса к приложению на сервере приложений происходит небольшая обработка, а затем длительная пауза в ожидании базы данных. Поскольку такой небольшой процент времени любого запроса тратится на реальный код сервера приложений, оптимизация этого кода путем написания его на C / C ++ даст лишь незначительное, вероятно, не заметное, улучшение времени отклика.

Таким образом, вместо того, чтобы сосредотачиваться на C / C ++ и сохранять каждый последний цикл процессора, имеет больше смысла беспокоиться о производительности разработчиков. Разработчики очень дорогие. И они, как правило, гораздо более продуктивны в языке сценариев или даже в Java, чем в C / C ++.

Конечно, есть исключения из этого. И если некоторые запросы к вашему приложению требуют много ресурсов процессора или памяти, они должны быть написаны на C / C ++. Но для остальной части вашего приложения вам лучше сосредоточиться на оптимизации ваших алгоритмов, структур данных, связи с базой данных и производительности разработчика, чем на оптимизации вашего языка.

13 голосов
/ 04 декабря 2008

Языки сценариев имеют следующие преимущества перед C:

  1. Гораздо быстрее развитие
  2. Сегодня все, кто имеет отношение к этому вопросу, компилируются во время выполнения. В некоторых случаях это может сделать их быстрее, чем эквивалентная программа на C, поэтому производительность больше не является проблемой.
  3. Расходы на техническое обслуживание намного меньше
  4. Вы можете разрабатывать, используя Agile методы (например, модульные тесты), что приводит к гораздо лучшему коду. Да, вы можете сделать это и в Си, но это гораздо больше усилий.
  5. Когда вы занимаетесь веб-разработкой, у вас есть огромные фреймворки, которые выполняют большую часть работы за вас.
  6. Они гораздо более открыты для изменений. Реализация новой функции может занять до нескольких минут.
  7. Если что-то сломалось, вы можете войти на свой сервер, запустить текстовый редактор в консоли и исправить проблему, иногда без перезагрузки.
11 голосов
/ 04 декабря 2008

C использовался для веб-приложений на ранних этапах - я написал в нем различные CGI-скрипты.

Однако со временем более производительные языки (например, C # и Java - но не только те), как оказалось, оказались "достаточно эффективными" для веб-приложений. Обратите внимание, что и C #, и Java компилируются в промежуточный код, а затем JIT-компилируются, что позволяет добиться «грубой» производительности собственного кода. Почему мы хотим использовать C вместо этого?

Насколько я знаю, даже традиционно "подлинно интерпретируемые" языки, такие как PHP, часто компилируются во время исполнения. (Мои знания PHP, в частности, все из вторых рук. Может быть, они всегда компилировались ... И точно так же я уверен, что есть веб-платформы, которые до сих пор всегда интерпретируются.)

9 голосов
/ 04 декабря 2008

Отличный вопрос. Причина в основном из-за эволюции сети. Подумайте об этом поэтапно:

1) Основной текст в «сети» -> 2) Некоторая «разметка», добавленная к тексту -> 3) тег «center» и «marquee» сформированы !!! какой прогресс !!! -> 4) скриптинг на клиенте !!! 5) -> хм ... скриптинг на сервере !!!

Хотя я и придумал этот ответ, чтобы быть немного глупым, это действительно правда. Интеренет, и особенно «сеть», был удивительным эволюционным процессом. Действительно, требования к более мощным языкам (и более производительным языкам) появились совсем недавно.

Кроме того, посмотрите на инструменты. Я сделал свой PHP в блокноте (и некоторых других простых приложениях). Когда я впервые занимался веб-разработкой, на моем компьютере не было достаточно места на жестком диске для поддержки Visual Studio 2008:)

Side Point Однако: там были приложения ".exe" (я думаю, что " SunBiz " отправляет сообщения в "exe"), и некоторые скомпилированные приложения на некоторое время, но они были очень меньше.

9 голосов
/ 04 декабря 2008

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

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

8 голосов
/ 04 декабря 2008

Стоит отметить, что большинство языков сценариев (Python, Ruby и т. Д.) Легко - почти тривиально - соединяются с C. (Я только что написал несколько расширений C для программы на Python, и меня поразило, насколько легко это был.) Если у веб-сайта / веб-приложения есть некоторые узкие места из-за использования «медленного» языка сценариев, обычно можно написать разделы, критичные к производительности, на более быстром языке, таком как C. На самом деле, это то, что большие приложения, такие как Google поиск, Facebook и т. д. делают - они пишут интерфейс на языке сценариев и выполняют тяжелую работу с другими языками, такими как C.

7 голосов
/ 04 декабря 2008

Попробуйте выполнить синтаксический анализ / манипулирование строками в C и в Perl / PHP, и вы узнаете.

КСТАТИ: Почему так много людей заявляют, что производительность больше не является проблемой? Я не могу быть проблемой для небольших домашних страниц / блогов, но крупномасштабные веб-приложения все еще должны быть настроены на производительность (процессор / сеть / память), независимо от того, написаны ли они в java, php или ruby.

7 голосов
/ 04 декабря 2008

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

1 голос
/ 04 декабря 2008

Многие из чрезвычайно полезных функций динамических языков, таких как самоанализ и такие функции, как eval (), действительно трудны / невозможны? реализовать на языках, компилируемых в нативный код.

При этом большинство языков сценариев компилируют (на лету) некоторый промежуточный код, который затем интерпретируется (Python, Ruby, Perl) или, возможно, даже JIT, скомпилированный с нативным кодом (JSP, .NET)

...