La documentazione di apc.enable_cli
, che controllano se APC dovrebbe essere attivato in modalità CLI, dice (citando):
lo più per il test e il debug. Impostando questo si abilita APC per la versione CLI di PHP. In normali circostanze, non è l'ideale per creare, popolare e distruggere la cache APC a ogni richiesta CLI, ma per vari scenari di test è utile essere in grado di abilitare APC per la versione CLI di PHP facilmente.
Forse APC memorizzerà gli opcode in memoria, ma mentre l'eseguibile PHP muore alla fine dello script, quella memoria andrà persa: non si manterrà tra le esecuzioni dello script.
Quindi l'opcode-cache in APC è inutile in modalità CLI: non ottimizzerà nulla, poiché PHP dovrà ancora ricompilare il codice sorgente in opcode ogni volta che viene lanciato l'eseguibile di PHP.
In realtà, APC non "ottimizzare": il modo standard di esecuzione di uno script PHP è come questo:
- leggere il file, e compilare in codici operativi
- eseguire i codici operativi
Cosa APC è conservare in codici operativi a memoria, quindi l'esecuzione di uno script PHP diventa:
- leggere i codici operativi dalla memoria (molto più veloce di compilazione del codice sorgente)
- eseguire i codici operativi
Ma questo significa che è necessario avere qualche posto in memoria per memorizzare i codici operativi. Quando si esegue PHP come un modulo Apache, Apache è responsabile della persistenza di quel segmento di memoria ... Quando PHP viene eseguito da CLI, non c'è nulla per mantenere il segmento di memoria lì, quindi viene distrutto al termine dell'esecuzione di PHP.
(non so come funziona esattamente, ma è qualcosa di simile, almeno nei principi, anche se le mie parole non sono molto "tecnico" ^^)
Oppure, per "ottimizzazione" intendi qualcos'altro rispetto alla cache opcode, come la direttiva di configurazione apc.optimization? Se è così, questo è stato rimosso in APC 3.0.13
fonte
2009-08-07 15:25:18
Dalla documentazione PHP: APC è una struttura libera, aperta e robusta per caching e ottimizzazione PHP codice intermedio. Indovinate mi chiedo sull'ottimizzazione del codice intermedio. Ho intenzione di eseguire lo script CLI solo una volta e poi funzionerà per alcuni giorni, eseguendo del codice all'interno di un ciclo. Quindi APC non velocizza realmente l'esecuzione stessa, solo il tempo necessario per iniziare l'esecuzione? – Matic
http://pecl.php.net/package-info.php?package=APC&version=3.0.13 dice "Obsoleto e rimuovi apc optimizer"; Non ho mai sentito APC (almeno nelle ultime versioni) ha fatto alcun tipo di "ottimizzazione" come quello che si può pensare al compilatore può fare quando si programma in C. E non penso che ridurrà il tempo preso per iniziare l'esecuzione, dato che il PHP dovrà essere compilato in opcode (è su questa parte che APC consente un enorme guadagno ... Quando può tenere quegli opcode in memoria tra le esecuzioni della sceneggiatura - che non penso può fare in CLI) –
Giusto per essere chiari, l'utilizzo di APC in modalità CLI è ancora abbastanza utile per la memorizzazione nella cache di oggetti generati dall'utente. In uno script su cui sto lavorando, usiamo apc_store() e apc_fetch() per sfruttare il caching degli oggetti utente di APC in un cron job di lunga durata. – rinogo