Будет ли веб-разработка в c ++ cgi действительно огромным приростом производительности? - PullRequest
7 голосов
/ 22 июля 2011

Я задаю вопрос после прочтения этой статьи http://stevehanov.ca/blog/index.php?id=95

Также не является штрафом использование cgi вместо fastcgi?

Обновление: почему некоторые люди делают вид, что в ответ "что вы получаете повышение производительности на 20-30%"? Это чистое предположение или это число исходит из надежного теста? Я смотрел на производительность HipHop больше в масштабе 10 раз.

Ответы [ 6 ]

20 голосов
/ 18 декабря 2011

Я сделал webdev на нескольких языках и в фреймворках, включая python, php и perl.Я сам размещаю их, и мои крупнейшие сайты получают около 20 тыс. Посещений в день.

Любой язык и инфраструктура, которые имеют разумную скорость, могут быть расширены до 20 тыс. Посещений в день, просто используя для этого ресурсы.Некоторые занимают больше ресурсов, чем другие.(Plone, Joomla. Я смотрю на вас).

Мои сайты Witty (еще не запущенные в производство) занимают гораздо больше (из памяти на 5000% больше) (используя seige), чем, например, мой питонместа.То есть.Когда я нажимаю на них так сильно, как могу с помощью seige, остроумные сайты обслуживают намного больше страниц в секунду.

Я знаю, что это не настоящий общий тест.

Другие быстрые преимущества, которые остроумныдает вам:

Многопоточность

Если вы развертываете со встроенным websrever (например, за ha-proxy) и ваше приложение будет многопоточным ... оноВы загрузите намного меньше памяти, чем, скажем, приложение на Perl или PHP.

Как правило, с приложениями php и perl Apache запускает процесс для каждого входящего соединения, и каждый процесс загружает весь интерпретатор php, весь код и переменные и объекты, а что нет.С такими мощными средами, как Joomla и Wordpress (в зависимости от количества плагинов), каждый процесс может сильно пострадать от потребления памяти.

С приложением Wt каждый сеанс загружает экземпляр WApplication (объект C ++) и егоцелое дерево виджетов и прочее.Но память, используемая кодом, остается неизменной независимо от количества подключений.

Встроенная версия Web2.0 ness

Как правило, с традиционными приложениями они все еще создаютсявокруг старого «HTTP-запроса приходит« .. »мы обслуживаем страницу« .. готово »стиль вещей.Я знаю, что они все время добавляют все больше и больше видов AJAXy.

С Wt по умолчанию используется WebSockets, где это возможно, для обновления только той части страницы, которая нуждается в обновлении.Он возвращается к стандартному AJAX, тогда, если это не поддерживает HTTP-запросы.При использовании клиентов с поддержкой AJAX и WebSockets постоянно используется один и тот же объект WApplication C ++. Поэтому при настройке нового сеанса скорость не теряется.

В ответ на «C ++ слишкомhard for webdev '

C ++ имеет некоторую кривизну обучения.В середине девяностых мы делали сайты на Java j2ee.В то время это считалось коммерчески жизнеспособным и было очень непростой задачей, но оно имело хорошее преимущество, заключающееся в поощрении хорошей практики документирования и кодирования .

С веб-сайтами сценариев этолегко взять ярлыки и не понять, что они там.Например, на одном 8-летнем Perl-сайте, над которым я работал, был дублирован некоторый код, и никто не заметил.Каждый раз, когда он отображал список продуктов, он выполнял один и тот же SQL-запрос дважды.

С сайтом C ++ я думаю, что у него было бы меньше шансов, потому что на сайте perl было не так многоСтруктура программирования (как функции), это был просто Perl и встроенный HTML.В C ++ вы, скорее всего, будете иметь методы с именами и в итоге столкнетесь с именами.

Типы

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

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

С C ++ и Java, компилятор выдает ошибки и предупреждает lot о таких ошибках для вас.

Я считаю, что модульное тестирование, как правило, не столь необходимо для приложений на C ++ (не стреляйте в меня) по сравнению с приложениями на языке сценариев. Это происходит из-за того, что язык применяет множество вещей, которые вы обычно помещаете в модульный тест, например, для приложения на Python.

Резюме

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

9 голосов
/ 22 июля 2011

От людей, с которыми я говорил, которые перешли с PHP на Wt (веб-фреймворк C ++), сообщили о значительных улучшениях. Из небольших приложений, которые я создал, используя Wt для изучения, я видел, что он работает быстрее, чем те же приложения типа PHP, которые я создал. Бери информацию за то что будешь, но я продан.

5 голосов
/ 22 июля 2011

Это напоминает мне, как 20-30 лет назад люди ставили Assembly против C, а затем 10-20 лет назад C против C ++. Конечно, C ++ будет быстрее, чем PHP / Rails, но для создания обслуживаемого и масштабируемого приложения потребуется в 5 раз больше усилий.

Дело в том, что вы получаете повышение производительности на 20-30%, жертвуя своими ресурсами разработки. Вы бы предпочли, чтобы ваше приложение работало на 30% быстрее или было реализовано 1/2 функции?

3 голосов
/ 22 июля 2011

Я конечно не продан на этом.Если вы хотите повысить производительность по сравнению с PHP, почему бы не использовать среду Java (или еще лучше Scala)?Они намного лучше для веб-разработки, имеют красивые, относительно простые в использовании фреймворки и позволяют избежать многих головных болей в C ++.Я всегда видел один из главных плюсов веб-разработки (и большинства современных ненаучных / высокопроизводительных приложений) как возможность избежать головной боли, которая сопровождает разработку C / C ++.

3 голосов
/ 22 июля 2011

Всякий раз, когда вы устраняете уровень интерпретации или абстракции ОС, вы обязательно получите некоторое повышение производительности. При этом язык или технология сами по себе не означают, что все ваши проблемы решены. Я исправил код C ++, который занимал много часов, чтобы обработать относительно простой набор записей. Проблема была в реализации, и исправление не было связано с функциями или ограничениями языка.

Предполагая, что все реализовано правильно, вы обязательно получите лучшую производительность. Проблема будет в поиске ошибок. Одна из проблем с C ++ заключается в том, что многие разработчики в настоящее время «обучены» или привыкли иметь много деталей, связанных с управлением памятью за объектами. Это устраняет необходимость учитывать такие вещи, как «Что может произойти, если я передам этот указатель нескольким потокам?» Иногда это работает хорошо, но не всегда. У вас все еще есть некоторые тонкости языка, которые вы должны учитывать, независимо от того, как объекты скрывают неприятные детали.

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

3 голосов
/ 22 июля 2011

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

...