Расширенные настройки PHP - выборочно включая встроенные функции PHP - PullRequest
3 голосов
/ 14 декабря 2010

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

Я где-то читал в SO, что PHP предоставляет все эти встроенные функции, но для того, чтобы делать подобные вещи с такими языками, как JAVA, требуется много кода.Это верно?Я не очень опытен в других языках.

Кроме того, правильно ли я предположить, что большая часть этих функций не используется ни одной из других встроенных функций или чем-либо (внутренними зависимостями)?Например, эти функции pdf_fit_table () , gzopen () необходимы только для файлов, связанных с файлами PDF и gzip соответственно.

Если это так, то, как опытные программисты,Предоставляет ли нам PHP какой-либо вариант их выборочной загрузки в зависимости от требований конкретного проекта или более динамически в зависимости от конкретного модуля?например, загружать функции, связанные с PDF, только если у меня есть задачи, связанные с PDF.Если возможно, на каком уровне это можно сделать?Если на уровне установки PHP, то я думаю, что это невозможно в случае виртуального хостинга.Возможно ли лучшее решение этой проблемы?

Я просто говорю с точки зрения здравого смысла, мы включаем файлы, содержащие функции по мере необходимости.

Это даст повышение производительности?

Я не очень осведомлен о библиотеках ядра и т. Д. PHP.Итак, пожалуйста, пролите немного света.

Обновления:
Спасибо за ответы

@ pygorex1 - HipHop способ оптимизировать PHPв общем и целом.Итак, если говорить очень просто, если я прав, если для запуска раньше потребовалась 1 секунда, то с использованием HipHop это может составить 0,7 секунды.Но в обоих случаях наличие этих дополнительных ненужных определенных функций добавляет свои издержки (скажем, 0,1 секунды в первом случае и 0,07 секунды в случае HipHop).Если так, то HipHop нацелен на что-то еще и не отвечает на мой вопрос.Тем не менее, два других пункта, которые вы дали, говорят, что все должно быть сделано во время компиляции.Таким образом, это, вероятно, означает, что если я скомпилирую с расширением, то группы функций под ним будут загружаться каждый раз.Тогда, вероятно, нет дальнейшего способа удаления включения?Что-то вроде вечности?

@ Тайлер - Я согласен, что может быть трудно сделать то, о чем я прошу, но причина не в том, что вы говорите.Не может быть так сложно выяснить зависимости.Просто применяя здравый смысл, я могу сказать, что такие функции, как is_numeric(), is_array(), array_walk(), func_get_args() и т. Д., Являются очень простыми и, вероятно, вызываются многими, но есть легко различимые группы, такие как группа функций сокета, содержащаянапример, socket_connect(), которые не нужно включать, если они явно не нужны.Проблема, вероятно, заключается в том, что его нужно указывать при компиляции, как ответил pygorex1.

Ответы [ 4 ]

2 голосов
/ 14 декабря 2010

Что касается возможного повышения производительности - вы, вероятно, не заметите этого, если не будете обслуживать тонну динамических страниц PHP.Этот путь был пройден и раньше - взгляните на HipHop , инструмент Facebook для оптимизации PHP на C ++.Использование кэшей байт-кода, таких как APC и eAccelerator И / ИЛИ, переписывание вашего PHP-кода для интеллектуального кеширования с использованием memcached значительно улучшит производительность PHP, чем включение / отключение определенных функций PHP.

Как уже говорилось, есть два основных способа сократить количество доступных функций PHP:

Опции времени компиляции PHP

Доступно при компиляции PHP из исходного кода.Одна из функций, отмеченных в вопросе gzopen(), является частью расширения zlib и должна быть включена во время компиляции .Есть довольно много встроенных опций времени компиляции .

Модули PHP

Они загружаются динамически PHP и управляются конфигурационным файлом php.ini под расширениями - это файлы DLL в Windows или файлы .soв линуксеФрагмент из моей разработки php.ini:

...
extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dblib.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
...
1 голос
/ 15 декабря 2010

Не беспокойтесь о компиляции встроенных функций. Узнайте о разделяемых библиотеках и системе кэширования Linux. Эти файлы (и функции) в основном всегда загружаются и кэшируются, поэтому это оказывает очень незначительное влияние на приложение. Как сказал pygorex1, лучше использовать хороший механизм кэширования, чем урезать дистрибутив PHP преднамеренно.

@ powtac: выполнение dl() в качестве динамической загрузки некоторых библиотек может фактически замедлить работу вашего приложения (зависит от того, сколько dl() вы делаете, может быть, лучше, чтобы они всегда загружались в память, чем их загрузка на запрос)

@ Тайлер Ивс: вы можете отключить вызов некоторых функций. Там ничто не мешает их загрузке, хотя ..

Кроме того, хип-хоп, насколько я знаю, на самом деле компилирует php-код в код C / C ++, а затем компилирует его. Это дает ОГРОМНОЕ преимущество пропуска виртуальной машины, специфичных для php кодов и большого количества накладных расходов по сравнению с языком сценариев, но имеет большое неудобство, так как он больше не является языком сценариев.

1 голос
/ 15 декабря 2010

Существует dl () для загрузки расширения PHP во время выполнения.

Пример динамической загрузки расширения:

if (!extension_loaded('sqlite')) {
    $prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
    dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}

Это взято из http://php.net/manual/en/function.dl.php

1 голос
/ 14 декабря 2010

Разрушение пространства имен функции php, ну, в общем-то, именно это.

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

...