Witam,
rozmawiałem ze znajomym który tworząc swoją stronę wykonuje około 10 zapytań (pobiera zdjęcie, info o przyciskach typu "lubie to" itp.). Pokazywał mi działanie i powiem, że zachrzania (wszystko w ułamek sekundy). Napisałem więc co takiego:
Klasa która łączy się z bazą danych poprzez driver MySQLi w ten sposób:
<?php
class MySQL
{
protected $dbResult = false;
/*
$query - zapytanie
$isErrorDisplayed - czy błąd ma być wyświetlany (default: false)
*/
function __construct($query, $isErrorDisplayed = false)
{
$conn = new mysqli('host', 'user', 'pass', 'database'); // połączenie z bazą danych
if(!@$conn->connect_error) // jeżeli połączenie jest udane
{
@$conn->set_charset($charset); // ustawiam kodowanie dla pobieranych danych
//@$conn->query("SET NAMES {$charset}"); // ustawiam kodowanie dla pobieranych danych
$this->dbResult = @$conn->query($query); // wysyłam zapytanie i pobieram wynik (w tym ilość rekordów i pól)
if($conn->error && $isErrorDisplayed) // wyświetla błąd zapytania (w zależności od $isErrorDisplayed)
{
exit($conn->error);
}
} elseif ($isErrorDisplayed) { // wyświetla błąd połączenia (w zależności od $isErrorDisplayed)
exit($conn->connect_error);
}
}
/* Funkcja zwraca wynik zapytania */
public function response()
{
return $this->dbResult;
}
}
?>
Pobranie 20 zdjęć (oddzielne zapytania):
<?php
include_once("class.MySQL.php");
for($i=1; $i<=20; $i++)
{
$img = new MySQL("SELECT image FROM dbImages WHERE `id` = '{$i}'");
// na razie pomijam wyświetlanie bo ono nie ma znaczącego wpływu na prędkość wczytywania
}
?>
Strona wczytuje się w 15 sekund... Gdy zmienię kod na taki:
<?php
include_once("class.MySQL.php");
$nr = array();
for($i=1; $i<=20; $i++) { array_push($nr, $i); }
$ids = implode("','", $nr);
$img = new MySQL("SELECT image FROM dbImages WHERE `id` IN('{$ids}')'");
// na razie pomijam wyświetlanie bo ono nie ma znaczącego wpływu na prędkość wczytywania
}
?>
Strona wczytuje się w niecałe 2 sekundy. Z czym to jest związane? Z moim serwerem (używam WebServ)? Z tym, że musiał mi ściemniać w tym co mówił, albo jego kod wysyła jedno "zgrupowane" zapytanie do bazy? Z tego co wiem on wszystko ma na Amazonie.
Proszę o poradę, ponieważ obecnie muszę przerabiać całą stronę, ponieważ wszystko jest oparte na założeniu, że z początku postu (mój błąd). Proszę też o poradę jaki serwer/framework/metodę działania wybrać, aby było wszystko ok.