Slankere sgcWebSockets builds — sluit de ingebedde JS-resource uit

· Functies

Een terugkerende vraag van klanten die hun executables profileren is «waarom is mijn EXE groter geworden nadat ik sgcWebSockets heb toegevoegd?». Een deel van die groei komt van een resourcebestand dat de sgcWebSockets runtime-packages standaard insluiten: sgcResources.RES. Dit bestand bevat de JavaScript-clientbundel die een sgcWebSockets-server via HTTP aan een externe browser kan aanleveren — een functie die de meeste Delphi- en C++Builder-applicaties nooit gebruiken.

Vanaf sgcWebSockets 2026.6 kunt u hiervoor kiezen. De Setup van de broncode-editie krijgt een nieuw vinkje Include Resources op de pagina Options; door dit uit te vinken wordt een nieuw SGC_RESOURCES-compilerdirectief in sgcVer.inc ongedefinieerd voordat de runtime-packages worden gecompileerd. De resource wordt simpelweg nooit gelinkt — niet in de BPL's en niet in de EXE's van uw klanten.

Wat wordt verwijderd

De {$R}-directive in de sgcWebSockets-broncode is nu omsloten door {$IFDEF SGC_RESOURCES}:

// sgcWebSocket_Protocol_Base_Server.pas
{$IFDEF SGC_RESOURCES}
{$R sgcResources.RES}      // sgcWebSockets JS client bundle
{$ENDIF}

Wanneer SGC_RESOURCES niet gedefinieerd is, heeft de linker niets om in te bedden. De resource verdwijnt simpelweg uit elke executable die tegen de broncode linkt.

Wanneer u deze resource niet nodig hebt

De ingebedde bundel is alleen nodig wanneer een sgcWebSockets-server de gebundelde JS-client daadwerkelijk aan een externe browser uitlevert. Dat gebeurt bij TsgcWSProtocol_JS_*-componenten, of bij elke server die op GET /sgcwebsockets.js reageert door de gebundelde JavaScript terug te sturen.

Hij is niet nodig voor:

Hoe schakelt u dit in

De schoonste weg is het installatieprogramma. Wanneer u de Setup van de broncode-editie van sgcWebSockets uitvoert, klik dan op de knop Options en vink de nieuwe regel uit:

[ ] Include Resources

Het installatieprogramma herschrijft de regel {$DEFINE SGC_RESOURCES} in sgcVer.inc naar {.$DEFINE SGC_RESOURCES} voordat er een package wordt gecompileerd, zodat de design-time- en runtime-BPL's zonder de ingebedde bundel worden geproduceerd.

Als sgcWebSockets al geïnstalleerd is en u de wijziging liever handmatig doorvoert, open dan <sgc-install-folder>\Source\sgcVer.inc en zoek de regel:

{$DEFINE SGC_RESOURCES} { RESOURCES }

en plaats een punt achter de openende accolade:

{.$DEFINE SGC_RESOURCES} { RESOURCES }

Bouw vervolgens de runtime- / design-time-packages en uw applicatie opnieuw. Ga naar Project > Build All Projects in de IDE, of voer uw gebruikelijke buildscript uit.

De besparing meten

Wilt u de besparing in uw eigen project bevestigen, genereer dan voor en na de wijziging een gedetailleerde linker-map. Open na het opnieuw bouwen het gegenereerde *.map-bestand en scroll naar de resource-sectie — sgcResources.RES moet verdwenen zijn. Ook de .text-modulegrootte voor sgcWebSocket_Protocol_Base_Server krimpt licht, omdat de helpercode die de resource laadt via dead-code-eliminatie verdwijnt.

De exacte besparing hangt af van uw buildconfiguratie en de gebruikte sgcWebSockets-editie, maar bij een typische client-only build krimpt de EXE merkbaar. Combineert u deze optie met de bestaande editie-schakelaars ({$UNDEF SGC_EDT_ENT} om WebAuthn / HTTP2 / OAuth-server uit te schakelen, of uses sgcWebSocket vervangen door uses sgcWebSocket_Client in client-only code), dan kan de totale reductie aanzienlijk zijn.

Achterwaartse compatibiliteit

De standaardwaarde in sgcVer.inc blijft {$DEFINE SGC_RESOURCES}, zodat bestaande projecten exact zoals voorheen blijven compileren en draaien. De nieuwe vlag is strikt opt-out: er verandert niets tenzij u de resource expliciet uitschakelt, hetzij via het vinkje in het installatieprogramma, hetzij door sgcVer.inc zelf aan te passen.

Schakelt u SGC_RESOURCES uit en roept u vervolgens een servermethode aan die de gebundelde JS-client probeert te leveren (bijvoorbeeld een TsgcWSProtocol_JS_*-responsehandler), dan krijgt u een nette EResNotFound — een duidelijk signaal dat u iets hebt uitgeschakeld dat u eigenlijk nodig had. Schakel de define gewoon weer in en bouw opnieuw.

Beschikbaarheid

De nieuwe optie verschijnt in sgcWebSockets 2026.6, alleen in de installers van de broncode-editie (Standard, Professional en Enterprise). De Trial-installer houdt de resource ingebed, zodat de demo's met de gebundelde JS-client meteen werken.

Klanten met een actief abonnement kunnen de nieuwe build ophalen in de klantenzone. Vragen of suggesties voor verdere schakelaars om de omvang verder te beperken? Neem contact op — u krijgt antwoord van de mensen die de code hebben geschreven.