Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

PHP traag

bewerkt ma 9 feb 2015 in PHP, MySQL Posts: 48
Ik heb het probleem dat php blijkbaar een nogal trage taal is in uitvoering.

Sommige simpele funkties kosten nogal wat tijd, waardoor de site te traag wordt (de host klaagt erover dat de site zijn server opblaast, doordat die oververhit raakt).

Zijn er snellere alternatieven voor scripting. Of is het mogelijk om php via bepaalde stappen sneller te laten uitvoeren.

Het vullen van bv. 20 variabelen kan meer als 200ms kosten, terwijl ze gevuld worden vanuit een record op de volgende manier.


function VenueInfo_Value($Venue_ID,$Value_Name)
{
require info_RequirePath ("Venue");
$Found_Value = "";
if($Venue_ID>0)
{
If(isset($info_Venue[$Venue_ID]))
{
$Found_Value = $info_Venue[$Venue_ID][$Value_Name];
};
};

return $Found_Value;
};

De aanroep is dan bv. VenueInfo_Value (17,"naam");

Reacties

  • PMPosts: 732
    Wat staat er nog in het require path Venue ?
    Waarom een check op hoger dan 0 ?
    Wat is $info_Venue ?

    Kan mij niet voorstellen dat deze functie iets opblaast.
    If it's not fun, you're not doing it right!
  • bewerkt do 12 feb 2015
    PMPosts: 48
    $info_Venue is een array met als inhoud zoiets als onderstaand,


    $info_Venue = array ( "1"=> array ( "fullname"=>'Rio All-Suite Hotel & Casino',
    "shortname"=>'Rio',
    "street_1"=>'3700 W. Flamingo Road',
    "street_2"=>'',
    "zip"=>'NV 89103',
    "phone_1"=>'(866) 746-7671',
    "phone_2"=>'',
    "eMail_1"=>'',
    "eMail_2"=>'',
    "twitter"=>'',
    "facebook"=>'',
    "city_id"=>47,
    "state_id"=>28,
    "country_id"=>200,
    "currencycode"=>'USD',
    "url_venue"=>'www.riolasvegas.com',
    "currencycode2"=>'USD',
    "timezone_id"=>5,
    "venue_image"=>'http://www.wheretopoker.com/pictures/poker/wsop/s44/casinos//las-vegas-rio.jpg',
    "venue_kind_id"=>10
    ),
    "2"=> array ( "fullname"=>'The Grosvenor Victoria Casino',

    Er zijn nu 209 entries.

    De range check is om php foutmeldingen te voorkomen.
  • bewerkt ma 9 feb 2015
    PMPosts: 415
    Altijd leuk dat een ts de moeite doet om een leesbaar codeblok te presenteren...

    function VenueInfo_Value($Venue_ID, $Value_Name)
    {
    require info_RequirePath("Venue");
    $Found_Value = "";
    if($Venue_ID > 0)
    {
    if(isset($info_Venue[$Venue_ID]))
    {
    $Found_Value = $info_Venue[$Venue_ID][$Value_Name];
    };
    };
    return $Found_Value;
    };

    Voor zover ik de functie begrijp, wil je gewoon kijken (of en) welke info er in een bepaalde array staat?
    Dat kan makkelijker door te kijken of een bepaalde key wel bestaat -> array_key_exists()
    En als die true geeft, haal je gewoon de rest op adhv die key?

    $voorbeeld = array(
    0 => 'eerst',
    2 => 'midden',
    5 => 'laatst'
    );

    function bla($key, $arrayName)
    {
    return array_key_exists($key, $arrayName) ? $arrayName[$key] : 'bestaat niet';
    }

    echo bla(0, $voorbeeld); //eerst
    echo bla(1, $voorbeeld); //bestaat niet
    echo bla(2, $voorbeeld); //midden
    //etc

    Edit, oei zoveel info in een array, waarom sla je het niet op in een database?
    ReneVnuet
  • PMPosts: 732
    Zoals vinTage aangeeft zoon data hoort in de dabase en niet in een array.
    Als er, zoals je aangeeft, meer dan 17 ID's zijn en deze allemaal deze data in een array hebben staan dan is dit inderdaad de reden dat je php scripts heel traag worden.

    Ik zou dan ook gaan voor een database en if ID exists display data, else ID isent available, of zo iets ;)
    If it's not fun, you're not doing it right!
  • Een database hoort niet sneller te zijn als een array.

    En de funktie haalt niet op of de waarde bestaat, maar de waarde, indien die bestaat.

    Dus VenueInfo_Value (2,"fullnaam") geeft terug "The Grosvenor Victoria Casino"

    Dus VenueInfo_Value (1,"shortnaam") geeft terug "Rio"

    Dus VenueInfo_Value (2012152,"ongeldi") geeft terug "" (empty string).


    De code hierachter kan er dus op vertrouwen dat er de waarde terugkomt zonder foutmelding, ook bij ongeldige input.


  • Tuurlijk is jouw manier wel trager.....!!
    Jij wilt dat er een multiarray doorzocht wordt terwijl je bij een database direct naar het juiste id gesprongen wordt.
  • PMPosts: 732
    Ben het met vinTage helemaal eens, en het resultaat "of je vraag in dit bericht" bevestigd het ook nog eens.

    Waarom geen database, wat is hier de reden van ?
    If it's not fun, you're not doing it right!
  • bewerkt wo 25 feb 2015
    PMPosts: 32
    Dit probleem had ik pas ook, in mijn geval was het makkelijk op te lossen misschien werkt dit in jouw geval ook.

    Eerst had ik:

    $config['hostname'] = 'localhost';

    Ik zocht het ff op en vond dat je ook dit kan doen:

    $config['hostname'] = '127.0.0.1';

    Het scheelt heel veel qua PHP snelheid. Maar misschien kwam dat ook door XAMPP/Windows of iets.
    (Excuses als ik verkeerd advies geef)
  • PMPosts: 879
    Klopt. In windows wordt een request op localhost gedaan via het host-bestand (hier vind de check plaats) en zal terugverwezen worden naar je lokale ip (127.0.0.1). (loopback dus)
    Als je de request rechtstreeks doet op 127.0.0.1 dan vind er dus geen "loopback" plaats zoals met het host bestand maar zal de request direct via de TCP/IP stack naar het ip gestuurd worden. Daar zit het snelheidsverschil in
Login of Registreer om te reageren.