page load time & number queries
Last Updated: Oct 01 2010 09:24, Started by
puya4ever
, Sep 16 2010 23:21
·
0
#1
Posted 16 September 2010 - 23:21
Buna seara. Cum pot face sa numar toate query-urile necesare incarcarii unei pagini, dar load time-ul acestuia?
Cum are softpedia in footer: 0.1918 sec 1.94 4 queries . edit: am eu doua solutii, insa nu stiu daca asa se si face . 1. in loc de mysql_query, creez eu o functie care incrementeaza o valoare 2. de fiecare data cand scriu mysql_query, imediat dupa, sa apelez o functie care la fel, incrementeaza acea valoare . E corect? Edited by puya4ever, 16 September 2010 - 23:23. |
#2
Posted 17 September 2010 - 00:57
#3
Posted 17 September 2010 - 09:34
Dacă vrei să faci code profiling, o poţi face cu xdebug.
Numărarea query-urilor (metoda corectă e 1, numai că vei avea nevoie de o clasă dacă vrei să o faci corect, fără variabile globale) doar de dragul de a o face nu e tot. Fluxul de execuţie trebuie analizat în lungul şi-n latul întregului proiect, nu numai operaţiile DB. |
#4
Posted 17 September 2010 - 16:41
da, pana acum imi creeam o clasa pe, basic pe care o apelam asa: $mysql->select / $mysql->insert, dar am renuntat pentru ca nu vedeam rostul unei astfel de clase doar de dragul de a schimba mysql_query cu $mysq->select sau ->insert, pentru ca nu am mai avut nevoie de alte operatii in interiorul functiei . M-am lamurit. Multumesc.
|
#5
Posted 26 September 2010 - 01:21
Revin sa scriu ca nu-mi iese.
Am clasa: class mysql{ public $i; //number the queries needed to load the page function query($sql){ $query = mysql_query($sql); $this->i++; //echo $this->i; return $query; if(!$query){ die('Error : ' . mysql_error()); } } function numqueries(){ return $this->i; } } Functioneaza, dar nu asa cum trebuie. Imi numara doar query-urile executate in aceeasi pagina, nu si pe cele executate si in alt fisier. De ce ? Edited by puya4ever, 26 September 2010 - 01:27. |
#6
Posted 26 September 2010 - 11:02
Teoretic ar trebui să ai o singură instanță a clasei mysql în toată execuția, probabil globală. Sau să folosești pattern-ul singleton/factory.
Punct de pornire: http://php.net/manua...oop5.static.php |
#7
Posted 26 September 2010 - 13:05
Nu inteleg o chestie . Daca declar o noua instanta de exemplu in index.php ($db = new mysql; ), index.php fiind primul fisier de executie in care este inclusa clasa mysql . De ce nu pot accesa $db->query si in index.php -> controller.php -> template/index.php . Imi spune
Call to a member function numqueries() on a non-object in ... Banuiesc ca deaia nu imi merge nici mie metoda cu numqueries, pentru ca eu creez o noua instanta de mai multe ori, astfel, $i-ul care ar trebui sa fie incrementat o ia de la capat pentru fiecare instanta ... Imi puteti explica de ce se intampla asa? (partea cu folosirea $db->query intr-un fisier, iar instantierea $db = new mysql; undeva in "primele fisiere executate de framework" ) ; Multumesc. edit: multumesc sergiu, am citit acel capitol si am modificat valoarea $i ca fiind statica. Edited by puya4ever, 26 September 2010 - 13:06. |
#8
Posted 26 September 2010 - 13:12
Nu creezi o instanta de mai multe ori. Nu exista asa ceva. Creezi mai multe instante ale unei clase.
Cat despre $foo->numqueries(), iti spune ca $foo nu e un obiect (o instanta). Clasa mysql trebuie sa fie un singleton. Ma rog, exista alte variante mai bune, dar merge si asa, pentru aplicatii simple cu o singura baza de date. |
#9
Posted 26 September 2010 - 13:27
Multumesc pentru raspuns . Cam asta ar fi singleton pattern, dupa o cautare pe google.
class Singleton { private static $_instance; public static function getInstance() { if (!(self::$_instance instanceof self)) { self::$_instance = new self(); } return self::$_instance; } // Do not allow an explicit call of the constructor: $v = new Singleton(); final private function __construct() { } // Do not allow the clone operation: $x = clone $v; final private function __clone() { } } $instance = Singleton::getInstance(); Nu prea stiu cum sa il folosesc. Imi poti da un exemplu te rog? |
#11
Posted 26 September 2010 - 13:50
$db = Singleton::getInstance();
echo $db->numqueries(); . Primesc eroare . De ce? Cum se face apelarea unei metode? Call to undefined method Singleton::numqueries() in |
#12
Posted 26 September 2010 - 15:06
Pai clasa ta Singleton are o metoda numita "numqueries"?
Invata si tu sa intelegi mesajele de eroare, ca-ti spun ce nu e in ordine. Nu trebuie "decat" sa stii terminologia. Asta predic p-aci pe forum de ani intregi: terminologie, terminologie, si iar terminologie. |
#13
Posted 26 September 2010 - 15:41
Am inteles. Atunci trebuie sa introduc pattern-ul singleton in clasa mea mysql ?
|
#14
Posted 26 September 2010 - 16:43
Asta inseamna "design pattern", da.
Iti descrie tehnica. Tu o incorporezi in clasele tale. |
#16
Posted 29 September 2010 - 00:19
Am reusit sa fac clasa mysql sa mearga, si imi numara si query-urile din alte parti .
class mysql{ private static $instance; // A private constructor; prevents direct creation of object private function __construct() { //echo 'I am constructed'; } // The singleton method public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } public static $i; //number the queries needed to load the page function query($sql){ $query = mysql_query($sql); $this->i++; //echo $this->i; return $query; if(!$query){ die('Error : ' . mysql_error()); } } function numqueries(){ return $this->i; } } |
#17
Posted 29 September 2010 - 08:37
$query = mysql_query($sql); $this->i++; //echo $this->i; return $query; if(!$query){ die('Error : ' . mysql_error()); }Si uite asa scufita l-a mancat pe lup... Vezi tu, e o chestie cu OOP-ul asta, devin sceptic cand vine un incepator si se apuca de OOP fara sa studieze o carte inainte si fara sa stapaneasca logica din programarea procedurala, doar pentru ca "it's the cool new thing". Doh. |
#18
Posted 29 September 2010 - 14:07
if(!$query){ die('Error : ' . mysql_error()); } Aici este greseala ? Cum ar trebui sa arate acea bucata de cod? Edited by puya4ever, 29 September 2010 - 14:08. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users