Search
Write a publication
Pull to refresh
47
0
Kirill Yegorov @coh

Пользователь

Send message
https://bugs.php.net/bug.php?id=67934 тоже не вот приятный баг, а висит с 2014г (кстати в 7ку он так же перекочевал)
Про сложность алгоритмов я ничего не писал. А так, полностью согласен.
Вы невнимательно прочитали мой комментарий.
В какой момент очевидные вещи стали мифами?
Вот вам несколько тестов на скорость доступа к данным:
test_array.php — использование массива
test_object.php — использование класса-обертки
test_object_magic.php — использование класса-обертки с магическим методом
PHP 7.0.4
Исходники
Array:
<?php
$time = microtime(true);
$data = [0,1,2,3,4,5,6,7,8,9];
for($i=0;$i<500;$i++){
  $item = $data[rand(0,9)];
}
echo (microtime(true) - $time).' '.memory_get_usage()."\n";

Object:
<?php
$time = microtime(true);

class Example
{
    protected $data = [0,1,2,3,4,5,6,7,8,9];

    public function getItem($index)
    {
      return $this->data[$index];
    }
}

$object = new Example();

for($i=0;$i<500;$i++){
  $item = $object->getItem(rand(0,9));
}

echo (microtime(true) - $time).' '.memory_get_usage()."\n";

Object + magic:
<?php
$time = microtime(true);

class Example
{
    protected $data = [0,1,2,3,4,5,6,7,8,9];

    public function __call($method , $params)
    {
      if($method == 'getItem'){
    return $this->data[$params[0]];
      }
    }
}

$object = new Example();
for($i=0;$i<500;$i++){
  $item = $object->getItem(rand(0,9));
}

echo (microtime(true) - $time).' '.memory_get_usage()."\n";


XDebug Profile


Array: time: 0.006110 memory: 365072
Object: time: 0.012696 memory: 366160
Object + magic: time: 0.017254 memory: 366448
Вы немного ушли от темы массивов к глобальным переменным. Массив вполне себе может находиться внутри объекта и быть недоступен извне.
Безусловно в вашем посте есть здравый смысл, но во всем нужна мера.
Может получиться так, что новичек прочтет ваш пост и начнет плодить сотни классов оберток, когда это нужно и не нужно.
Не стоит забывать, что на объявление класса и тратится процессорное время и оперативная память (внутренее устройство сложнее).
Доступ к данным поля объекта через вызов метода значительно медленнее, чем доступ к элементу массива, а если еще используются магические методы, разница огромна.
Всегда казалось, инстанцирование объектов в деструкторе дурным тоном. Одно неловкое исключение — fatal, порядок вызова неявный, заголовки отправлены, рабочая дирректория может отличаться… Для чего вам понадобилась сложная логика в деструкторе?
Ваш вопрос содержал ответ. Зависит от ситуации.
Гипотетически в книжный магазин ежедневно заливается сотни тысяч новых книг и журналов / товаров поставщиков. А покупается / ищется 100-200.
Говоря, к примеру, о MySQL и InnoDВ, помня про clustered index. Монотонно возрастающий ключ приводит к вставке строки в конец, иначе сортировке индекса.
Не будет ли автоинкрементарное поле в данном случае повышать производительность вставки с учетом разнобоя BookId, AuthorId? http://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html
Поправка: MyISAM все-таки есть, но считается legacy
На заметку, в MariaDB нет MyISAM, storage engine называется Aria. Выбор движка не очевиден, чем вам не понравился XtraDB?
Вы не сравнивали производительность WP + Varnish vs WP + memcached (например w3 total cache) vs WP +Varnish + Memcached ?
XDebug был отключен до профилирования, время схоже.
Под конец просто тестировал 3000000 md5 в cli. В докер контейнере результат PHP 5.6.1 cхожий с докер 7.0.0 и 5.6.1 из suse репозитория. А вот PHP 7.0.0 из репо отстает 20с против 5с, явно собрали с разными флагами.
И включал и выключал. Результаты схожи. Всего скорее плохая сборка в репо.
Притом падение наблюдается если PHP пришел из реп (в моем случае OpenSuse)
Если запускать скрипты в официальных образах docker, падения производительности нет.
Протестировал на одном из своих проектов, к сожалению, PHP 7.0.0 не показал повышения производительности, есть даже небольшое падение.

Отключил memcached, прогнал на главной странице (анонсы всех разделов сайта, порядка 80 тяжелых запросов с сортировкой ~ 50 000 записей в бд)

Потребление памяти значительно снизилось:

PHP 5.6.1 — 2.411mb
PHP 7.0.0 — 1.301mb

А вот время исполнения незначительно ухудшилось:

PHP 5.6.1 — 0.98560s.
PHP 7.0.0 — 0.99667s.

Посмотрел профили XDebug, удалось выяснить некоторые причины.

— mysqli на PHP 7.0.0 работает немного медленее (практически все функции)
— md5 работает значительно медленее
— функции по работе со строками немного просели
и т.д.



Таблица с примерами времени исполнения:

Комментариев по существу как я понял не будет?
thedailybeast.com выставили NetCraker как источник проблем, который выплатил большую неустойку.

Интересовала ваша точка зрения. Компания допустила промах набрав слабый персонал / оговорили «злые янки» / «инопланетяне».

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

Здравствуйте! Неужели тот самый Netcracker… Было бы очень интересно услышать комментарии по поводу ситуации с «В США закрыли дело о заражении программистами из России систем Пентагона (http://www.rbc.ru/rbcfreenews/563acbf49a794787a2622435)
Особенно понравилось:
Компании заявили, что они не знали, что на них работают российские программисты.

У «Полиморфных связей» есть еще одна очевидная проблема — разрастание таблицы и сложность горизонтального масштабирования.
Если вы являетесь Vendor и продаете конечный продукт ( софт который не используется для разработки и т.п), клиент использует ваше решение без внесения модификаций, то клиент не должен покупать лицензию. Так отвечала техподдержка несколько раз в 2010,2012,2015 годах. После этой статьи задавали вопрос еще раз.

Information

Rating
Does not participate
Location
Россия
Registered
Activity