Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

Husker meg og en kompis kjørte en test på dette for et par måneder siden, og da kom faktisk XML ut raskere en MySQL. Tror vi la til en million tabeller, og så fjernet de eller noe slikt :) Er i hvert fall så liten ytelsesforskjell at du ikke trenger å bry deg om det.

 

Om du absolutt vil teste selv, så er jo det ikke vanskelig å kjøre en benchmark eller tre selv.

Lenke til kommentar
Videoannonse
Annonse

Tip of the day: XML-RPC

 

(Detaljene og mulighetene med det var i alle fall nytt for meg helt til i går kveld.)

 

 

Forresten, det med interfaces. Jeg fant mer eller mindre ut at det gir mest mening i språk hvor man må kompilere selv (java) siden det da gir en feilmelding ved kompilering. I php er det ikke så nødvendig siden man har funksjoner som method_exists. Riktig?

Lenke til kommentar

Så det er helt greit å ha litt avansert informasjon i en fil som må leses for hver eneste gang siden lastes? :hmm:

 

Å ha XML inne i koden må vel være enda raskere (er kun for lesing, skal ikke skrive data)

 

(Eksemple hentet fra PHP.net)

<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
 <title>PHP: Behind the Parser</title>
 <characters>
  <character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
  </character>
  <character>
<name>Mr. Coder</name>
<actor>El ActÓr</actor>
  </character>
 </characters>
 <plot>
  So, this language. It's like, a programming language. Or is it a
  scripting language? All is revealed in this thrilling horror spoof
  of a documentary.
 </plot>
 <great-lines>
  <line>PHP solves all my web problems</line>
 </great-lines>
 <rating type="thumbs">7</rating>
 <rating type="stars">5</rating>
</movie>
</movies>
XML;
?>

Får ikke til det jeg ønsker med flerdimensjonale arrays, så jeg prøver ut dette.

Endret av IQ
Lenke til kommentar

Den der skrevet om til array blir vel noe ala:

$array = array(
	'movie' => array(
			  'title' => 'PHP: Behind the Parser',
			  'characters' => array( 
						  0 => array( 'name' => 'Ms. Coder',
								'actor' => 'Onlivia Actora',
								),
						  1 => array( 'name' => 'Mr. Coder',
								'actor' => 'El ActÓr',
								),
						)
			  'plot' => 'So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary.',
			  'great-lines' => array( 
						  0 => 'PHP solves all my web problems',
						),
			  'rating' => array( 'thumbs' => 7,
						'stars' => 5,
					  ),
			),
	);

Endret av M4rTiN
Lenke til kommentar
Det blir vel forsatt noe av det samme

$array = array( 'modules' => array(
						  0 => array( 'directory' => '/',
									  'type' => 'MODULE_LATEST_USERS',
									  'info' => 'MODULE_INFO',
									  'log_in' => 'MODULE_LOG_IN',
						),
		  ),
);

Prøvde dette, men jeg brukte så lang tid å søke igjennom. Jeg skal hente inn alle moduler fra gitt directory (som skal bestemmes av hvilken URL man er på), noen som har noen gode ideer på å hvordan jeg kan oppnå dette? (skal også ha wildcard-directory som "/user/*")

Lenke til kommentar
Gjest Slettet+6132

Den artikkelen der mangler bevis, jeg ser bare en haug med påstander.

 

If a method can be static, declare it static. Speed improvement is by a factor of 4.

str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4

Incrementing a global variable is 2 times slow than a local var.

 

Says who? Im in ur head givin u lies!

 

:p

Lenke til kommentar

Det har vært oppe før, og jorgis har et poeng. Det er oftest lite poeng å bruke tid på å optimalisere kode siden det mest sannsynlig ligger en flaskehals som skyldes "uperfekt"/dårlig programmering.

 

Ja, også kjedelig at lista ikke har noen referanser eller eksempler.

Lenke til kommentar
Husker meg og en kompis kjørte en test på dette for et par måneder siden, og da kom faktisk XML ut raskere en MySQL. Tror vi la til en million tabeller, og så fjernet de eller noe slikt :) Er i hvert fall så liten ytelsesforskjell at du ikke trenger å bry deg om det.

Og med tabeller regner jeg med du mener rader? ;)

 

Uansett er det ikke tvil i mitt hjerte om at MySQL kommer til å være raskere enn XML i de fleste relevante situasjoner. Kanskje jeg må bench'e litt på det selv.. hmm.. fint kveldsprosjekt.

Lenke til kommentar
Husker meg og en kompis kjørte en test på dette for et par måneder siden, og da kom faktisk XML ut raskere en MySQL. Tror vi la til en million tabeller, og så fjernet de eller noe slikt :) Er i hvert fall så liten ytelsesforskjell at du ikke trenger å bry deg om det.

Og med tabeller regner jeg med du mener rader? ;)

 

Uansett er det ikke tvil i mitt hjerte om at MySQL kommer til å være raskere enn XML i de fleste relevante situasjoner. Kanskje jeg må bench'e litt på det selv.. hmm.. fint kveldsprosjekt.

Jeg har min store tvil om at det skal stemme. Primært vil en MySQL-løsning ha en stor ulempe i form av forsinkelse mot serveren.

 

http://digg.com/programming/40_Tips_for_op...g_your_php_Code

 

Les kommentarene, de foreslår å alltid bruke foreach for arrayer istedenfor for + count, noe som er motsatt av det jeg har lest fra en del folk her. Noen som har testet ?

I følge en kjapp test lokalt kan det umulig stemme, iallfall ikke for de dataene jeg bruker. Hos meg går det nesten 2 ganger raskere med en for-løkke. Kjører forøvrig PHP 5.2.4 og tester med arrayer med 10000 elementer á 26 tegn.

 

Red.: La til kode

 

<?php
echo "<pre>For:\n";
for ($i = 0; $i < 10000; $i++)
	$array[] = 'abcdefghijklmnopqrstuvwxyz';
$key = array_keys($array);
for ($j = 0; $j < 5; $j++)
{
	$start = microtime(true);
	for ($k = 0; $k < 100; $k++)
	{
			$size = sizeof($key);
			for ($i=0; $i<$size; $i++)
			{}
	}
	$end = microtime(true);
	echo ($end - $start)."\n";
}
echo '</pre>';
?>

<?php
echo "<pre>Foreach:\n";
for ($i = 0; $i < 10000; $i++)
	$array[] = 'abcdefghijklmnopqrstuvwxyz';
for ($j = 0; $j < 5; $j++)
{
	$start = microtime(true);
	for ($k = 0; $k < 100; $k++)
	{
			foreach ($array as $var)
			{}
	}
	$end = microtime(true);
	echo ($end - $start)."\n";
}
echo '</pre>';
?>

 

Endret av Ernie
Lenke til kommentar
Tip of the century: Don't optimize. Yet. ;)

 

 

Elaborate, please?

 

The First Rule of Program Optimization: Don't do it.

The Second Rule of Program Optimization (for experts only!): Don't do it yet.

 

eller for å sitere O store Knuth:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

 

Optimisering er noe en selvfølgelig bør ha et øye på under designfase (en velger ikke sqlite som backend til en side som Digg, f.eks), men mikro-optimalisering av typen "echo er raskere enn print, og flere argumenter til echo er raskere enn strengkonkatenering" er bare tøys og tull. Når en kommer utover i implementasjonsfasen og finner ut at ting ikke går sånn som de skal, er det som oftest snakk om en eller flere flaskehalser som relativt raskt lar seg løse opp i.

 

Om en selv etter å rydde opp i flaskehalsene vil ha mer ytelse, da kan en begynne med mikro-optimalisering, men da må en først bevise at mikro-optimalisering vil gi bedre resultater til en lavere pris enn det vil koste å hive mer hardware på problemet.

Lenke til kommentar

Jeg har min store tvil om at det skal stemme. Primært vil en MySQL-løsning ha en stor ulempe i form av forsinkelse mot serveren.

 

http://digg.com/programming/40_Tips_for_op...g_your_php_Code

 

Les kommentarene, de foreslår å alltid bruke foreach for arrayer istedenfor for + count, noe som er motsatt av det jeg har lest fra en del folk her. Noen som har testet ?

I følge en kjapp test lokalt kan det umulig stemme, iallfall ikke for de dataene jeg bruker. Hos meg går det nesten 2 ganger raskere med en for-løkke. Kjører forøvrig PHP 5.2.4 og tester med arrayer med 10000 elementer á 26 tegn.

 

Red.: La til kode

 

<?php
echo "<pre>For:\n";
for ($i = 0; $i < 10000; $i++)
	$array[] = 'abcdefghijklmnopqrstuvwxyz';
$key = array_keys($array);
for ($j = 0; $j < 5; $j++)
{
	$start = microtime(true);
	for ($k = 0; $k < 100; $k++)
	{
			$size = sizeof($key);
			for ($i=0; $i<$size; $i++)
			{}
	}
	$end = microtime(true);
	echo ($end - $start)."\n";
}
echo '</pre>';
?>

<?php
echo "<pre>Foreach:\n";
for ($i = 0; $i < 10000; $i++)
	$array[] = 'abcdefghijklmnopqrstuvwxyz';
for ($j = 0; $j < 5; $j++)
{
	$start = microtime(true);
	for ($k = 0; $k < 100; $k++)
	{
			foreach ($array as $var)
			{}
	}
	$end = microtime(true);
	echo ($end - $start)."\n";
}
echo '</pre>';
?>

 

 

Dette er faktisk veldig interessant, for jeg tok koden din og c/p rett inn i to forskjellige filer som jeg kjørte lokalt her, og her er resultatene:

For:

0.127959012985

0.127472162247

0.127819061279

0.127547979355

0.126756906509

 

Foreach:

0.109839200974

0.109850883484

0.11278796196

0.109612941742

0.109309911728

Jeg kjørte også filene et par ganger hver bare for å være helt sikker, og resultatet var det samme hver gang. Foreach var raskest.

 

PHP Version 5.2.3 på windows server 2003 med rimelig hissig hw.

Endret av Nazgul
Lenke til kommentar

På min lokale maskin (som ikke er så imponerende) er det tvert om:

For:
0.233057022095
0.218636035919
0.219330787659
0.331099033356
0.264595985413
Average: 0.253343772888

Foreach:
0.327601909637
0.316066026688
0.32489991188
0.417309999466
0.289937973022
Average: 0.335163164139

Kjører php 5.2.1 på Ubuntu

Lenke til kommentar
For:

0.092650890350342

0.095371961593628

0.093120098114014

0.093245983123779

0.092675924301147

 

Foreach:

0.11818599700928

0.1181640625

0.11931395530701

0.11926007270813

0.11843800544739

 

For:

0.534287

-0.530403

0.583892

-0.859065

0.483694

 

Foreach:

0.138005

-0.1122

0.636684

-0.09142

-0.140701

(Aner ikke hvorfor disse tallene er helt bogus, men serveren er urgammal og treig) EDIT: Erindrer svakt at microtime elns. ble endret, slik at man slapp å gjøre noen ekstra steg for å få microsekunder.

 

For:

0.127885103226

0.126641988754

0.127236843109

0.126394987106

0.127102136612

 

Foreach:

0.110074996948

0.108583927155

0.108484983444

0.107733011246

0.108590126038

Må få flere tester, sørg for å poste OS, så langt tyder ting her på at det er windows vs linux som spiller inn.

Endret av Nazgul
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...