Mikähän on syynä, että alinmainen on huomattavasti nopeampi, ylempi noin 7sek alempi vain 0,15sek? Functiota kutsutaan tuhansia kertoja.
$paljon_dataa sisältää muuttumatonta dataa.
fuction xx(){
global $paljon_dataa
...
}
fuction xx($paljon_dataa){
...
}
Kannattaako siis functiolle viedä muuttujien tiedot aina function perässä, eikä globalilla?
Mitä PHP kirjoja olen lukenut, niin niissä neuvotaan käyttämään globalia
Oletko kokeillut vakiota?
Opiskelija kirjoitti:
Mitä PHP kirjoja olen lukenut, niin niissä neuvotaan käyttämään globalia
Hmmpfff... Mitä minä yhtään ohjelmoinnista tajuan, globaalit muuttujat ovat suolesta ja niiden käyttöä kannattaa välttää.
Sinänsä jännä huomio ja hyvä että mainitsit sen myös julkisesti - eipä tarvitse tuotakaan kantapään kautta oppia :) Olisin kyllä kuvitellut, että globaalin muuttujan käyttö tuollaisesa tilanteessa olisi nopeampaa, sillä jos laittaa datan argumenttina fukntiolle, datahan kopioidaan uuteen muuttujaan(ellei sitten käytä &data). Mutta jos ei ole mitään erityistä syytä käyttää globaalia, niin argumenttina se data sille funktiolle.
Mites minä saan tälläisiä tuloksia:
<?php $keijo = "jotain"; // testifunktio 1: function seppo1(){ global $keijo; } // Käytin seuraavanlaisesti: seppo1(); // Keskimäärin 18378 kierrosta per sekunti // testifunktio 2: function seppo2($keijo){ } // Käytin seuraavanlaisesti: seppo2($keijo); // Keskimäärin 17286 kierrosta per sekunti ?>
Eli global on hitusen nopeampi.
Eikö funktioissa ole mitään muuta eroa kuin että toisessa käytössä on globaali muuttuja ja toisessa ei? On vaikea uskoa, että ero olisi noin suuri. Mutta jos se tosiaan on, niin älä toki käytä globaalia muuttujaa siinä kohdassa. Sinänsä globaalit muuttujat eivät ole pannassa, jos ne eivät joka tarkoitukseen sovikaan. Riippuu tapauksesta siis, kannattaako globaalia muuttujaa käyttää.
Ihan samanlaiset on, ainoa ero on miten functiolle viedään data.
Piti ihan kokeilla tyhjillä functioilla, molemmat tavat suunnilleen yhtänopeita.
Poistin rivi riviltä functiosta koodia kunnes hitauden syy selvisi, nimittäin array_rand joka tekee hitaan jos muuttuja on globaali, mutta miksi?
Vakio ei käy tähän tarkoitukseen, koska data taulukko muotoista. Tosin niille löytyy muuta käyttöä, täytyy tutustua niihin tarkemmin. Empäs tiennytkään, että niitä voi käyttää functiossa suoraan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.