Uma dúvida recorrente de clientes que analisam o tamanho de seus executáveis é «por que meu EXE cresceu depois de adicionar o sgcWebSockets?». Parte desse crescimento vem de um arquivo de recurso que os pacotes de runtime do sgcWebSockets incorporam por padrão: sgcResources.RES. Ele contém o pacote de cliente JavaScript que um servidor sgcWebSockets pode entregar via HTTP a um navegador remoto — um recurso que a maioria das aplicações Delphi e C++Builder nunca utiliza.
A partir do sgcWebSockets 2026.6, você pode optar por não incluí-lo. O Setup da edição com código-fonte ganha uma nova caixa de seleção Include Resources na página de Opções; desmarcá-la remove a definição de uma nova diretiva de compilação SGC_RESOURCES em sgcVer.inc antes de os pacotes de runtime serem compilados. O recurso simplesmente nunca é vinculado — nem nas BPLs, nem nos EXEs dos seus clientes.
O que é removido
A diretiva {$R} no código-fonte do sgcWebSockets agora está envolvida por {$IFDEF SGC_RESOURCES}:
// sgcWebSocket_Protocol_Base_Server.pas
{$IFDEF SGC_RESOURCES}
{$R sgcResources.RES} // sgcWebSockets JS client bundle
{$ENDIF}
Quando SGC_RESOURCES não está definido, o linker não tem nada para incorporar. O recurso simplesmente desaparece de todos os executáveis que se vinculam ao código-fonte.
Quando você não precisa desse recurso
O pacote incorporado só é necessário quando um servidor sgcWebSockets realmente entrega o cliente JS empacotado a um navegador remoto. Isso acontece com componentes TsgcWSProtocol_JS_*, ou com qualquer servidor que responda a GET /sgcwebsockets.js retornando o JavaScript empacotado.
Não é necessário para:
- Clientes WebSocket em Delphi / C++Builder — os dados são consumidos em código nativo, nunca em um navegador.
- Servidores nativo para nativo — servidores cujos clientes também são aplicações Delphi / C++Builder.
- Back-ends WebSocket que servem JS personalizado — se você distribui seu próprio cliente JavaScript (seu próprio empacotador, sua própria CDN), o incorporado é peso morto.
- Servidores MQTT, AMQP, STOMP, WAMP, MCP e somente de protocolo — nenhum deles utiliza o cliente JS empacotado.
Como ativar a opção
O caminho mais limpo é pelo instalador. Ao executar o setup da edição com código-fonte do sgcWebSockets, pressione o botão Options e desmarque a nova entrada:
[ ] Include Resources
O instalador reescreverá a linha {$DEFINE SGC_RESOURCES} em sgcVer.inc para {.$DEFINE SGC_RESOURCES} antes de compilar qualquer pacote, de modo que as BPLs de design-time e runtime são produzidas sem o pacote incorporado.
Se você já tem o sgcWebSockets instalado e prefere fazer a alteração manualmente, abra <sgc-install-folder>\Source\sgcVer.inc, localize a linha:
{$DEFINE SGC_RESOURCES} { RESOURCES }
e comente com uma chave:
{.$DEFINE SGC_RESOURCES} { RESOURCES }
Em seguida, recompile os pacotes de runtime / design-time e sua aplicação. Acesse Project > Build All Projects na IDE, ou execute seu script de build habitual.
Medindo a economia
Se quiser confirmar a economia em seu próprio projeto, gere um mapa de linker detalhado antes e depois da alteração. Após recompilar, abra o arquivo *.map gerado e role até a seção de recursos — sgcResources.RES deverá ter sumido. O tamanho do módulo .text para sgcWebSocket_Protocol_Base_Server também diminui um pouco, porque o código auxiliar que carrega o recurso é removido por eliminação de código morto.
A economia exata depende da sua configuração de build e da edição do sgcWebSockets que você usa, mas em um build típico apenas de cliente o EXE encolhe perceptivelmente. Se você combinar essa opção com as chaves existentes em nível de edição ({$UNDEF SGC_EDT_ENT} para remover WebAuthn / HTTP2 / OAuth-server, ou substituir uses sgcWebSocket por uses sgcWebSocket_Client em código exclusivamente de cliente), a redução total pode ser substancial.
Compatibilidade retroativa
O padrão em sgcVer.inc permanece {$DEFINE SGC_RESOURCES}, de modo que projetos existentes continuam a compilar e executar exatamente como antes. A nova flag é estritamente opt-out: nada muda a menos que você desabilite explicitamente o recurso, seja pela caixa de seleção do instalador ou editando sgcVer.inc você mesmo.
Se você desativar SGC_RESOURCES e depois chamar um método de servidor que tente servir o cliente JS empacotado (por exemplo, um manipulador de resposta TsgcWSProtocol_JS_*), você receberá um EResNotFound limpo — um sinal evidente de que desligou algo de que realmente precisava. Basta reativar a definição e recompilar.
Disponibilidade
A nova opção está disponível no sgcWebSockets 2026.6, apenas nos instaladores da edição com código-fonte (Standard, Professional e Enterprise). O instalador Trial mantém o recurso incorporado para que as demonstrações do cliente JS empacotado funcionem prontamente.
Clientes com assinatura ativa podem obter o novo build na área do cliente. Dúvidas ou sugestões de mais opções para redução de tamanho? Entre em contato — você receberá resposta das pessoas que escreveram o código.
