Una pregunta recurrente de los clientes que analizan sus ejecutables es «¿por qué mi EXE creció tras añadir sgcWebSockets?». Parte de ese crecimiento proviene de un archivo de recursos que los paquetes en tiempo de ejecución de sgcWebSockets incrustan de forma predeterminada: sgcResources.RES. Contiene el paquete de cliente JavaScript que un servidor sgcWebSockets puede entregar por HTTP a un navegador remoto — una función que la mayoría de las aplicaciones Delphi y C++Builder nunca utilizan.
A partir de sgcWebSockets 2026.6, puede optar por no incluirlo. El instalador de la edición con código fuente incorpora una nueva casilla Include Resources en la página de Opciones; al desmarcarla se elimina la definición de una nueva directiva del compilador SGC_RESOURCES en sgcVer.inc antes de que se compilen los paquetes en tiempo de ejecución. El recurso simplemente nunca se enlaza — ni en los BPL, ni en los EXE de sus clientes.
Qué se elimina
La directiva {$R} en el código fuente de sgcWebSockets ahora está envuelta en {$IFDEF SGC_RESOURCES}:
// sgcWebSocket_Protocol_Base_Server.pas
{$IFDEF SGC_RESOURCES}
{$R sgcResources.RES} // sgcWebSockets JS client bundle
{$ENDIF}
Cuando SGC_RESOURCES no está definida, el enlazador no tiene nada que incrustar. El recurso simplemente desaparece de cada ejecutable que se enlaza contra el código fuente.
Cuando no necesita este recurso
El paquete integrado solo es necesario cuando un servidor sgcWebSockets entrega realmente el cliente JS incluido a un navegador remoto. Esto ocurre con los componentes TsgcWSProtocol_JS_*, o cualquier servidor que responda a GET /sgcwebsockets.js devolviendo el JavaScript incluido.
No es necesario para:
- Clientes WebSocket en Delphi / C++Builder — los datos se consumen en código nativo, nunca en un navegador.
- Servidores de nativo a nativo — servidores cuyos clientes también son aplicaciones Delphi / C++Builder.
- Back-ends WebSocket que sirven JS personalizado — si distribuye su propio cliente JavaScript (su propio bundler, su propio CDN), el integrado es peso muerto.
- Servidores MQTT, AMQP, STOMP, WAMP, MCP y solo de protocolo — ninguno utiliza el cliente JS incluido.
Cómo activarlo
La vía más limpia es el instalador. Cuando ejecute el instalador de la edición con código fuente de sgcWebSockets, pulse el botón Options y desmarque la nueva entrada:
[ ] Include Resources
El instalador reescribirá la línea {$DEFINE SGC_RESOURCES} en sgcVer.inc a {.$DEFINE SGC_RESOURCES} antes de compilar ningún paquete, de modo que los BPL en tiempo de diseño y de ejecución se producen sin el paquete integrado.
Si ya tiene sgcWebSockets instalado y prefiere realizar el cambio manualmente, abra <sgc-install-folder>\Source\sgcVer.inc, busque la línea:
{$DEFINE SGC_RESOURCES} { RESOURCES }
y comente la llave:
{.$DEFINE SGC_RESOURCES} { RESOURCES }
Luego reconstruya los paquetes en tiempo de ejecución / diseño y su aplicación. Acceda a Project > Build All Projects en el IDE, o ejecute su script de compilación habitual.
Medir el ahorro
Si quiere confirmar el ahorro en su propio proyecto, genere un mapa detallado del enlazador antes y después del cambio. Tras la reconstrucción, abra el archivo *.map generado y desplace hasta la sección de recursos — sgcResources.RES debería haber desaparecido. El tamaño del módulo .text de sgcWebSocket_Protocol_Base_Server también disminuye ligeramente, porque el código auxiliar que carga el recurso se elimina por eliminación de código muerto.
El ahorro exacto depende de su configuración de compilación y de la edición de sgcWebSockets que utilice, pero en una compilación típica de solo cliente el EXE se reduce de forma notable. Si combina esta opción con los conmutadores existentes a nivel de edición ({$UNDEF SGC_EDT_ENT} para eliminar WebAuthn / HTTP2 / servidor OAuth, o eliminar uses sgcWebSocket en favor de uses sgcWebSocket_Client en código solo de cliente), la reducción total puede ser considerable.
Compatibilidad con versiones anteriores
El valor predeterminado en sgcVer.inc sigue siendo {$DEFINE SGC_RESOURCES}, de modo que los proyectos existentes siguen compilando y ejecutándose exactamente igual que antes. La nueva opción es estrictamente de exclusión voluntaria: nada cambia a menos que desactive explícitamente el recurso, ya sea mediante la casilla del instalador o editando sgcVer.inc usted mismo.
Si desactiva SGC_RESOURCES y después llama a un método del servidor que intenta servir el cliente JS incluido (por ejemplo, un manejador de respuesta TsgcWSProtocol_JS_*), obtendrá un EResNotFound claro — una señal evidente de que ha desactivado algo que realmente necesitaba. Basta con volver a habilitar la directiva y recompilar.
Disponibilidad
La nueva opción se incluye en sgcWebSockets 2026.6, solo en los instaladores de la edición con código fuente (Standard, Professional y Enterprise). El instalador de prueba (Trial) mantiene el recurso integrado para que las demostraciones del cliente JS incluido funcionen de forma inmediata.
Los clientes con una suscripción activa pueden obtener la nueva compilación desde el área de cliente. ¿Preguntas o sugerencias para más conmutadores de reducción de tamaño? Póngase en contacto — recibirá una respuesta de las personas que escribieron el código.
