Объекты в PHP: больше или меньше лучше? - PullRequest
2 голосов
/ 05 января 2010

Я уже задавал вопросы о часовых поясах и дате / времени, но это более конкретный вопрос, больше об объектах в PHP.

<?PHP
//set the user's time zone on page load
date_default_timezone_set("America/Los_Angeles");

//convert the timestamp from DB into the user's time
$timestamp = '2008-05-01 13:44:19'; //this would normally be returned from mysql
echo ConvertDateTime($timestamp, "America/Los_Angeles");

//here is the function to convert it
function ConvertDateTime($timeString, $timeZone)
{
    if ( $d = new DateTime($timeString) ) {
        $d-&gt;setTimeZone(new DateTimeZone($timeZone));
        return $d-&gt;format("Y-m-d H:i:s");
    }
    return null;
}
?>

Ладно, для некоторых это, вероятно, глупый квест, но я действительно мало что знаю или имею большой опыт, когда речь идет о классах и объектах, обычно на странице, например, я создаю 1 объект базы данных и выполняю каждый запрос mysql страница с этим 1 установленным объектом. Я всегда думаю, что меньше объектов, вероятно, лучше, но я читал на этом сайте, что сотни объектов будут иметь одинаковую скорость и ресурсы, используемые по сравнению с 1 объектом, не уверен, правда это или нет.

Мой вопрос, в функции выше вы можете видеть, что новый объект DateTime создается каждый раз, когда вызывается функция, может быть 100 раз на некоторых страницах в моей ситуации. Так я должен использовать как синглтон или даже я мог бы установить объект dattim 1 раз в заголовке, где также установлен мой объект базы данных, или я должен просто позволить функции создать тонну объекта?

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

Ответы [ 3 ]

3 голосов
/ 05 января 2010

я должен использовать как синглтон

Singleton не без проблем - например, они часто затрудняют (автоматизированное) тестирование. Что является одной из причин, по которой они меньше нравятся «большим» фреймворкам (я имею в виду Zend Framework и Symfony, которые сокращают число синглетонов для своей следующей основной версии)


Я мог бы установить объект dattim 1 раз в заголовок

Использование глобальной переменной / объекта также может сопровождаться побочными эффектами; Если переменная подразумевается как «локальная», она должна быть локальной - код готов и ее понимание обычно важнее доли миллисекунды.


Для экстремальных и особых случаев единственное решение (true) - это профилирование: хотите, чтобы ваш скрипт / приложение работали быстрее? Чтобы использовать меньше процессора?

Тогда, во-первых, профилируйте это! Это поможет выявить узкие места - и покажет, на чем вам следует сосредоточиться.

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


В конце концов, вы всегда должны выбирать между:

  • лучшие из возможных представлений
  • время, необходимое для разработки / оптимизации чего-либо
  • время, необходимое для его поддержания; в том числе для кого-то, кроме вас.

И, довольно часто, новый, более мощный сервер (или второй), наконец, потребует меньше, чем пару недель, потраченных на оптимизацию, чтобы получить только 5%!

(Обратите внимание, я не говорил, что вы не должны оптимизировать; но вы не должны чрезмерно оптимизировать.)

0 голосов
/ 05 января 2010

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

Если вы вызываете функцию много раз с одинаковыми $ timeString и $ timeZone, вы можете добавить кеширование результата. Если большинство вызовов будут уникальными, я бы не добавил кеширование: оно может помочь вам повысить производительность, но сохранить все результаты, не используя их, - пустая трата памяти.

0 голосов
/ 05 января 2010

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

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

вы можете видеть, что новый объект DateTime создается каждый раз, когда функция вызывается, может быть 100 раз на некоторых страницах в моей ситуации. Так я должен использовать как синглтон

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

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