Progettare correttamente i sistemi di plugin basati sul web in modo da non sprecare tante risorse?

7

Molti sistemi CMS che si affidano a terze parti per gran parte del loro codice spesso costruiscono sistemi "plugin" o "hook" per facilitare agli sviluppatori la modifica delle azioni del codebase senza modificare i file core.

Questo di solito significa un modello di design Observer o Event .

Tuttavia, quando guardi sistemi come wordpress, vedi che su ogni pagina caricano una specie di file bootstrap da ciascuna delle cartelle del plugin per vedere se quel plugin dovrà eseguire quella richiesta. Si tratta di un design scarso che fa sì che sistemi come wordpress impieghino molti MB aggiuntivi di memoria a caricare e analizzare gli articoli non necessari in ciascuna pagina.

Esistono modi alternativi per farlo? Sto cercando idee per creare il mio.

Ad esempio, esiste un modo per caricare tutto questo una volta e quindi memorizzare nella cache i risultati in modo che il tuo sistema sappia come caricare i plugin in modalità lazy? In altre parole, il sistema carica un file di configurazione che specifica tutti gli eventi che il plug-in desidera collegare e quindi lo salva per le richieste future?

Se anche questo si comporta male, allora forse c'è una speciale struttura di file che potrebbe essere usata per fare ipotesi plausibili su quando alcuni plug-in non sono necessari per completare la richiesta.

Qualche idea?

Se qualcuno vuole un esempio del concetto di "plugin" puoi trovarne uno qui .

    
posta Xeoncross 20.01.2012 - 19:14
fonte

2 risposte

3

Xeoncross,

Questa domanda mi piace molto, quindi mi ci vorrà del tempo per rispondere. La prima cosa da sapere sui sistemi wordpress e CMS è che non sono costruiti per la velocità. Sono costruiti per essere facili da usare e facili da configurare. Le persone che normalmente usano un sito wordpress vogliono essere in grado di modificare facilmente il sito e lanciare nuove cose in esso o non sanno nemmeno come programmare. Quindi cose come la scansione di tutti i plugin che chiedono loro se hanno bisogno di fare qualcosa con questa pagina o no è un rischio di risorse che può essere preso per dare funzioni molto facili da usare al CMS

Se stai cercando di costruire un CMS e trovi un modo semplice per ottenere entrambi i mondi migliori, non ho trovato un modo per aggirare il problema senza un po 'di lavoro in più. Ecco un'idea che ho avuto tu un po ' Per ciascuno dei nuovi plugin che vengono aggiunti al sito quando vengono installati o attivati nel pannello di amministrazione, dovrebbero scrivere su un file che indica quando devono fare qualcosa e cosa devono fare. Quando vengono cancellati, eseguono la scansione delle voci e li eliminano. Il sistema di amministrazione dovrebbe anche avere un metodo di controllo per vedere se manca un plugin e cancellare le linee non più associate al sistema. In questo modo sarai in grado di ottenere facilità d'uso per semplici installazioni di clic, ma ti darà più velocità perché hai bisogno di scansionare e chiedere ad ogni plug-in se hanno bisogno di fare qualcosa a questo punto nel tempo avrebbero costruito un elenco che puoi cercare e da usare come guida.

    
risposta data 25.01.2012 - 17:32
fonte
0

Una domanda davvero buona!

Soprattutto quando si tratta di PHP poiché non abbiamo realmente una memoria condivisa e siamo legati al HTTP REQ < = > RESP "flusso".

... se non sbaglio, non esitare a correggermi se ...

Con PHP 5.3+, puoi sfruttare gli spazi dei nomi per ottimizzare le prestazioni "load" / "overhead" delle classi plugin (file).

Durante ogni richiesta PHP, la parola chiave "use" in combinazione con le dichiarazioni "namespace" corrette assicurerà che solo quelle classi siano "read / loaded / parsed" che sono richieste per la richiesta corrente.

Questo purtroppo non è stato fatto (per quanto ne so) con alcun tipo di ottimizzazione interna di PHP. (correggimi se sbaglio)

Quindi dipende dall'abilità di OODesign di non produrre classi monolitiche, perché ciò sfiderebbe qualsiasi ottimizzazione di caricamento della classe usando gli spazi dei nomi.

Inoltre puoi sfruttare i pacchetti .phar, che si adattano molto bene al concetto di namespace / parola chiave use.

Ref: PHP Namespaces

    
risposta data 28.11.2012 - 09:28
fonte