Dijkstra на [закрытой] “разработке программного обеспечения”

Проблема в том, что карта классов на самом деле не быстрее в каждом случае!

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

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

Я нашел два ресурса, обсуждающих эту тему: во-первых, есть проблема github # 1529 , предлагающая дальнейшие улучшения для автозагрузчика композитора с использованием набора символических ссылок, чтобы избежать необходимости сканировать несколько каталогов.

Обсуждение там также показывает, что вы должны попытаться использовать наилучший из возможных префикс пространства имен или имени класса в объявлении автозагрузки PSR-0, то есть самый длинный из возможных. Вы также можете использовать более одного префикса в объявлении.

Затем есть сообщение в блоге, связанное в этом выпуске , в котором документируются некоторые тесты xhprof с использованием стандартного EZPublish 5 и работа с настройками, включая кэширование APC и дамп карты классов.

Цитата:

Эта команда создала файл 662KiB vendor / composer / autoload_classmap.php, содержащий массив, который представляет собой хеш, состоящий из имени класса в качестве индекса и пути к файлу, содержащему определение класса как значения. На момент написания этого поста этот массив состоит из 4168 записей. [...] Хотя он должен дать нам наиболее эффективный механизм автозагрузки, он на самом деле замедляет работу (с 254,53 запросов в секунду до 197,95). Причина в том, что даже если файл кэшируется APC, массив PHP, содержащий карту с более чем 4100 записями, необходимо пересоздавать при каждом отдельном запросе.

Будет ли карта классов быстрой? Конечно. Самый быстрый в каждом случае? Конечно, нет - это зависит от соотношения используемых и неиспользуемых классов на запрос. Таким образом, даже если в среднем ваше приложение фактически использует ВСЕ классы на карте, карта классов может все еще работать медленнее, если вы используете только около 10% классов на запрос, и вам лучше оптимизировать объявления автозагрузки используемых вами библиотек. , Фактически, каждый префикс имени класса должен указывать только на один каталог.

Обратите внимание, что выигрыш в производительности, который вы только добьетесь, составляет около одной миллисекунды с одной цифрой на запрос. Ваша заявка, безусловно, великолепна, если эта цифра значительно увеличивает производительность в диапазоне от 5 до 10%. Но если вы действительно находитесь в этом диапазоне производительности, слепо полагая, что карта классов ВСЕГДА быстрее, вероятно, тратит много ненужных циклов ЦП.

Если вы что-то оптимизируете, измерьте это! Как вы узнаете, станет ли на самом деле лучше, если вы не можете измерить его?

23
задан Curt J. Sampson 7 June 2009 в 08:06
поделиться

3 ответа

Мне немного любопытно - некоторые старые обсуждения этой цитаты .

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

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

Я бы не согласился. Для меня программная инженерия - это то, как решать сложные проблемы и добиваться решения, что требует большего, чем просто написание кода здесь и там.

Даже если вы умеете программировать, вам необходимо знать о дисциплине в целом и т. Д. И т. Д. или в единственном числе), который разрабатывает и производит продукт, который работает здесь и сейчас.

Компьютерные науки - это, ИМХО, гораздо более узкая область и не такая уж повседневная проблема при разработке программного обеспечения.

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

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

вы обнаружите, что программная инженерия приняла в качестве своего устава «Как программировать, если вы не можете»

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

9
ответ дан 29 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

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