Nel precedente articolo, abbiamo introdotto Boson PHP, una potente tecnologia che permette di creare applicativi eseguibili sfruttanto il linguaggio PHP. In questo capitolo finale entriamo nel cuore operativo di Boson PHP. Costruiremo una mini-app reale, analizzeremo le implicazioni sulle performance, confronteremo Boson con Electron, Tauri e Neutralino e chiuderemo con una guida di best practices pensata per contesti enterprise.
Mini-app completa: dashboard reattiva
L’obiettivo è creare una semplice applicazione desktop con:
- un contatore reattivo
- un pulsante di aggiornamento
- logica completamente in PHP
HTML dell’applicazione
<dashboard-app></dashboard-app>
Il trattino non è una convenzione facoltativa, è un requisito tecnico obbligatorio dei Custom Elements (Web Components), e Boson segue rigorosamente lo standard. I Web Components si basano sullo standard ufficiale HTML Custom Elements (W3C / WHATWG). Il trattino serve a:
- Evitare collisioni future, perchè lo standard HTML potrebbe introdurre domani
<dashboard>, mentre<dashboard-app>non entrerà mai in conflitto - Permettere al browser di distinguere elementi nativi (
<div>,<button>) da elementi personalizzati - Garantire il parsing corretto del DOM
Il browser rifiuta la registrazione di un custom element senza trattino.
Bootstrap PHP
use Boson\Application;
$app = new Application();
$app->webview->components->add(
'dashboard-app',
App\Componenti\Dashboard::class
);
$app->webview->html = '<dashboard-app></dashboard-app>';
$app->run();
Componente Dashboard
use Boson\WebView\Api\WebComponents\ReactiveContext;
class Dashboard implements HasMethodsInterface
{
private int $contatore = 0;
public function __construct(private ReactiveContext $ctx)
{
$this->render();
}
private function render(): void
{
$this->ctx->content->html = "
<h2>Dashboard</h2>
<p>Valore: {$this->contatore}</p>
<button onclick='this.incrementa()'>Incrementa</button>
";
}
public function incrementa(): void
{
$this->contatore++;
$this->render();
}
public function onMethodCalled(string $metodo, array $argomenti = []): mixed
{
if ($metodo === 'incrementa') {
$this->incrementa();
}
return null;
}
public static function getMethodNames(): array
{
return ['incrementa'];
}
}
Questa mini-app dimostra chiaramente che:
- non serve JavaScript applicativo
- lo stato vive in PHP
- il DOM viene aggiornato in modo diretto
Deployment
Boson NON funziona come un’app web. Nel deployment PHP viene incluso nell’app<, il codice viene impacchettato e la WebView è quella nativa del sistema. Infinenon esiste runtime esterno richiesto. Il risultato è simile a un’app nativa tradizionale.
Struttura consigliata del progetto prima del deployment
/app /Componenti /Servizi /public index.html style.css /main.php /composer.json
Regola fondamentale: nessun path assoluto. Usa sempre percorsi relativi.
Step 1 – Preparazione dell’applicazione
Il file main.php deve essere l’unico punto di avvio:
use Boson\Application; $app = new Application(); $app->webview->html = file_get_contents(__DIR__ . '/public/index.html'); $app->run();
Prima del deployment, togli o commenta tutte le righe che facciano riferimento a operazioni di debug:
var_dump,echo,print_r- log verbosi
- gestisci le eccezioni
Step 2 – Gestione delle dipendenze
Installa tutte le dipendenze con Composer:
composer install --no-dev --optimize-autoloader
Questo riduce la dimensione finale e migliora le performance.
Step 3 – Build dell’eseguibile
Boson fornisce strumenti per il packaging dell’applicazione.
Concetto di build
- PHP viene incluso
- il codice viene compilato/impacchettato
- le risorse statiche vengono inglobate (motivo per cui non è permesso caricare file esterni via HTTP, ma inglobare sempre tutte le risorse).
boson build
Questo comando genera una directory di output contenente l’eseguibile.
Step 4 – Output del build
Dopo il build, avrai una struttura simile:
/dist myapp.exe (Windows) myapp (Linux) myapp.app (macOS)
Ogni file è un’applicazione completa e autonoma.
Deployment su Windows
Il file generato è un .exe standard eseguibile, quindi non è richiesta nessuna installazione. E’ altresi possibile creare un installer come ad esempio (NSIS, Inno Setup).
Deployment su Linux
In questo caso, l’eseguibile è un ELF (Executable and Linkable Format), un formato standard per file binari usato su Linux e altri sistemi operativi Unix-like. E’ richiesta la disponibilità nel sistema della WebView e devono essere impostati i permessi di esecuzione, tramite il comando
chmod +x myapp
Deployment su macOS
Il formato è .app. E’ richiesta la notarizzazione Apple e la firma obbligatoria per distribuzione pubblica
Errori comuni da evitare
- Usare path assoluti
- Dipendere da PHP esterno
- Caricare risorse remote
- Bloccare il thread UI
Performance: come evitare problemi
Boson è estremamente veloce, ma va usato correttamente.
Errori comuni
- Aggiornare l’intero HTML ad ogni evento
- Eseguire query lente in risposta a eventi UI
- Bloccare il thread principale con loop pesanti
Buone pratiche di performance
- Usa aggiornamenti incrementali del DOM
- Cache dei dati in memoria
- Servizi separati per logica pesante
Esempio di caching
class CacheDati
{
private array $cache = [];
public function get(string $chiave, callable $loader)
{
if (!isset($this->cache[$chiave])) {
$this->cache[$chiave] = $loader();
}
return $this->cache[$chiave];
}
}
Confronto tecnico: Boson vs Electron vs Tauri vs Neutralino
| Caratteristica | Boson | Electron | Tauri | Neutralino |
|---|---|---|---|---|
| Linguaggio backend | PHP | Node.js | Rust | Vari |
| Processi | Singolo | Multipli | Minimali | Minimali |
| Bridge JS | Nativo | IPC | IPC | IPC |
| Dimensione app | Molto ridotta | Molto grande | Ridotta | Ridotta |
| Curva di apprendimento | Bassa (per PHP dev) | Media | Alta | Media |
Boson non è un clone di Electron: è un paradigma diverso, più vicino a un runtime applicativo che a un browser incapsulato.
Best practices enterprise
1. Separazione delle responsabilità
- Componenti = UI + bridge
- Servizi = logica
- Repository = dati
2. Dependency Injection
class ReportComponent
{
public function __construct(
private GeneratoreReport $report
) {}
}
3. Stato centralizzato
class StatoGlobale
{
private array $stato = [];
public function set(string $k, mixed $v): void
{
$this->stato[$k] = $v;
}
public function get(string $k): mixed
{
return $this->stato[$k] ?? null;
}
}
4. Sicurezza
- Esporre solo i metodi necessari
- Validare sempre gli input JS
- Non fidarsi del DOM
5. Scalabilità del progetto
- Namespace chiari
- Registrazione automatica dei componenti
- Test della logica fuori dalla UI
Quando Boson è la scelta giusta
- Tool aziendali interni
- Client desktop per API
- Dashboard locali
- Applicazioni multipiattaforma leggere
Conclusione finale
Boson PHP introduce un modello di sviluppo radicalmente nuovo per il mondo PHP. Non simula il web: lo supera. La comunicazione diretta tra PHP e DOM, l’assenza di rete e la semplicità architetturale lo rendono una scelta eccellente per applicazioni desktop moderne, robuste e manutenibili. Se usato correttamente, Boson non è solo un framework: è un runtime applicativo.



