sgcHTML vs UniGUI, TMS WEB Core e IntraWeb: Scegliere il Framework Web per Delphi

· Componenti

Quando un team Delphi deve esporre un'applicazione business nel browser, la prima domanda è sempre la stessa: quale framework web? Nel 2026 esistono cinque opzioni native per Delphi: IntraWeb, UniGUI, TMS WEB Core, TMS XData e sgcHTML. Ognuna affronta il problema in modo diverso e brilla in situazioni differenti. Questo articolo analizza ciascuna onestamente, quindi spiega dove sgcHTML offre un vantaggio distintivo.

IntraWeb — il framework web Delphi originale

IntraWeb esiste dal 2001. Il suo modello è semplice: form VCL renderizzati lato server come HTML. Se conosci i form Delphi, puoi costruire una pagina IntraWeb. Lo stato risiede sul server; il browser è essenzialmente un livello di visualizzazione passivo. Per strumenti interni con un numero modesto di utenti concorrenti questo approccio funziona ancora.

Dove IntraWeb incontra difficoltà è nella tematizzazione e nel layout moderno. Genera HTML e CSS propri, che precedono Bootstrap e flexbox. Ottenere una pagina responsive e mobile-friendly richiede un notevole lavoro di sovrascrittura CSS. Il markup generato è verboso e difficile da integrare con i design system moderni. IntraWeb è anche completamente stateful: ogni utente mantiene un oggetto di sessione lato server per tutta la durata della visita, il che limita la scalabilità orizzontale.

UniGUI — maturo, completo di funzionalità, stateful

UniGUI è il framework web Delphi più completo di funzionalità. La sua palette di componenti è enorme (griglie, grafici, alberi, mappe, upload di file, editor di testo ricco, supporto touch) e il suo sistema di tematizzazione è maturo. Internamente utilizza Sencha ExtJS, una potente libreria di componenti JavaScript che produce interfacce rifinite vicine alla qualità desktop nativa.

Il compromesso è la complessità e l'architettura stateful. Le sessioni UniGUI mantengono l'intero stato dei componenti sul server. Un'applicazione con molti utenti concorrenti richiede memoria significativa e una gestione attenta delle sessioni. Il livello ExtJS, pur essendo potente, non è Bootstrap: ogni nuovo assunto che conosce Bootstrap deve imparare un vocabolario parallelo. Le licenze sono per sviluppatore e per server, e la componente per server del costo di licenza è rilevante per le distribuzioni cloud.

TMS WEB Core — Pascal lato client compilato in JavaScript

TMS WEB Core adotta l'approccio opposto: compila la tua applicazione Object Pascal in JavaScript usando un compilatore compatibile con WebAssembly. Il risultato viene eseguito interamente nel browser; gli eventi dei form Delphi si attivano come eventi JavaScript. L'interfaccia utilizza Bootstrap o Material Design, e TMS WEB Core include un set crescente di componenti visivi.

È una tecnologia genuinamente intelligente e funziona bene per alcuni casi d'uso, in particolare applicazioni browser autonome che necessitano di capacità offline o di un carico server molto basso. La limitazione è il modello di distribuzione. L'output compilato è un insieme di file JavaScript statici e risorse che devono essere costruiti, versionati e serviti. Aggiungere una funzionalità significa ricompilare e ridistribuire il bundle client. La logica di business che prima risiedeva in sicurezza sul server ora viene eseguita nel browser, il che solleva questioni di sicurezza per i calcoli sensibili. Integrare un componente lato server Delphi esistente (un TsgcWebSocketClient, una connessione FireDAC) richiede un lavoro architetturale, perché il JavaScript compilato non può chiamare direttamente le unit Delphi native.

TMS XData — back end REST, non un framework UI web

TMS XData merita di essere menzionato perché viene spesso confrontato con i framework UI web, ma non lo è. XData genera un'API REST da classi di servizio Delphi usando OpenAPI 3.0 e JSON. Il front end deve essere costruito separatamente — in TMS WEB Core, React, Angular o qualsiasi tecnologia che parla HTTP. XData è eccellente in ciò che fa. Non elimina però la necessità di una tecnologia front-end separata quando si vuole un'interfaccia browser.

sgcHTML — componenti lato server su Bootstrap 5 standard

sgcHTML occupa una posizione diversa da tutte le precedenti. È una libreria di componenti lato server il cui output è HTML Bootstrap 5 standard. I componenti stessi sono classi Delphi (TsgcHTMLComponent_Chart, TsgcHTMLComponent_DataTable, ecc.); li si configura tramite proprietà e si legge una stringa HTML. Quella stringa va nella risposta HTTP. Il browser la renderizza usando Bootstrap. htmx (una libreria da 14 KB, senza step di build) gestisce l'interattività: click e invii di form tornano al gestore Delphi, che risponde con un frammento HTML, e htmx sostituisce la sezione rilevante della pagina.

L'architettura è stateless. Ogni richiesta costruisce ciò di cui ha bisogno, restituisce l'HTML e termina. Non c'è nessun albero di componenti per sessione da mantenere. La scalabilità orizzontale è banale: metti un load balancer davanti a due istanze dello stesso .exe.

Confronto affiancato

Funzionalità IntraWeb UniGUI TMS WEB Core sgcHTML
Architettura Form lato server stateful Sessione ExtJS stateful Pascal lato client→JS HTML lato server stateless
Markup di output HTML + CSS proprietari JSON/HTML ExtJS Bootstrap standard Bootstrap 5 standard
Interattività Ricarica pagina intera o AJAX AJAX ExtJS Viene eseguito nel browser Frammenti htmx + WebSocket
Push WebSocket in tempo reale No (add-on) Limitato Tramite API WebSocket JS Sì — di prima classe (sgcWebSockets)
Scalabilità Limitata dallo stato di sessione Limitata dallo stato di sessione Stateless (file statici) Stateless, orizzontale
JavaScript da scrivere Nessuno Minimo Nessuno (compilato da Pascal) Nessuno
npm / Node.js richiesto No No Sì (step di build) No
Distribuzione singolo binario No (bundle JS + risorse)
Binding DataSet Tramite bridge JS Sì (TDataSet/TDataSource diretto)
Numero di componenti UI ~40 80+ 50+ 60+
Mobile/responsive Parziale Sì (ExtJS Touch) Sì (Bootstrap) Sì (Bootstrap 5)
Edizione .NET No No No Sì (.NET 6+)

Dove sgcHTML ha un vantaggio evidente

Dashboard in tempo reale. Poiché sgcHTML è costruito su sgcWebSockets, lo stesso server che serve le pagine HTML gestisce anche le connessioni WebSocket. Un aggiornamento del prezzo di un'azione, una nuova lettura di un sensore o la conclusione di un ciclo di produzione possono inviare un frammento HTML a ogni scheda browser connessa con una singola chiamata Broadcast. Nessun polling, nessuna infrastruttura push separata, nessuna licenza aggiuntiva. IntraWeb e UniGUI hanno entrambi un supporto WebSocket limitato che richiede lavoro di integrazione extra. TMS WEB Core può utilizzare l'API WebSocket nativa del browser ma richiede logica JavaScript lato client per gestire i messaggi in arrivo.

Markup standard senza overhead di personalizzazione. Poiché l'output è HTML Bootstrap 5, qualsiasi designer che conosce Bootstrap può applicare stili. I temi sono temi Bootstrap standard: esistono centinaia di temi gratuiti e a pagamento che si applicano immediatamente. IntraWeb e UniGUI generano markup specifici del framework che richiedono l'apprendimento di un sistema di stili separato.

Stateless e scalabile orizzontalmente. Ogni richiesta sgcHTML è indipendente. Non esiste nessun oggetto di sessione per utente sul server. Due istanze dello stesso eseguibile bilanciate dal carico gestiscono le richieste in modo intercambiabile. IntraWeb e UniGUI devono instradare le richieste verso l'istanza server specifica che detiene la sessione, complicando le distribuzioni cloud.

Distribuzione con singolo eseguibile. Bootstrap CSS, Chart.js e htmx sono risorse incorporate nel binario Delphi. Distribuire sgcHTML significa copiare un solo .exe. TMS WEB Core produce un bundle JavaScript e un insieme di risorse che devono essere versionati e serviti separatamente.

Nessuna catena di build. Non c'è npm, nessun webpack, nessun Babel e nessun Node.js. Compila il tuo progetto Delphi e distribuisci. Questo è enormemente importante negli ambienti regolamentati e nelle distribuzioni on-premises dove installare una toolchain Node.js richiede l'approvazione dell'IT.

Confronto diretto del codice: una griglia dati

Per rendere la differenza concreta, ecco come renderizzare una griglia dati ricercabile e paginata da una query FireDAC, in sgcHTML:

uses
  sgcHTML_Component_DataTable;

var
  oTable: TsgcHTMLComponent_DataTable;
begin
  oTable := TsgcHTMLComponent_DataTable.Create(nil);
  oTable.PageBuilder  := oPage.PageBuilder;
  oTable.Section      := 'data';
  oTable.Title        := 'Customers';
  oTable.ShowSearch   := True;
  oTable.ShowExport   := True;
  oTable.LoadFromDataSet(fdqCustomers, 25); // 25 rows per page
  // Read oTable.HTML and include it in your response
end;

Il risultato è una tabella Bootstrap responsive, ricercabile e paginata con indicatori di ordinamento, una casella di ricerca e un pulsante di esportazione. Il browser la renderizza senza ulteriori round-trip al server per la pagina iniziale. Il filtraggio e la paginazione usano htmx per sostituire solo il frammento della tabella, non l'intera pagina.

Quando scegliere le alternative

sgcHTML non è sempre la scelta giusta. Se disponi di una grande applicazione IntraWeb o UniGUI esistente con centinaia di form e un sistema di tematizzazione consolidato, migrarla ha poco senso. UniGUI è la scelta migliore quando hai bisogno di capacità di griglia avanzate (colonne bloccate, editor di celle, raggruppamento di righe, pivot) che eguaglino o superino Excel, oppure quando vuoi la raffinatezza di ExtJS per uno strumento back-office destinato a utenti esperti. TMS WEB Core è la scelta giusta quando hai bisogno di un'applicazione che funzioni offline nel browser senza alcun server, o quando vuoi distribuire una single-page application come file statici tramite una CDN.

sgcHTML è la scelta più forte quando:

Provare sgcHTML

Una versione di prova gratuita con tutti i 60+ componenti e senza restrizioni di funzionalità è disponibile su esegece.com/products/sgchtml/download. Il download include quattro applicazioni demo funzionanti (ERP, Admin Console, Live Monitor e Customer Portal) che mostrano la palette dei componenti in scenari realistici.

Domande o un confronto con un progetto esistente specifico? Contattaci. Riceverai una risposta direttamente dalle persone che hanno scritto il codice.