PHP: il file letto è troppo carico su ogni pagina?

2

In F3 Framework Controller ho scritto una funzione per verificare se i dati MySql sono salvati in un file, altrimenti caricando un modulo per chiedere agli utenti tali dati (simile all'installazione di Wordpress).

Questa funzione viene caricata ogni volta che viene chiamata una pagina / metodo:

abstract class Controller
{

    /* F3 */
    protected $f3;
    protected $file_configuration = 'setup.cfg';

    function __construct()
    {
        $f3 = Base::instance();
        $this->f3 = $f3;
        $this->setDatabase();
        $this->setup();
    }
}

e setDatabase() è un semplice:

private function setDatabase()
    {
        $search = 'TEST';
        $file = $this->file_configuration;
        // Read from file
        $lines = file('app/config/'.$file);
        $found = false;
        foreach($lines as $line)
        {
            // Check if the line contains the string we're looking for, and print if it does
            if(strpos($line, $search) !== false)
            {
                $found = true;
            }
        }
        if ($found===false)
        {
            $fh = fopen('app/config/'.$file, 'a') or die("can't open file");
            $stringData = "\n";
            fwrite($fh, $stringData);
            $stringData = "New Stuff 1";
            fwrite($fh, $stringData);
            $stringData = "\n";
            fwrite($fh, $stringData);
            $stringData = "New Stuff 2";
            fwrite($fh, $stringData);
            fclose($fh);
        }
    }

(Si prega di non vedere i valori delle variabili ... solo test al momento); -)

La mia domanda è:

Altre classi iniziano ad estendere il controller, metterò a dura prova il mio server che legge ogni volta il file?

Puoi suggerirmi un approccio migliore?

Immagina wordpress: penso che ogni volta che chiami la pagina, controlla se il database esiste / è configurato correttamente, altrimenti interrompi / chiedi dati di connessione (nome utente, password, ecc.)

    
posta sineverba 31.03.2015 - 17:56
fonte

3 risposte

1

Could be (too) heavy for my server performs that check every time?

Questa non è solo una buona pratica in generale. Se finisci a lavorare con altri sviluppatori e anche loro ereditano dal Controller (che sembra un oggetto molto centrale nel tuo dominio) finirai con un sacco di pesanti elaborazioni sul tuo server.

Suggerisco di impostare solo le cose nel tuo costruttore che ti aiutano a creare l'oggetto. Leggere le cose dal database non sembra farne parte.

Questo farà anche provare un dolore al collo per te.

Se hai davvero bisogno di farlo nel costruttore per qualche motivo, ti suggerisco di utilizzare il Singelton Pattern e solo creala una volta. In questo modo puoi utilizzare la sua istanza senza richiamare il costruttore ogni volta.

    
risposta data 31.03.2015 - 18:08
fonte
0

I server di database sono veramente bravi a memorizzare piccole query frequenti nella cache. Sta aprendo una connessione al database che può richiedere del tempo. Tuttavia, se la maggior parte delle tue richieste finisce per colpire il database per altri motivi, non hai davvero perso nulla.

Tuttavia, questo sembra essere il tipo di cosa che dovresti memorizzare in una sessione.

    
risposta data 31.03.2015 - 19:33
fonte
0

Questo approccio è normale, ma se si è a conoscenza della perdita di prestazioni, è necessario implementare un livello di cache tra questo file di configurazione e il controller.

Questo semplice esempio sembra (pseudo-codice, non sicuro per php corretto)

public function setupConfig() {

    if (is_file('db_config.cache')) {
       $this->setConfig(unserialize(file_get_contents('db_config.cache')));
       return;
    }

    if (is_file('db_config.ini')) {
       $configContent = file_get_contents('db_config.ini');
       if ( null !== ($config = $this->parseConfig($configContent))) {
          $this->setConfig($config);
          file_put_contents('db_config.cache', serialize($config));
          return;
       }
    }

    // ...
    // Ask for config data from user here or set default values or something else

}
    
risposta data 01.04.2015 - 12:40
fonte

Leggi altre domande sui tag