Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024

Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...
 Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 

page load time & number queries

- - - - -
  • Please log in to reply
23 replies to this topic

#1
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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
vali38

vali38

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 16.10.2005
microtime
legat de cealalta intrebare, nu vad decat solutia care ai spus-o si tu

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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
sergiu_spooky

sergiu_spooky

    Senior Member

  • Grup: Senior Members
  • Posts: 3,738
  • Înscris: 23.06.2006
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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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?

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
$db = Singleton::getInstance()

#11
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
$db = Singleton::getInstance();


echo $db->numqueries(); . Primesc eroare . De ce? Cum se face apelarea unei metode?
Call to undefined method Singleton::numqueries() in


#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
Am inteles. Atunci trebuie sa introduc pattern-ul singleton in clasa mea mysql ?

#14
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Asta inseamna "design pattern", da.

Iti descrie tehnica. Tu o incorporezi in clasele tale.

#15
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
Ce m-as face fara tine?
mersi mult.

#16
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
		$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
puya4ever

puya4ever

    Active Member

  • Grup: Members
  • Posts: 1,987
  • Înscris: 21.12.2006
 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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate