Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Rostschreck Lidl

Si noi suntem Florin Piersic? / J...

Rascumparare euroobligatiuni (pri...

Detartraj partial slatina
 Cu ce pot izola fonic peretii pen...

Telefon cu senzor compass BUN

Blocare google chrome cu master p...

Instalare Siemens NX pe macbook
 sfat achizitie telefon pana in 20...

Stoc Smart CAM TV

Ce corzi de chitara sa cumpar?

Galaxy A54 compass defect?
 Cum conectez un switch WIFI la 60...

Cumparare AC Gree [Buget maxim 30...

Telekom

Ce e aratarea asta ?
 

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

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

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