PHP PostgreSQL производительность открытия / закрытия соединения

Я новичок в программировании (особенно в PHP). Я пишу простой сайт PHP. Я также использую базу данных PostgreSQL. Вот мой маленький класс для работы с базой данных.

class dbWorker {

    private static $conString = "host=localhost port=5432 dbname=myDB user=postgres password=root";

    public static function execute($sql) {
    $db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error());
    pg_query($sql) or die('Query error: ' . pg_last_error());
    pg_close($db_conn);
    return;
    }

    public static function queryOne($sql) {
    $allData = self::queryAll($sql);
    if ($allData) {
        return $allData[0];
    }
    return null;
    }

    public static function queryAll($sql) {
    $db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error());
    $qu = pg_query($db_conn, $sql) or die('Query error: ' . pg_last_error());


    $retval = [];
    while ($data = pg_fetch_object($qu)) {
        $retval[] = $data;
    }


    pg_free_result($qu);
    pg_close($db_conn);

    if (!empty($retval)) {
        return $retval;
    }

    return null;
    }

}

Это довольно удобно, используя это. Но когда я использую этот класс 10-20 раз на странице - время загрузки страницы занимает около 5-6 секунд. Затем я удалил следующие строки:

   pg_free_result($qu);
   pg_close($db_conn);

После этого время загрузки страницы составило 161 миллисекунду.

Вопрос в том, как лучше организовать этот процесс.

Должен ли я написать что-то вроде этого?

dbWorker::open_connection();
...
all my functions calls (like getComments(), getMessages(), getTasksList() ect.)
...
dbWorker::close_connection();

Пока я новичок и ищу простое решение. (Заранее спасибо за вашу помощь и извините за мой английский)

1 ответ

Решение

Я бы создал соединение один раз, выполнил бы все ваши sql запросы, а затем закрыл бы соединение.

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

Другие вопросы по тегам