<rmcreative>

RSS

Все заметки с тегом «php»

Можно уточнить:

  1. Потребление памяти и длина имени переменной в PHP

    21 января 2013

    Недавно всплыло обсуждение именования переменных в Yii, а именно

    class CComponent
    {
        private $_e;
        private $_m;

    Я согласен, что выглядит плохо, но именно в данном случае такие имена переменных более-менее оправданы и в Yii2 останутся примерно такими же:

    class Component extends \yii\base\Object
    {
        /**
         * @var Vector[] the attached event handlers (event name => handlers)
         */
        private $_e;
        /**
         * @var Behavior[] the attached behaviors (behavior name => behavior)
         */
        private $_b;

    Дело в том, что каждый экземпляр класса с нормальными именами переменных будет кушать больше памяти. Например, $_behaviors и $_events скушают 8 байт на экземпляр.

    Конечно, 8 байт ничто и сокращать таким образом переменные в обычных приложениях определённо не стоит. Но не в случае самого-самого базового класса фреймворка. В зависимости от приложения, наследников Component может быть довольно много. Например, на 1000 объектах AR накладной расход выльется в 8 килобайт.

    40 комментариев
  2. Mobile_Detect, определение мобильных устройств средствами PHP

    15 января 2013

    Отличная, поддерживаемая и развивающаяся библиотека для определения мобильных устройств. Полезна, например, если надо вывести ссылку на AppStore для iOS и на Google Play для Android. Ну или показать дополнительный контент для планшетов.

    Проект спонсируется компанией BrowserStack, так что жить будет, надеюсь, долго и счастливо.

    Пользуемся

    10 комментариев
  3. Yii, frameworks and where PHP is heading to

    12 ноября 2012

    Слайды с прошедшей WebConf Riga 2012. Язык английский, также как и язык самого доклада.

    Видео записывалось, возможно будет.

    27 комментариев
  4. Chrome не удаляет сессионные cookie

    4 ноября 2012

    Как показали исследования на форуме yiiframework.ru, Chrome местами слишком умный. В его недрах есть настройка «Продолжать работу приложений в фоновом режиме после закрытия Google Chrome», по умолчанию включенная.

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

    12 комментариев
  5. Чем Facebook занимался после HipHop

    16 октября 2012

    Думаю, многие слышали про HipHop — компилятор PHP, который использовался в Facebook.

    Анонсирован он был в 2010 году. С тех пор Facebook не останавливался в своём желании ускорить разработку и выполнение кода.

    В декабре 2011 нам показали виртуальную машину для HipHop. Примерно тогда же Facebook перешёл на неё, значительно ускорив выполнение кода. Код всё ещё компилировался. Для разработки это было явно неудобно и была сделана JIT-версия, которая компилировала и выполняла код на лету. Производительность при этом, хоть и была ниже, чем у компилированного кода, но ненамного.

    В мае 2012 Facebook спонсирует двухмесячную разработку простого интерпретатора PHP на PyPy. В итоге выходит JIT-компилятор, способный переваривать большинство конутрукций и функций PHP (без классов). Код выполняется быстрее, чем в HipHop VM. И это за два месяца.

    Ближе к середине августа всплывают слухи о том, что Facebook планирует переписать HipHop VM под JVM, основанные на том, что инженеры Facebook побывали на JVM Language Summit и живо интересовались данной темой. В той же заметке приводится оценка в шесть человеколет на реализацию проекта, что не так много, учитывая ресурсы Facebook. К тому же, есть варианты купить и использовать Quercus или Project Zero.

    Каким путём пойдёт Facebook далее пока не ясно. Ясно одно: в этом направлении они останавливаться не собираются.

    7 комментариев
  6. Что нас ждёт в PHP 5.5

    16 октября 2012

    PHP 5.5 планируется выпустить в Феврале-Марте 2013. Отвечать за релиз в этот раз будет Julien Pauli, который приедет на WebConf в ноябре.

    Версия 5.5 будет обратно совместма с остальной линейкой 5.x, так что можно будет смело обновляться. Итак, интересности из транка, которые, возможно, попадут в 5.5.

    Читаем

    20 комментариев
  7. Простой автоматический деплой из репозитория github

    20 сентября 2012

    Делается довольно легко. Особенно, если деплоить нужно только последний коммит из master.

    1. Ставим на сервере git.
    2. Делаем clone своего репозитория. Лучше использовать URL только для чтения вроде git://github.com/samdark/yiiframework_ru_cookbook.git.
    3. Берём код ниже, заменяем /var/www/path/to/your/git/root на путь к склонированному репозиторию. Вливаем в вебрут сервера.
    4. Идём на страницу своего репозитория на github → admin → service hooks → WebHook URLs. Добавляем там URL залитого скрипта. Там же смотрим актуальные IP серверов github и сравниваем с теми, что в скрипте.
    5. Проверяем, что у вебсервера есть права писать в склонированные директории (в том числе и в скрытый .git).
    6. Наслаждаемся автоматическим деплоем.
    22 комментария
  8. PhpStorm 5

    12 сентября 2012

    PhpStorm 5

    Релизнулась очередная версия лучшей (по крайней мере для меня) IDE для PHP.

    Основные улучшения касаются PHP в общем, но, в этой версии добавили и немного для поддержки фреймворков. А именно поддержку MVC Symfony2 и Yii (ура-ура!).

    • В редакторе PHP переработаны внутренние механизмы распознавая типа переменных и полей классов, что привело заметному улучшению качества и скорости дополнения.
    • Куча дополнений к поддержке SQL и СУБД: рефакторинг схемы, редактирование хранимых процедур, генерация миграций, улучшенное дополнение SQL и другие.
    • Можно использовать свои правила для PHP CodeSniffer.
    • Поддержка стандартов кода Symfony2, PSR1/PSR2, Drupal.
    • «Live Edit» для PHP/HTML/CSS/JS.
    • Большое количество улучшений в редакторах JavaScript и CSS/Sass/LESS.

    Кроме того, сделано довольно много косметических изменений интерфейса.

    Для тех, кто приобрёл лицензию после 12 Сентября 2011, обновление бесплатно.

    До 14 Сентября можно приобрести IDE со скидкой. На обновление скидка не распространяется.

    25 комментариев
  9. Zend Framework 2.0

    6 сентября 2012

    Релизнулся ZF2. Сами разработчики особо отмечают:

    • Поддержку модулей.
    • Service Locator(IoC контейнер) и Dependency Injection контейнер.
    • События, включая observer, pubsub, signal-slot.
    • MVC на событиях и контейнерах.
    • Загрузчик классов с PSR-0 и class-map (явное сопоставление имя класса → путь).
    • «If you've worked significantly with ZF1, ZF2 will look alien to you». То есть это принципиально другой фреймворк и всё, что вы знаете про ZF1, можно выкинуть.

    Свои мысли по поводу того, что получилось у Zend выскажу позже, а пока

    9 комментариев
  10. Блокирование сессий в PHP

    21 июня 2012

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

    Чтобы показать наглядно, набросаем пару тестовых скриптов.

    test1.php

    <?php
    session_start();
    sleep(10);
    echo '1';

    test2.php

    <?php
    session_start();
    echo '2';

    Ничего необычного, правда?

    Теперь запустим их параллельно. Воспользуемся jQuery:

    $.get('/test1.php');
    $.get('/test2.php');

    В итоге получается вот такая картинка (это вкладка Net из Firebug):

    test1.php заблокировал работу test2.php.

    При использовании сессий «из коробки», данные хранятся в одном единственном файле, который оказывается заблокированным с момента вызова session_start и до окончания работы скрипта.

    В том случае, если сессия вам нужна только для чтения, или есть возможность записать всё необходимое перед медленной частью скрипта, можно её закрыть явно при помощи session_write_close():

    <?php
    session_start();
    session_write_close();
    sleep(10);
    echo '1';

    В этом случае мы получим желаемую картину:

    Если же необходимо писать в сессию после медленных операций, придётся сменить «коробочную» сессию на свою реализацию с неблокируемым хранилищем, таким, например, как база данных.

    Стоит отметить, что если при этом не позаботится о race condition, можно наступить на хорошие такие грабли.

    Материалы:

    14 комментариев