Как часто мне следует создавать новый экземпляр класса? - PullRequest
2 голосов
/ 23 марта 2011

Я не "твердолобый" кодер, и мне нужен совет.

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

Я создал класс под названием Поиск и Магазин .

Существует два способа поиска: "jQuery Live Search" и "обычный поиск" .

Поиск в реальном времени запускается для каждого символа, введенного выше 2 символов. Поэтому, если вы введете 5 символов, поиск будет выполнен 3 раза. Если искомый магазин находится в раскрывающемся списке, вы можете щелкнуть магазин, и страница магазина будет загружена.

Другой поиск - это когда вы нажимаете кнопку поиска после ввода 3 или более символов.

Каждый раз, когда выполняется поиск, выполняется следующий код

$search = new Search();
$result = $search->search($_GET);

Каждый раз при загрузке страницы магазина выполняется $store = new Store().

У меня такой вопрос:

Предположим, я получил очень успешный веб-сайт, и у меня около 100 пользователей в час. Каждый пользователь ищет как минимум 3 раза и ищет как минимум 5 магазинов.

Это означает, что каждый час создается от 300 до 900 объектов поиска и 500 объектов магазина.

Это плохо или хорошо создавать так много новых объектов?

Я немного читал о Singleton, но много советов против этого.

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

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

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

Если вам нужно оптимизировать на более позднем этапе, вам поможет слой memcached.

3 голосов
/ 23 марта 2011

Не думаю, что создание классов станет узким местом для вашего сайта. Посмотрите на MVC Framework, такой как Zend Framework, и изучите, сколько экземпляров классов генерируется для каждого вызова. Затраты на создание экземпляра класса почти ничего не значат, поиск нагреет вашу базу данных (при условии, что вы используете базу данных типа mysql).

Я предлагаю использовать таймер для поиска в jQuery Live, чтобы выполнить поиск после того, как пользователь перестал вводить больше символов. Как обновлять таймер каждый раз, когда вводится символ, и когда срабатывает таймер, вы действительно можете искать.

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

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

В качестве комментария prodigitalon предложил погрузиться в полнотекстовый поиск с помощью Lucene может быть даже более эффективным, чем настройка БД.

Если Lucene для вас немного перегружен, вы можете посмотреть на компонент Zend_Search_Lucene , который выполняет ту же работу и написан на php.

0 голосов
/ 23 марта 2011

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

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

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

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