Vra

Wat kan ek doen om die verhoging van die prestasie/spoed van my PHP skrifte sonder die installering van sagteware op my bedieners?

Was dit nuttig?

Oplossing

Profiel. Profiel. Profiel. Ek is nie seker of daar iets is wat daar is vir PHP, maar dit moet eenvoudig 'n klein instrument skryf in te voeg profilering inligting in jou kode te wees. Jy sal wil hê om te funksioneer tye en SQL navraag keer profiel.

So waar jy 'n funksie:

function foo($stuff) {
    ...
    return ...;
}

Ek sou dit verander na:

function foo($stuff) {
    trace_push_fn('foo');
    ...
    trace_pop_fn('foo');
    return ...;
}

(Dit is een van daardie gevalle waar verskeie opbrengste in 'n funksie 'n hindernis.)

En SQL:

function bar($stuff) {
    trace_push_fn('bar');

    $query = ...;
    trace_push_sql($query);
    mysql_query($query);
    trace_pop_sql($query);

    trace_pop_fn('bar');
    return ...;
}

Op die ou end, kan jy 'n volledige spoor van die program uitvoering te genereer en te gebruik allerhande tegnieke om jou knelpunte te identifiseer.

Ander wenke

Een redelike tegniek wat kan maklik getrek word van die rak af is caching.'n groot hoeveelheid van die tyd is geneig om te gaan in die opwekking van hulpbronne vir kliënte wat algemeen tussen versoeke (en selfs oor kliënte);die uitskakeling van hierdie runtime werk kan lei tot dramatiese spoed toeneem.Jy kan stort die gegenereerde hulpbron (of hulpbron fragment) in'n lêer buite die web boom, en dan lees dit terug in wanneer dit nodig is.Natuurlik, sommige profilering sal nodig wees om te verseker dit is eintlik vinniger as die wedergeboorte - dwing die web bediener terug te skyf gereeld kan nadelig wees, sodat die hulpbron is regtig nie nodig het om swaar hergebruik.

Jy kan ook verbaas wees hoe baie tyd bestee word binne sleg geskryf databasis navrae;tyd gemeenskaplike gegenereer navrae en sien as hulle kan herskryf word.Die bedrag van die tyd bestee die uitvoering van die werklike PHP-kode is oor die algemeen redelik beperk, tensy jy met behulp van'n paar sub-optimale algoritmes.

Nie een van hierdie is beperk tot PHP, alhoewel sommige van die PHP "magicy" benaderings/funksies kan oor-die beskerming van een van dink oor hierdie bekommernisse.Byvoorbeeld, ek het onlangs opgedateer'n script wat was die gebruik van array_search te gebruik om'n binêre soek oor'n gesorteer skikking, en het die verwagte eksponensiële speedup.

Baie oorweeg om XDebug profiler:. Dit help met die beheer van hoeveel 'n sekere funksie uitgevoer word teen wat jy sou verwag

Ek probeer om instruksies te verminder, terwyl die verbetering kode leesbaarheid deur die vervanging van logika met array-soektogte wanneer toepaslik. Dit is wat Jeff Atwood geskryf in [Die Beste Kode is geen Code Op All] [1].

  • Ook, vermy loops in 'n ander lus, en geneste if / anders state.
  • Kort funksies. Soms is 'n baie -kode nie uitgevoer moet word wanneer die resultaat-waarde is reeds bekend.
  • Onnodige toets:

      

    As (telling ($ skikking) === 0) terugkeer;

    kan ook geskryf word as:

      (! $ Skikking)

    As terugkeer;

    Nog 'n funksie-oproep uitgeskakel!

    [1]: http://www.codinghorror.com/blog/archives/ 000878.html "Die Beste Kode is geen Kode op alle"

Jy kan die kode geoptimaliseer met twee basiese dinge:

Optimalisering PHP geassosieer biblioteek en bediener

Gaan deur https://www.digitalocean.com/community / artikels / hoe-om-te optimaliseer-apache web-bediener-prestasie Of

Jy kan profiele instrument te gebruik soos xhprof om te sien watter deel van jou kode kan deur optimale en hier is die skakel te volg: http://michaelsanford.com/compiling-xhprof-for-php-5-4/

Optimalisering van jou kode met behulp kode profiler en kode ontleder

Jy moet Netbeans om hierdie plugin gebruik te installeer. Hier is die stappe wat jy nodig het om te volg:

1) Open NetBeans kies dan opsie uit menubalk Tools> Plugin. soek dan plug-in naam "phpcsmd" in die beskikbare blad plug-in en installeer dit van daar af.

2) Nou open die terminale en daar as die super gebruiker deur te tik command "sudo su".

3) installeer PEAR biblioteek (as dit nie geïnstalleer is) in jou stelsel deur die loop volgende opdragte in jou terminale

a) wget http://pear.php.net/go-pear.phar
b) php go-pear.phar

As ons moet dit vir die installering van 'n verdere addons.

4) Dan loop die opdrag

"pear config-set auto_discover 1"

Dit sal gebruik word om 'n outomatiese ontdek die pad "ware" vir die vereiste inproppe. So hulle kry installeer outomaties die lokasie.

5) hardloop dan onder bevel om PHP-kode snuffelhonde te installeer.

"pear install --alldeps pear/PHP_CodeSniffer"

6) Aan die PHP gemors Aanwyser installeer deur die loop volgende opdrag

"pear install --alldeps phpmd/PHP_PMD"

As jy die fout soos "ongeldig naam pakket / pakket lêer" phpmd / PHP_PMD "" terwyl die installering van hierdie module. Jy moet hierdie opdrag "peer-kanaal-ontdek pear.phpmd.org" om ontslae te raak van hierdie fout te gebruik. Na hierdie opdrag kan jy die bogenoemde opdrag weer uit te voer om gemors detector installeer.

7) Nou om te installeer die PHP afhang deur die loop volgende opdrag

"pear install --alldeps pdepend/PHP_Depend"

8) Nou installeer die PHP Kopieer Plak Detector deur hardloop volgende opdrag

"pear install --alldeps phpunit/phpcpd"

9) loop dan die opdrag

"pear config-set auto_discover 0"

Dit sal gebruik word om die motor te stel ontdek pad "vals".

10) Maak dan net boontjies en volg die pad Tools> Options> PHP> PHPCSMD

Daar is geen magic oplossing, en 'n poging om generiese oplossings kan goed net 'n vermorsing van tyd wees.

Waar is jou knelpunte? Byvoorbeeld is jou skrifte verwerker / databasis / geheue intensiewe?

Het jy enige profilering uitgevoer?

insluitend lêers is stadig, en vereis dat hulle is selfs stadiger. As jy __autoload gebruik vir die insluiting van elke klas toe wat sal optel. byvoorbeeld.

Ek is altyd 'n bietjie versigtig om te probeer te slim in terme van kode optimalisering te wees, al is dit offer kode clairty. As jy nodig het om te maak kode duister om dit vinnig te maak, sou dit nie goedkoper wees om Hardwear gradeer in plaas van mors jou tyd probeer om kode aanpas? Verwerker siklusse is goedkoper as programmeerder siklusse, na alles.

Die mense wat ek kan dink ...

  • Loop invarianten is altyd 'n goeie een om dop te hou.

  • Skryf E_STRICT en E_NOTICE voldoen kode, veral as jy is meld foute.

  • Vermy die @ operateur.

  • Absolute paaie vir vereis en sluit.

  • Gebruik strpos, str_replace ens in plaas van 'n gereelde uitdrukkings waar moontlik.

Dan is daar 'n klomp van die ander metodes wat kan werk, maar waarskynlik gewoond gee jy baie voordele.

Wanneer ek kyk na die prestasie probleme, ek dink die beste ding om te doen is tyd hoe lank jou bladsye te neem om uit te voer, en dan kyk na die stadigste kinders. Wanneer jy hierdie ware statistieke te kry, kan jy dikwels die werkverrigting te verbeter op die stadigste kinders deur ordes, hetsy deur vasstelling van 'n stadige SQL navraag of dalk strenger die kode 'n bietjie.

Dit is natuurlik vereis geen nuwe hardeware of spesiale sagteware, net 'n kritiese oog op die bestaande kode.

Dit gesê, sal dit slegs werk vir so lank ... as jy regtig kry genoeg verkeer na die grense van jou hardeware getref, en / of daar is 'n paar kode wat net inherent stadig en regtig nodig is, sal jy ' om te kyk na ander moontlikhede.

Ek is verantwoordelik vir 'n groot stelsel van verslagdoening en ons hou die stadigste verslae soort soos dit. Ek brand 'n unieke sleutel in die db wanneer die verslag begin en dan wanneer dit eindig ek kan bepaal hoe lank dit geneem het. Ek gebruik die databasis, want op die manier kan ek spoor wanneer bladsye tydverstreke (wat gebeur 'n baie meer as wat ek wil)

Volg 'n paar van die ander advies eerste soos profilering en die maak van 'n goeie hulpbron toekenning besluite, bv caching.

Ook, in ag neem die prestasie van buite hulpbronne soos jou databasis. In MySQL jy kan check die stadige navraag log byvoorbeeld. Daarbenewens maak seker jy het jou databasis nie ontwerp 'n vergeet het. Optimalisering van jou navrae ( weer vir MySQL ) teen die werklike data kan betaal van groot.

Rasmus Lerdorf het 'n paar goeie wenke in sy onlangse aanbieding " Simple is Hard " by FrOSCon '08. As jy met behulp van 'n bytecode kas (en jy regtig moet met behulp van 'n), sluit in pad mis seer 'n baie, so te optimaliseer jou vereis / require_once.

Jy kan profiele instrument te gebruik soos xhprof om te sien watter deel van jou kode kan deur optimale!

1) Gebruik jongste weergawe van PHP

Die kern span is hard aan die werk op die verbetering van die prestasie van PHP in elke weergawe.

2) Gebruik 'n bytecode kas

Sedert PHP 5.5 'n bytecode kas is by PHP vernoem OPcache. Die gebruik van OPcache kan 'n groot verskil veral omdat PHP 7. Dit ontvang verbeterings in elke PHP weergawe maak en dalk selfs 'n JIT implementering kry in die toekoms .

3) Profilering

Hoewel die ontwikkeling van profilering gee jou 'n groot insig wat presies gebeur. Dit help baie om knelpunte in jou kode.

Een van die mees gebruikte instrumente is XHProf maar is nie amptelik nie ondersteun en het probleme met PHP> = 7. 'n Alternatiewe wanneer jy wil profiel PHP> = 7 is Tideways wat 'n vurk van XHProf .

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top