HipHop Facebook - Для чего это?

Новостями в мире PHP сегодня является HipHop Facebook, который:

HipHop для PHP не является технически самим компилятором. Скорее это - преобразователь исходного кода. HipHop программно преобразовывает Ваш исходный код PHP в высоко оптимизированный C++ и затем использует g ++ для компиляции его. HipHop выполняет исходный код семантически эквивалентным способом и жертвует некоторыми редко используемыми функциями — такими как оценка () — в обмен на улучшенную производительность. HipHop включает преобразователь кода, переопределение системы PHP во время выполнения и переписывание многих общих Расширений PHP для использования в своих интересах этой оптимизации производительности.

Мой вопрос, для каких веб-приложений это на самом деле полезно?

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

6
задан philfreo 2 February 2010 в 20:23
поделиться

6 ответов

Эта статья:

http://terrychay.com/article/hiphop-for-faster-php.shtml

прекрасно отвечает на этот вопрос с помощью серии утверждений «если».

0
ответ дан 8 December 2019 в 18:36
поделиться

Я был техническим редактором книги Марка. Мне очень понравилось, это хорошо написано и точно.

Интересно то, что между книгой Марка и книгой Джона (для которой я также был техническим редактором) есть и то, и другое имеет точные названия. «C # in Depth» действительно уходит в довольно большую глубину; Джон не уклоняется от абстракции или теоретической, хотя, конечно, он всегда следит за практической. Книга Марка на самом деле больше касается того, что важно понять, чтобы сделать работу. Оба подхода являются обоснованными и обоснованными.

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

-121--2066695-

По конструкции SELECT INTO не переносит ограничения (PK, FK, Unique), значения по умолчанию, проверки и т.д. Это происходит потому, что SELECT INTO может извлекать данные из нескольких таблиц одновременно (через соединения в предложении FROM). Поскольку команда SELECT INTO создает новую таблицу из указанных таблиц, SQL действительно не имеет способа определять, какие ограничения вы хотите сохранить, а какие нет.

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

-121--2948962-

Хорошо, что он «преобразует» PHP в C++, чтобы помочь производительности в значительной степени масштабируемого веб-сайта.

Таким образом, HipHop для, когда у вас есть сайт, который вы начали в Гарварде, что вы быстро вырасти в миллиард долларов компании и что люди снимают фильм о Джастине Тимберлейк в главной роли. Когда у вас есть такой веб-сайт и вы хотите сохранить циклы ЦП, но не хотите переписывать свою кодовую базу, вы используете HipHop.

Если вы только начинаете, если вы не попали в ловушку на пустынном острове с только PHP-программистами, которые отказываются изучать более масштабируемый язык, вы не используете HipHop.

4
ответ дан 8 December 2019 в 18:36
поделиться

Сначала добавить

filterContext.HttpContext.Response.Clear();

и это в конце:

filterContext.HttpContext.Response.End();

Надеюсь, это поможет.

-121--2663128-

Я бы пошел с boost:: scoped _ ptr здесь:

class A: boost::noncopyable
{
    typedef boost::scoped_ptr<B> b_ptr;
    b_ptr pb_;

public:

    A() : pb_() {}

    void calledVeryOften( /*…*/ )
    {
        pb_.reset( new B( params )); // old instance deallocated
        // safely use *pb_ as reference to instance of B
    }
};

Нет необходимости в ручном деструкторе, A не копируется, как это должно быть в вашем оригинальном коде, не утечка памяти при копировании/назначении.

Я бы предложил переосмыслить дизайн, хотя если вам нужно очень часто перераспределять какой-то внутренний государственный объект. Ознакомьтесь с параметрами Flyweight и State узоров.

-121--2666428-

Веб-приложения, которые выполняют большой объем обработки и/или используют большой объем памяти. По-видимому, этот HipHop сократит загрузку ЦП примерно на 50%, а также снизит использование памяти (я не видел, насколько использование памяти будет сокращено в любом месте). Это означает, что вы должны иметь возможность обслуживать одинаковое количество запросов с меньшим количеством серверов.

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

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

7
ответ дан 8 December 2019 в 18:36
поделиться

Сначала добавьте

filterContext.HttpContext.Response.Clear();

и это в конце:

filterContext.HttpContext.Response.End();

Надеюсь, это поможет.

-121--2663128-

Я бы пошел с boost:: scoped _ ptr здесь:

class A: boost::noncopyable
{
    typedef boost::scoped_ptr<B> b_ptr;
    b_ptr pb_;

public:

    A() : pb_() {}

    void calledVeryOften( /*…*/ )
    {
        pb_.reset( new B( params )); // old instance deallocated
        // safely use *pb_ as reference to instance of B
    }
};

Нет необходимости в ручном деструкторе, A не копируется, как это должно быть в вашем оригинальном коде, не утечка памяти при копировании/назначении.

Я бы предложил переосмыслить дизайн, хотя если вам нужно очень часто перераспределять какой-то внутренний государственный объект. Ознакомьтесь с параметрами Flyweight и State узоров.

-121--2666428-

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

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

2
ответ дан 8 December 2019 в 18:36
поделиться

Вы можете думать об этом как о каком-то компиляторе, который принимает кучу файлов .php и генерирует кучу файлов C ++, для которых вы затем можете компилировать с использованием g ++ (не уверен, поддерживаются ли другие компиляторы). Полученный exe - это ваше веб-приложение с включенным веб-сервером. Это означает, что вы можете запустить exe, и все готово. Веб-сервер основан на libevent и предположительно довольно эффективен.

0
ответ дан 8 December 2019 в 18:36
поделиться

Хип-хоп, по сути, бессмыслененен для всех, кроме Facebook и других гигантских сайтов на базе PHP. Я уверен, что многие люди будут прыгать в этом направлении из-за "это быстро", но сколько приложений, основанных на PHP, используют целые серверные фермы? То, что вы работаете на сайте социальной сети, не означает, что вы должны подумать об использовании HH.

0
ответ дан 8 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

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