Kom ihåg mig?
Home Menu

Menu


PHP: require, dela upp funktioner?

 
Ämnesverktyg Visningsalternativ
Oläst 2012-09-15, 12:54 #1
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Jag testkörde SimonPs kod (på en betydligt långsammare maskin) och fick följande resultat:

Kod:
Non OOP Result: 2.6286079883575 seconds
OOP Result: 5.3388919830322 seconds
Jag noterar att Simons Ratio (ImperativeTime/OOPtime) blev 2,88 medan min blev 2,03, det har m a o ganska stor betydelse vilken maskin man kör på.

Sen har det alltid varit så att OOP körningar tar något längre tid eftersom det är mer att göra för systemet. Det är inte av prestandaskäl man väljer OOP i stället för imperativa språk, det är för att kunna hantera komplexitet på ett bättre sätt och minska risken för buggar, återanvändbarhet av tidigare kod, samt därmed kortare utvecklingstid. Maskiner blir ständigt snabbare så hastigheten är inte det avgörande i de flesta fall. PHP ger i sig prestandaförluster i och med att det dessutom är interpreterande och inte kompilerande. Är hastigheten en kritisk faktor så väljer man ett annat språk.

Senast redigerad av Conny Westh den 2012-09-15 klockan 12:58
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-15, 14:10 #2
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
Sen har det alltid varit så att OOP körningar tar något längre tid eftersom det är mer att göra för systemet. Det är inte av prestandaskäl man väljer OOP i stället för imperativa språk, det är för att kunna hantera komplexitet på ett bättre sätt och minska risken för buggar, återanvändbarhet av tidigare kod, samt därmed kortare utvecklingstid. Maskiner blir ständigt snabbare så hastigheten är inte det avgörande i de flesta fall. PHP ger i sig prestandaförluster i och med att det dessutom är interpreterande och inte kompilerande. Är hastigheten en kritisk faktor så väljer man ett annat språk.
Jag ville mest belysa prestandaproblem som OOP ger i vissa undantag. Jag har upplevt samma sak i kompilerande språk, t.ex C/C++, dvs. att OOP ger en försämring i prestanda vid intensiva anrop, inte lika mkt som PHP men ändå märkbar.
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-16, 18:53 #3
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
.... PHP ger i sig prestandaförluster i och med att det dessutom är interpreterande och inte kompilerande. Är hastigheten en kritisk faktor så väljer man ett annat språk.
Nja, det stämmer inte. De flesta trafikintensiva använder någon slags bytecode cache för prestanda.


Vad gäller detta test, intressant vore se vilken skillnad det blir om man använder statisk metoder istället för instansiering. Förmodligen lite mindre minnesutnyttjande, vilket ju blir lite mer "rättvist" eftersom oop gör lite mer än funktionella koden om den instansierar
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-16, 23:24 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av danjel Visa inlägg
Nja, det stämmer inte. De flesta trafikintensiva använder någon slags bytecode cache för prestanda.


Vad gäller detta test, intressant vore se vilken skillnad det blir om man använder statisk metoder istället för instansiering. Förmodligen lite mindre minnesutnyttjande, vilket ju blir lite mer "rättvist" eftersom oop gör lite mer än funktionella koden om den instansierar
Nej, bytecode cache (som ju sker i runtime eller är det JIT Compilation du menar) kan aldrig mäta sig med kompilerad kod (som ju förkompilerar och optimerar koden).

Stark typning kan i många programspråk ge 50-100 gånger prestandaförbättring även i en interpreterande eller semikompilerad miljö.

Dock helt riktigt att statiska metoder ger betydande prestandaförbättring i OOP-sammanhang jämfört med instansiering, men det beror på vilket problem man ska lösa om man kan använda det eller inte.

Senast redigerad av Conny Westh den 2012-09-16 klockan 23:28
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-18, 09:57 #5
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
Med bytecode caches så kompileras och parsas koden endast vid första request. Så den overhead som JIT kompilering ger per default i PHP kan alltså undvikas.

Jag invände mot att du sa : om hastighet är en kritisk faktor så väljer man ett annat språk. Om man gör extremt stora beräkningar m.m i kod så är det klokt att inte använda php, t.ex motsvarande detta performance test i denna tråd. Där skulle asp.net eller cgi/c++ "vinna".
Det jag menar är att generellt väljer man inte bort php pga sämre prestanda i webblösningar.
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-18, 11:03 #6
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av danjel Visa inlägg
Med bytecode caches så kompileras och parsas koden endast vid första request. Så den overhead som JIT kompilering ger per default i PHP kan alltså undvikas.

Jag invände mot att du sa : om hastighet är en kritisk faktor så väljer man ett annat språk. Om man gör extremt stora beräkningar m.m i kod så är det klokt att inte använda php, t.ex motsvarande detta performance test i denna tråd. Där skulle asp.net eller cgi/c++ "vinna".
Det jag menar är att generellt väljer man inte bort php pga sämre prestanda i webblösningar.
Med bytecode caches sparas en cachad bytecode, det är inte maskinkod. När man pratar om JIT-kompilation så brukar det vara precis samma situation, men resultatet är maskinkod istället för bytecode. Därför diskuteras det och utvecklas det JIT kompilatorer för PHP, för att det skulle ge en relevant prestandavinst.

Annars håller jag med dig om att man generellt sätt inte väljer bort PHP av prestandaskäl. Förutom vid väldigt speciella applikations-typer, t ex en chat eller annan websockets-hantering - och då är inte anledningen exekveringstiden.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 11:26.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017