C++ FastCGI по сравнению с языком сценария (PHP/Python/Perl)

Это должно быть while (t<= c+count-1) вместо while (t<= t+count-1) Последнее условие всегда верно.

22
задан The Unknown 30 April 2009 в 08:43
поделиться

13 ответов

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

C ++ был бы значительно лучше, в основном потому, что std :: string намного лучше, чем char * .

Однако теперь я буду использовать Python каждый раз (хотя PHP - не страшный выбор, и, возможно, легче начать с него). Обработка строк в Python великолепна, и она легко обрабатывает Unicode. Python имеет гораздо лучшие веб-инструменты и фреймворки, чем C ++, и его обработка регулярных выражений и стандартные библиотеки (urllib, email и т. Д.) Работают очень хорошо. А ты не

22
ответ дан 29 November 2019 в 03:20
поделиться

Если вы хотите иметь возможность реализовать веб-службы в существующем запущенном процессе (например, демоне), который написан на C / C ++. Имеет смысл заставить этот процесс реализовать протокол FastCGI для этого интерфейса. Получите Apache для работы с HTTP (2-way SSL и т. Д.) С внешним миром и отправки запросов через FastCGI через сокет. Если вы делаете это на PHP, вам нужно заставить PHP общаться с вашим процессом, что означает поддержку PHP-кода, а также вашего процесса.

6
ответ дан 29 November 2019 в 03:20
поделиться

Вопрос в том, «где создано значение?»

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

Если вы считаете, что ценность заключается в развертывании приложений, которые могут использовать люди, то используйте Python с Django фреймворк. Учебное пособие по Django показывает, что примерно через 20 минут вы можете запустить и запустить приложение. Он готов к производству, и вы могли бы сосредоточиться на важных вещах:

  • Модель. Просто напишите модель на Python, и слой ORM обрабатывает все взаимодействия с базой данных за вас. Нет SQL. Нет ручного отображения.

  • Презентация. Просто спроектируйте свои страницы в HTML с помощью нескольких {{}} «введите значение здесь» и нескольких {% для вещи в object_list%} и ваши страницы готовы к идти. Никаких манипуляций со строками.

  • Функции просмотра. Напишите простые функции Python для инкапсуляции обрабатывающей части вашего сайта. Не проверка (это в формах), не представление (что было в шаблонах), не базовая модель (что было в классах моделей), но немного проверки авторизации, обработки запросов и формулирования ответов. Поскольку в Python имеется богатый набор классов коллекций, этот код оказывается очень коротким и конкретным.

  • Другие вещи. Отображения URL - это регулярные выражения Python. Формы соответствуют вашей модели; Вы можете создать подклассы по умолчанию, чтобы добавить настраиваемую проверку ввода и обработку.

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

Нет управления памятью, нет скрупулезного проектирования классов с рефератами и интерфейсами. Не беспокойтесь о том, как оптимизировать работу со строками. Нет ночной сборки. Просто создайте материал, имеющий реальную ценность.

7
ответ дан 29 November 2019 в 03:20
поделиться

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

хороший пример - twitter / ruby; Рубин медленный. некоторые языковые функции (которые в первую очередь делают рубин приятным) просто предотвращают различные виды оптимизации (об этом есть отличная статья парня из jruby ... это была Ола Бини? Не помню).

Тем не менее, твиттер работает от ruby, потому что ruby ​​достаточно быстр . не так давно «блоги» сообщали о том, что твиттер мигрирует в scala по соображениям производительности ... правда в том, что в scala переместилась только очередь сообщений (и другие части серверной части). Yahoo работает на смеси языков; php для внешнего интерфейса, другие, более быстрые языки используются там, где производительность критична.

Итак, почему производительность не так важна? Есть несколько причин:

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

еще одна точка написания сценариев: многие языки сценариев поддерживают встраивание или включение быстрый (C) код:

  • python, встроенный c
  • php: расширения в c
  • серверный javascript через rhino:
31
ответ дан 29 November 2019 в 03:20
поделиться

Наличие веб-приложения FastCGI (независимо от C ++, PHP, Perl, Python, Ruby и т. Д.) Обеспечивает лучшее начальное время запуска, чем приложение CGI. Под начальным временем запуска я подразумеваю время, прошедшее между моментом, когда веб-сервер получил запрос, и временем выполнения первой написанной вами строки кода, поэтому начальное время запуска - это минимальное время, которое посетители посещают. Ваше веб-приложение должно ждать каждого запроса. Нередко начальное время запуска составляет 1 секунду, особенно если у вас большое приложение или вы используете большую среду (например, Ruby on Rails). FastCGI поддерживает работу ваших приложений после того, как он ответил на первый запрос, поэтому FastCGI сокращает начальное время запуска всех последующих запросов (за исключением самого первого), обычно до нескольких миллисекунд.

Если вы используете PHP, обычно его конфигурация по умолчанию обеспечивает достаточно хорошее начальное время ответа (даже без FastCGI), но, пожалуйста, убедитесь, что вы используете ускоритель PHP на своем производственном сервере (см. http: //en.wikipedia). .org / wiki / PHP_accelerator ) для повышения производительности.

Большинство языков программирования и каркасов позволяют запускать одно и то же приложение в разных режимах сервера (таких как CGI, FastCGI, встроенный веб-сервер, модуль Apache) с помощью изменение конфигурации приложения без изменения кода. FastCGI обычно не лучший выбор при написании приложения, потому что после изменения кода вам, возможно, придется перезапустить приложение, чтобы оно приняло ваши изменения, но обычно перезапускать приложение FastCGI неудобно. Перезапустить CGI или встроенный веб-сервер гораздо проще.

4
ответ дан 29 November 2019 в 03:20
поделиться

Вы можете использовать FastCGI с PHP / Python / Ruby / Perl, чтобы получить производительность во время выполнения, которой должно быть достаточно, пока ваш сайт не станет действительно большим. И даже в этом случае вы можете вносить улучшения в архитектуру (настройка базы данных, кэширование и т. Д.) Для еще большего масштабирования, не отказываясь от языков сценариев. Некоторые довольно большие сайты сделаны на PHP / Python / Ruby / Perl.

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

2
ответ дан 29 November 2019 в 03:20
поделиться

Здесь есть середина. Python (и я считаю, Perl и Ruby) позволяет вам вызывать функции из C. 99 раз из 100, вам не нужно. Но приятно знать, что опция есть, если она вам нужна.

Обычно для веб-приложений скорость языка программирования просто не проблема. За время, необходимое для выполнения одного запроса к базе данных, процессор может выполнить несколько миллиардов инструкций. Примерно то же самое для отправки и получения данных http.

3
ответ дан 29 November 2019 в 03:20
поделиться

Использование C ++ может привести к радикально более быстрому применению, чем PHP, Perl или Python и несколько быстрее, чем C # или Java - если он не тратит большую часть своего времени на ожидание БД, в этом случае не будет никакой разницы. На самом деле это самый распространенный случай.

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

И именно поэтому в наши дни почти никто не пишет веб-приложения на C ++.

11
ответ дан 29 November 2019 в 03:20
поделиться

Я думаю, что кто-то должен быть пионером в теме Webapp / C ++, чтобы испытать свои возможности и предоставить доказательства концептуальных решений.

С появлением STL и развитием текста для анализа Boost произошло быть чрезвычайно простым с C ++. Два года назад, если бы мне пришлось анализировать данные CSV, я бы использовал Python или PHP. Сейчас я использую C ++ с STL / Boost. Чтение файла CSV в векторы? Нет проблем, просто getline + boost :: split + lexical_cast. Вычислить сумму данных в векторе пар? Нет проблем:

pair<int, double> sum_int_double(pair<int,double> & total, pair<struct in_addr, pair<int,double> > & a) {
    total.first += a.second.first;
    total.second += a.second.second;
    return total;
}
pair<int,double> mixedSum = accumulate(mixedVec.begin(), mixedVec.end(), emptyPair, sum_int_double);

Перенос данных с карты в вектор пар? Нет проблем:

mixedVec.assign(amap.begin(), amap.end());

Все четко и четко. Строковые операции, регулярные выражения, алгоритмы, ООП и т. Д. Все хорошо определено и хорошо развито в C ++. Если ваше приложение будет по-настоящему похоже на приложение и не будет разбирать текст на основе, то C ++ также будет хорошим выбором с его функциями ООП.

8
ответ дан 29 November 2019 в 03:20
поделиться

Есть люди, которые спрашивали об этом раньше: http://cppcms.sourceforge.net/wikipp/ ru / page / main

Проект CppCMS предоставляет основу для веб-разработки с использованием C ++.

Вы можете взглянуть на следующие тесты, чтобы понять, в чем разница: http://cppcms.sourceforge.net/ wikipp / en / page / benchmarks - порядка двух порядков.

Проблема PHP / Python в том, что они очень медленные, есть много проблем в кешировании данные в FastCGI-процессе PHP.

Самая большая проблема C ++ - это небольшое количество ресурсов для разработки Web на C ++. Однако использование такой инфраструктуры, как CppCMS, значительно упрощает жизнь.

3
ответ дан 29 November 2019 в 03:20
поделиться

Жаль, что нет тестов C / C ++ против Perl CGI.
Я думаю, что без FastCGI C / C ++ был бы намного быстрее, с FastCGI, возможно, он будет быстрее (но, возможно, немного меньше - вся инициализация выполняется один раз).
Опять же, это очень приложение , поэтому необходимо предоставить какие-то тесты для различных динамических веб-страниц.

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

В конце концов, скомпилированный язык работает быстрее. Но, наверное, сейчас сложно найти хороших разработчиков C / C ++?

Ура,

1
ответ дан 29 November 2019 в 03:20
поделиться

Что ж ... Вы сэкономите память и мощность процессора с помощью C / C ++ против Python / Perl / Ruby / Java / .NET. Если ресурсы, сэкономленные с помощью C / C ++, составляют большую часть от общего числа доступных ресурсов (FastCGI, работающий на встроенной плате робота), то да, C / C ++. Иначе зачем беспокоиться?

2
ответ дан 29 November 2019 в 03:20
поделиться

Наверное, кому-то из вас может быть интересно в Wt [1], веб-инструментарии, полностью написанном на C++. Это может быть альтернативой cppCMS. Я пытаюсь оба в эти рождественские праздники...

[1] http://www.webtoolkit.eu/wt

2
ответ дан 29 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: