Hur läses en PHP-fil in?

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
marcusgarden



Medlem i: 3319 dagar

Status: Offline



#742559
Inlägg Skrivet: 2019-04-28 00:54      Ämne: Hur läses en PHP-fil in? Citera

Hej!

Jag har en PHP-fil som börjar bli stor, den innehåller en massa functions.
I dessa functioner så körs en massa databasfrågor.

Min fundering är nu om filen blir läst, blir HELA filen läst? Alltså, de functioner som inte anropas, körs databasanropen i dessa?

Jag är ute efter att optimera.

Tack på förhand!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
LimpanDSS



Medlem i: 2549 dagar
Från: Stockholm
Status: Offline



#742564
Inlägg Skrivet: 2019-04-29 02:44      Ämne: Citera

Tjabba!

PHP kommer att behöva att tolka filen vid varje exekvering, och således skapa ett nytt AST (https://en.wikipedia.org/wiki/Abstract_syntax_tree) varje gång.

Detta innebär att parsern kommer behöva gå igenom alla funktioner och länka dem via en hash map algoritm så att de sedan går att hitta snabbt i minnet. Notera dock att php INTE kommer att exekvera några funktioner förrän att du kallar på dem.

För att optimera detta finns det något som kallas för OPCACHE, vilket gör så att filen bara tolkas eller "kompileras" en gång, och sedan behöver den istället bara länkas (bindas) vid varje körning istället. Detta kan göra enorm skillnad!

Den vanligaste cachen är PHPs egna ZEND OPCACHE, vilket chippas med PHP från och med version 5.5.

Det är väldigt enkelt att enablea, det enda du egentligen behöver göra är att ändra den här raden i php.ini:

KOD:
1:
 
2:
opcache.enable_cli=0
3:
 


till

KOD:
1:
 
2:
opcache.enable_cli=1
3:
 


Dock finns det lite annat viktigt som kan vara bra att ha med, se:
https://www.php.net/manual/en/opcache.installation.php

Det finns också något som kallas för autoloading, vilket gör att PHP bara inkluderar filer precis när de behövs:
https://www.php.net/manual/en/language.oop5.autoload.php.

Detta används inom de flesta ramverk i PHP.
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
TEH



Medlem i: 937 dagar
Från: Stockholm
Status: Offline



#742600
Inlägg Skrivet: 2019-06-11 23:22      Ämne: Citera

Kort svar alltså: nej, ingen kod inuti en funktion körs någonsin om inte funktionen anropas. Så att ha en massa tunga funktioner som inte används påverkar inte prestandan nämnvärt.
 

_________________
Silence is golden.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic