Лучший способ сбалансировать размер объекта, гибкость кода и запросы сервера?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Лучший способ сбалансировать размер объекта, гибкость кода и запросы сервера?

Сообщение Anonymous »

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

Код: Выделить всё

$stmt = $db->prepare("
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '" . static::TABLE_NAME . "'
AND TABLE_SCHEMA = 'default_db'
AND generation_expression = ''
AND column_name != 'old_id'
");
$stmt->execute();
Когда я впервые создал эту структуру, я выполнил этот запрос внутри __construct(), в результате чего в каждом экземпляре объекта появился массив ->columns. Скорость была приемлемой, но использование памяти было высоким, что вызывало множество сообщений «Эта веб-страница была перезагружена, поскольку она использовала значительный объем памяти».
Моей реакцией на это было жесткое кодирование: :COLUMNS как константа класса в каждом дочернем классе, как показано ниже:

Код: Выделить всё

Class Address extends Dataset {

const TABLE_NAME = 'addresses';
const PRIMARY_KEY = 'address_id';
const COLUMNS = array(
'address_id',
'line1',
'line2',
'city',
'state',
'zip',
'zip4',
);

// other class methods

}
Я особо не проверял производительность этого устройства. Каждая трудная минута набора информации, которая, как подсказал мне каждый инстинкт, лучше извлекалась программно, причиняла мне экзистенциальную боль. Это могла бы быть максимальная производительность с точки зрения памяти и скорости, но она была далека от DRY и, что более важно, уязвима к ошибкам при изменении столбцов с течением времени. С этой целью я сохранил PDO-запрос в верхней части этого поста в __construct(), но только для того, чтобы проверить столбцы базы данных на соответствие константе класса и выдать предупреждение, если они не совпадают.
Однако проблемы с этим продолжали меня глодать, пока я не рассмотрел статический метод в абстрактном классе как решение. Итак, теперь у меня есть общедоступная статическая функция get_columns(), которая возвращает результаты того же старого запроса PDO.
Проблема в том, что добавленных запросов к базе данных достаточно, чтобы сделать мой сайт скорость загрузки МЕДЛЕННАЯ. Мой первый метод загружал насыщенные информацией страницы менее чем за 1 секунду; этот новый метод занимает 5–10 операций.
Как лучше всего минимизировать использование памяти, запросы к базе данных и лишний код, достигая при этом того же результата?

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-requests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»