![]() |
Hej,
Brottas med en sajt som får dåliga svarstider vid hög belastning. För att hitta vilka sidor som tar tid att ladda har jag mätt (mha microtime()) i php när skriptet startar och när det är klart. Jag har då märkt kopplingen att det tar längre tid att skapa en sida i php ju större sidan är. Det är ju i sig inget konstigt, men jag trodde nog att mitt problem mer var relaterat till databasaccesser, dva att sidor med mycket accesser tog tid att skapa men det huvudsakliga problemet verkar vara relaterat till den skapade sidans storlek. Har länge misstänkt att vi inte riktigt får den bandbredd (via webhotellets serverhall) som vi behöver. Svårt att fastställa då vi (förutom vår garantinivå) har tillgång till en delad pool. Nu till min fråga: Tar det längre tid för mig att köra echo() i mitt php-skript om jag har taskig bandbredd!? Kan inte tänka mig att det är så men jag är osäker på hur samarbetet sker mellan php-apache-browsern. Är förklaringen annars "bara" att php/apache tar mer tid/resurser för att skapa en "stor" sida? Jag hade nog trott att resursåtgången för att göra echo på 10k skulle skilja sig marginellt mot att göra echo på 1k!?! Kan tillägga att jag har testat cache:ad output utan att märka någon förbättring. |
Förstod inte ett skit faktiskt när jag läste men tänk på att använda echo "foo"; istället för echo("foo"); eftersom echo() tar längre tid om man ska börja prata benchmark.
|
Ja otydligt skrivet av mig vi använder: echo "foo";
|
Tänk även på:
echo "foo"; tar längre tid än echo 'foo'; Samt.. echo 'foo' . $bar . ' '; tar längre tid än echo 'foo' , $bar , ' '; |
Citat:
|
Japp nytt för mig också. Man tackar :)
|
Jag vet inte. Jag kan givetvis ha fel, men det känns som att den optimeringen inte gör särskilt mycket så till vida att man inte har jättemånga echo-anrop. Det finns många andra sätt att optimera, bland annat att skriva korrekta databasfrågor (och ha en bra databaslayout) och använda cache.
|
Kan nästan garantera att de vinster man gör på att anropa echo utan paranteser, eller om man använder citationstecken/apostrofer är ingenting som man märker av. Det blir som en piss i Atlanten jämfört med en databasfråga. :) Som fors sa, så är det oftast databasfrågor, db-layout och cache som är flaskhalsen. PHP i sig är rätt snabbt, man ska skriva rätt rejält taskig kod/inkludera hela världen för att det bara pga det ska bli långsammare.
|
Du säger att ju större sidan är desto längre tid tar den att ladda conth, det får mig onekligen att fundera på om det inte är så att det är cpun som är flaskhalsen.
Nu har jag inte direkt i i huvudet huruvida php interpreterar all "tänkbar" kod som skall köras till binärformat eller om den gör det allteftersom, men du borde testa att slänga in en av de många binär-cachnings-moduler till php för att se om det hjälper. |
Vilket är ur prestandasynpunkt bäst när det gäller att lägga in html kod?
Är det bättre att avsluta php-taggen och lägga in html-koden efter den och sen öppna en ny php-tagg för att fortsätta eller ska man köra på en php-tagg som löper över hela sidan och sedan lägga html-kod i echo? |
Gör det som är mest läsbart. Att lägga all HTML i echo blir antagligen inte speciellt läsbart. Att fundera på vilket av dem som är snabbast är bara för tidig optimering.
|
Många intressanta svar, men om jag får gnälla lite så är min tråd lite kidnappad...
eller så uttrycker jag mig oklart... ;) Om jag formulerar mig såhär; Kan tiden det tar att framställa min sida i php påverkas av bandbredden?! Om jag t.ex gör flush på en stor mängd data och har en taskig bandbredd så antar jag att det är sant!?! Kan detta även ske med en echo? Dvs att servern skickar data till browsern innan min sida är färdigframställd? |
Citat:
Bandbredden kan påverka ladningstiden men inte hur snabbt echo exekveras. |
Vad är det för webbhotell du har? Antagligen ligger problemet där...
|
Citat:
flush försöker ju pusha ut data till browsern. Är det så att php-skriptet "hänger" i väntan på att flush körs eller skickas det bara vidare till apache och skriptet körs vidare direkt. Vore intressant med någon som kan php/apache på denna nivå eller om ni har tips om någon bra länk... |
Gör ett försök till efter att ha undersökt lite mera...
Lite förenklat: Jag har 2 olika sidor. - En som är statisk med ganska mycket text (faq-sida) - En annan som skapas dynamiskt med flera DB accesser men den resulterande sidan är ganska liten. Jag mäter hur lång tid det tar att skapa sidan på server-sidan och kommer (överraskande!?) fram till detta: Den statiska sidan tar 0,04 s att skapa vid lågtrafik men 0,8 s i peak. Den dynamiska tar 0,1 s vid lågtrafik och 0,5 s i peak. Resultatet var precis tvärtom vad jag väntade mig. Jag trodde den dynamiska sidan skulle ta mer "stryk" (med sina DB-accesser) i peak än den statistik, men resultatet är alltså tvärtom. Därav började jag undra om bandbredden är den avgörande faktorn, vilket känns som en logisk slutsats? - dock måste då bandbredden påverka tiden det tar att skapa sidan på servern?!? Alternativt tar det längre tid för php/apache att skapa en relativt stor sida i peak. Minnesbrist för apache? Tacksam för synpunkter från er kunniga LAMP:are... :blink: * edit stavning ;-) |
Med allra största sannolikhet beror det på belastningen på servern. Det är framförallt hur CPU och diskar är belastade.
Bandbredden bör bara påverka hur lång tid det tar att skicka över den generade informationen till dig, inte hur lång tid det tar att generera informationen. Alltså; jag bedömer det som mycket osannolikt att bandbredden påverkar exekveringstiden för ditt script. |
Citat:
Låter helt rätt & riktigt. Om någon har tips på optimering av just detta med CPU/disk utnyttjande tar jag tacksamt emot detta. Känns som jag har fokuserat för mycket(?) på DB optimering och för lite på det andra (eftersom sidan som skapas dynamiskt är mer "stryktålig" än den statiska...) Kanske har gett mySql för stort minnesutrymme - ska testa att dra ner på det... |
En PHP Bytecode cache ger väldigt mycket.
|
Jag har gjort enligt detta: http://www.webmasternetwork.se/f4t20693.html och prestandan har ökat väsentligt kan jag säga, men mer kan säkert göras och tweekas med:
AddModule mod_expires AddModule mod_headers |
Alla tider är GMT +2. Klockan är nu 23:56. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson