La piattaforma | Caratteristiche | Sviluppo | Scarica | Licenza |EnglishItalian

SourceForge.net Logo

Support Wedgefish development

La Libreria del codice

Wedgefish mantiene automaticamente un indice di tutte le funzioni e delle classi disponibili, nota come la "Libreria del codice".
Esistono due tipi di libreria: la libreria "globale" contenente le funzioni e le classi definite nel sistema e nei moduli abilitati globalmente, ed una libreria per ciascun sito, contenente le funzioni e le classi contenute nei vari moduli abilitati in ciascun sito.
Durante la fase di elaborazione della richiesta proveniente dall'utente, prima dell'individuazione del sito al quale essa si riferisce, è inizialmente disponibile solo la libreria globale, quindi ad essa viene aggiunta la libreria del sito al quale si riferisce l'URL.
La libreria viene generata alla prima esecuzione della piattaforma e di ciascun sito e ad ogni modifica del file di configurazione globale o di quello del sito, e viene memorizzata nella cache, assieme alla configurazione globale o del sito stesso.
Successivamente sia la configurazione che la libreria, se non modificate, verranno lette dalla cache in formato serializzato, risparmiando tempo.

Ciascuna funzione o classe è associata al nome del file sorgente che contiene la sua definizione.
Qualora una funzione o una classe ricercata non venga trovata, verrà ripetuta la procedura di indicizzazione: questo consente di rilevare i nuovi moduli abilitati di recente e le nuove definizioni di funzioni e classi aggiunte ai moduli e al sistema.
Esiste un indice globale, valido per tutti i siti, contenente l'elenco delle funzioni e delle classi definite nel sistema e nei moduli abilitati globalmente, ed uno per ciascun sito, creato unendo l'elenco delle definizioni di sistema con quelle del sito stesso.
Questa struttura consente di aggiungere a PHP alcune caratteristiche non originariamente previste, che facilitano la vita degli sviluppatori e migliorano la velocità di esecuzione, come spiegato di seguito.

Autocaricamento delle funzioni

Durante lo sviluppo di un'applicazione web, ci si trova spesso a voler utilizzare librerie di funzioni già pronte, oppure si desidera raccogliere tutto il codice che svolge interrogazioni su un database in un unico posto ed utilizzarlo in tutte le pagine.
A tale scopo, uno o più files contenenti tali definizioni vengono inclusi all'inizio di ogni script.  Uno dei principali problemi posti da questo approccio è quello di richiedere a PHP di caricare ed interpretare tutto il contenuto dei file inclusi ad ogni richiesta, anche se viene utilizzata solamente una piccola parte delle funzioni e delle classi in essi contenuti: ciò causa un decadimento delle prestazioni, notevole in presenza di molte richieste concorrenti.  Sebbene questo possa essere alleviato utilizzando una cache del codice quale eAccelerator, tuttavia permane sempre la necessità di dover inserire, in ciascun file, un istruzione include o require con il giusto percorso del file da includere: qualora il file incluso venga poi rinominato, spostato o cancellato, tutti i files che lo includevano non riusciranno più a trovarlo, causando errori di esecuzione.
A tale scopo, sarebbe opportuno che le funzioni venissero ricercate e caricate automaticamente al loro primo uso, senza dover specificare il percorso del file sorgente che le contiene.  Tale funzionalità, purtroppo, non è stata finora inclusa in PHP, almeno nella versione 5, a differenza del caricamento automatico delle classi.
Tuttavia, Wedgefish anticipa tale funzionalità, tramite un'innovativa tecnologia implementata nel preprocessore di codice integrato.
Come funziona? È semplice: ogni chiamata ad una funzione il cui nome inizia con "wos_" viene riscritta come una chiamata alla funzione "wos_function", passandogli il nome della funzione e l'elenco dei parametri.
La funzione "wos_function" provvede quindi, se la funzione desiderata non è stata ancora definita nel sistema, ad includere il file che la contiene, quindi la esegue.
Il codice delle funzioni viene in questo modo caricato ed interpretato da PHP solamente se la funzione è effettivamente utilizzata, risparmiando tempo in assenza di cache del codice, specialmente in presenza di costrutti condizionali complessi.
Da misurazioni effettuate, con tale meccanismo si ottengono incrementi di velocità che arrivano anche al 500% rispetto all'inserimento non condizionale di una serie di istruzioni include all'inizio di ogni script.1

Autocaricamento delle classi

Anche le definizioni delle classi, come le funzioni, possono essere automaticamente caricate al loro primo utilizzo.
Per implementare tale funzionalità, tuttavia, Wedgefish sfrutta un meccanismo standard fornito da PHP 5 in poi: la funzione magica __autoload, che viene richiamata automaticamente dal motore di PHP ogni volta che viene istanziata una classe la cui definizione non è stata ancora caricata.
In questo modo non è necessario riscrivere il codice PHP come nel caso delle funzioni, riducendo il lavoro della piattaforma.
La funzione __autoload riceve come parametro il nome della classe da caricare, quindi provvede a ricercarla nella libreria e a caricare il file che ne contiene la definizione.

(1) prestazioni misurate con il tool a riga di comando "ab" sulla home page del sito di Wedgefish, con la cache dell'output attivata

 

Wedgefish - Copyright © 2005-2008 by Massimiliano Alessandri
This is free software, and you may redistribute it under the Affero GPL.
Wedgefish comes with absolutely no warranty; for details, see the license.
You may download the currently running source code for this software.