Использование С++ для ускорения PHP

Я видел это сообщение на Sitepoint со ссылкой на выражение Расмуса Лердорфа, которое идет (согласно Sitepoint) следующим образом:

Как вы можете быстро сделать PHP? Ну, вы не можете ответить "быстро". PHP просто недостаточно быстрый, чтобы масштабировать до уровней Yahoo. PHP никогда не предназначался для таких задач. "Любой язык на основе script просто не достаточно быстрый". что необходимо для действительно массивных веб-систем, вы должны использовать скомпилированные расширения С++, чтобы получить истинную масштабируемую архитектуру. Именно это делает Yahoo и многие другие тяжеловесы PHP.

Заинтригованный утверждением (не говоря уже о том, что до сих пор все, что я делал в PHP, были небольшими приложениями на базе базы данных), мне было интересно, как я могу "использовать скомпилированные расширения С++" с PHP.

Любые идеи или ресурсы?

Ответ 1

Даже не беспокойтесь. PHP медленный. Вы можете создать смесь С++ и PHP, но вам нужно сделать много профилирования, чтобы понять, что происходит медленно. И это в основном... PHP.

Смотрите следующее:

Просто напишите на С++ на первом месте. Это так же просто, как писать на PHP с современной веб-картой С++ и хорошими знаниями на С++.

С чего начать:

  • CppCMS - масштабируемая среда MVC, ориентированная на производительность.
  • Wt - фреймворк, который имитирует Qt для Интернета (не уверен, насколько он хорошо масштабируется).

Ответ 2

Медленный субъективный термин. Facebook (самый большой сайт онлайн) построен на PHP, и я никогда не слышал, чтобы они жаловались. Наоборот, в погоне за скоростью развитый и недавно выпущенный HipHop Если вы идете на сверхбыстрый PHP, вам следует сосредоточиться. С++ для Интернета является непрактичным, потому что его необходимо скомпилировать, и это замедлит процесс разработки.

Потому что: Почему так много веб-языков интерпретируется, а не компилируется?

http://www.bitsandbuzz.com/article/compiled-web-vs-interpreted-web/

Ответ 3

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

Ответ 4

Первый вопрос, который возникает на ум: вы разрабатываете для веб-сайта более миллиона просмотров в час? Потому что, если нет, то ваши затраты все в разработке программного обеспечения, и вы получите больше шансов для своего доллара, настроив ваш текущий код PHP и добавив аппаратное обеспечение, чем перенос даже части кода на C или С++.

См. также http://shootout.alioth.debian.org/ обратите внимание на сравнение размера кода.

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

Следующее, что нужно иметь в виду, состоит в том, что, хотя верно, что очень хорошо написанный скомпилированный код почти всегда превосходит аналогично хорошо написанный интерпретируемый код, когда качество кода даже немного меньше совершенного, разница уменьшается - и эффект будет зависеть от языка, а также от способности программистов. В настоящее время я ухожу за грамотно разработанным веб-приложением, написанным на Java (которое работает как родной код), что требует в два раза больше аппаратного ресурса для работы медленнее, чем сопоставимая система, которой я управлял, написанная на PHP программистами, которую лучше всего можно назвать довольно широкий диапазон уровней мастерства. Хотя это прямо противоречит тому, что большинство программистов считают здравым смыслом, я уверен, что интерпретируемый/скомпилированный аргумент не единственный. Существует множество оргранизаций/отдельных лиц, которые все еще разрабатывают интерпретируемые языки, например. Groovy, Apex.

С.

Ответ 5

Там введение в написание расширений php в http://devzone.zend.com/article/1021 (опубликовано в 2005 году, может быть немного устарело).
Вы также можете использовать такие инструменты, как swig для создания оберток для существующего кода на C/С++.

Ответ 6

Благодаря Артему за ссылку на эту информативную ссылку,

http://idleprocess.wordpress.com/2009/11/24/presentation-summary-high-performance-at-massive-scale-lessons-learned-at-facebook/

который говорит, помимо всего прочего, "С++ Interoperability Challenging".

С++ требует больших усилий для написания веб-сайта. Почему бы не выбрать язык между С++ и PHP, скажем, Python, который выполняется bytecode JIT, и я понимаю, что он довольно легко расширяется С++.

Ответ 7

Для больших вычислений и обработки С++ может использоваться с php. И для более легкого процесса достаточно только PHP.

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

Нужно создать процесс сервера (daemon), который поддерживает листинг для запроса. Этот процесс демон уже скомпилирован и содержит код обработки.

Поэтому, когда есть какой-либо запрос на обработку данных, он будет делать это намного быстрее, чем PHP, и ответьте с результатом.

Можно использовать exec или аналогичную функцию для выполнения исполняемого файла демона.