PHP выстраивают по сравнению с Константой PHP?

Мне любопытно, там любое увеличение производительности, как использование меньшей памяти или ресурсов в PHP для:

50 различных переменных установки, сохраненных в массив как это

$config['facebook_api_secret'] = 'value here';

Или 50 различных переменных установки, сохраненных в Константу как это

define('facebook_api_secret', 'value here');
5
задан JasonDavis 17 January 2010 в 05:50
поделиться

4 ответа

Я думаю, что это в царстве быть микрооптимированием . То есть разница достаточно мала, чтобы не стоит использовать одно решение над другим ради производительности. Если бы производительность была такая критическая для вашего приложения, вы не будете использовать PHP! : -)

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

11
ответ дан 18 December 2019 в 10:44
поделиться

Ссылки используются для псевдонимирования переменных и были необходимы для эффективного использования старой объектной системы.

В PHP- 4 объекты вели себя как любой другой тип значения, то есть присвоение создавало бы копию объекта. Чтобы избежать этого, необходимо использовать ссылку, как в примере кода.

При использовании PHP 5 переменные объекта больше не содержат самого объекта, но дескриптор (идентификатор объекта AKA) и назначение будут только копировать дескриптор. Использование ссылки больше не требуется.

-121--2195380-

Я, кажется, нашел ответ. Я поместил основную часть кода чертежа (который ранее был в onDraw ()) в новый метод doDrawing (). Этот метод начинается с создания нового растрового изображения размером больше экрана (достаточно большого для хранения всего чертежа). Затем создается второй Холст, на котором выполняется подробный чертеж:

    BufferBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888);
    Canvas BufferCanvas = new Canvas(BufferBitmap);

Остальная часть метода doDrawing () передается с подробным чертежом в BufferCanvas.

Теперь весь метод onDraw () выглядит следующим образом:

    @Override protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(BufferBitmap, (float) -posX, (float) -posY, null);
}

Переменные позиции, posX и posY, инициализируются в 0 в методе onCreate () приложения. Приложение реализует OnGestureListener и использует аргументы distureX и distureY, возвращенные в уведомлении OnScroll, для увеличения posX и posY.

Похоже, это все, что нужно для реализации плавной прокрутки. Или я что-то чересчур выгляжу!?

-121--154â5-

В ходе моих неофициальных тестов я обнаружил, что доступ/определение констант выполняется несколько медленнее, чем обычные переменные/массивы.

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

Оптимизация базы данных (индексирование, использование инструкции ПОЯСНИТЬ для проверки запросов) и набор сервера (с помощью APC) в долгосрочной перспективе будут иметь большее значение.

3
ответ дан 18 December 2019 в 10:44
поделиться

NSLog является медленным и не должен использоваться для создания версий. Простой макрос, подобный приведенному ниже, отключит его вместе с любыми утверждениями, которые могут быть у вас, которые также должны быть отключены. В менее распространенном случае, когда требуется NSLog в сборке выпуска, просто вызовите его напрямую. Не забудьте добавить «-DNDEBUG» в параметры настройки сборки «другие флаги c».

#ifdef NDEBUG
#define MYLog(f, ...) 
#else
#define MYLog(f, ...) NSLog(f, ## __VA_ARGS__)
#endif
-121--687757-

Вы когда-нибудь добавляли два целых числа с помощью + , а затем позже добавили целое число к числу с плавающей запятой с помощью + ?

Вы когда-либо регистрировали x.toString () , чтобы помочь вам что-то отладить?

Я думаю, что вы уже цените полиморфизм, просто

-121--2098116-

Повышение производительности для 50 переменных с использованием другой техники кодирования/умных трюков программирования - неправильный способ сделать вещи в PHP. Всегда помните: оптимизатор умнее вас .

1
ответ дан 18 December 2019 в 10:44
поделиться

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

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

Если у вас есть какая-то сложная вложенная конфигурация, например:

$config->facebook->apikey = 'secret_key';
$config->facebook->url = 'http://www.facebook.com';

Вы можете захотеть использовать массив или конфигурацию api, предоставляемую одним из множества фреймворков (Zend_Config неплохо)

.
1
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

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