Aplicaciones segmentadas
Visual Basic le permite plantear la arquitectura de su aplicación de nuevas
maneras. En lugar de un único ejecutable monolítico, puede escribir una
aplicación que consista en un núcleo ejecutable inicial soportado por varios
componentes ActiveX. Esta técnica ofrece importantes ventajas de optimización:
- Los componentes se cargan bajo demanda y se pueden descargar cuando no se
necesitan. - Los componentes externos pueden ser ejecutables de 32 bits en
Windows 95 o en Windows NT, incluso aunque otras partes de la aplicación
sean componentes de 16 bits. - Los componentes remotos pueden usar los recursos de otras máquinas de la
red.
Además, los componentes se pueden depurar de forma independiente y se pueden
volver a usar en otras aplicaciones. Puede que esto no aumente la velocidad de
la aplicación, pero puede aumentar la velocidad al crear la siguiente.
Para determinar cómo optimizar mejor la aplicación mediante su segmentación,
debe evaluar los tipos de componentes que puede crear y cómo encajan con la
aplicación. Hay tres tipos de componentes que puede crear con la Edición
Profesional o la Edición Empresarial de Visual Basic:
- Externos
- Internos
- Remotos
Estos tres tipos no son exclusivos: puede usar los tres en una misma
aplicación. Pero desde el punto de vista de la optimización de la aplicación,
cada uno de ellos tiene características muy diferentes.
Componentes externos
Los componentes externos son programas ejecutables que ofrecen sus servicios
a otros programas. Como todos los ejecutables, se inician y se ejecutan con sus
propias pilas dentro de sus propios espacios de proceso; de esta forma, cuando
una aplicación que actúa como cliente utiliza uno de los objetos proporcionados
por un componente, la operación pasa del espacio de proceso del cliente al del
componente, de ahí su nombre. Los componentes externos ofrecen características
muy valiosas si se comparan con los otros tipos:
- Operación asíncrona ("subprocesos").
- Los errores no interceptados en el componente no provocan la caída de la
aplicación cliente. - Interoperabilidad entre aplicaciones de 16 bits y 32 bits.
De estas características, la primera y la última tienen especial interés
desde el punto de vista de la optimización.
Puesto que un componente externo es un programa independiente, puede operar
de forma asíncrona con el componente que actúa como cliente. Tiene un
"subproceso" independiente que se ejecuta simultáneamente con el programa
cliente (técnicamente hablando, no se trata de un subproceso, sino de un proceso
independiente; sin embargo, conceptualmente son equivalentes). Los dos programas
pueden comunicarse y compartir objetos, pero se ejecutan de forma independiente.
Esto es especialmente útil cuando la aplicación necesita realizar alguna
operación de larga duración. El cliente puede llamar al componente para que
realice la operación y después continuar atendiendo al usuario.
Incluso si la aplicación va a ejecutarse en un sistema de 32 bits, es posible
que no pueda pasarla a 32 bits de forma inmediata si utiliza aplicaciones o
componentes heredados de 16 bits. Sin embargo, si segmenta la aplicación
mediante componentes externos, puede mezclar y asociar componentes de 16 bits y
de 32 bits. Esto le permite aprovechar cada vez más las características y el
rendimiento de 32 bits, al tiempo que conserva los componentes de 16 bits que ya
tiene.
Pese a toda su eficacia, los componentes externos tienen un notable
inconveniente: su poco rendimiento. Se manifiesta de dos maneras:
- Velocidad inicial
- Carga de trabajo de la llamada externa
Un componente externo es un ejecutable creado con Visual Basic, de modo que
los problemas relacionados con su inicio son los mismos que se presentan con
cualquier aplicación. Lo bueno es que, si va a llamar a un componente externo
escrito en Visual Basic desde otro programa de Visual Basic, casi todos los
archivos DLL ya estarán cargados. Esto reduce en gran medida el tiempo de inicio
del componente. Muchos componentes son más pequeños que la media de las
aplicaciones de Visual Basic y tienen pocos o ningún formulario que cargar, lo
que de nuevo mejora su tiempo de carga. No obstante, los componentes externos
siempre se cargarán con mayor lentitud que los componentes internos.
Una vez en ejecución, el componente externo tiene las limitaciones de su
propia naturaleza: cada interacción con el componente es una llamada externa.
Los pasos entre procesos consumen muchos ciclos de CPU. De este modo, las
referencias a los objetos del componente externo son mucho más costosas que sus
equivalentes a los objetos de la misma aplicación cliente o de un componente
interno. Reducir el número de llamadas externas en el código puede
reducir el impacto de la carga de trabajo de estas llamadas.
Componentes internos
Los componentes internos ofrecen sus servicios a otros programas que están
dentro de su mismo espacio de proceso. Comparados con los componentes externos,
los componentes internos ofrecen dos ventajas:
- Menor tiempo de carga
- No hacen llamadas externas
Con los componentes internos no necesita crear un nuevo proceso ni cargar los
archivos DLL en tiempo de ejecución. Por esto, los componentes internos son
considerablemente más rápidos en su carga si se comparan con los componentes
externos equivalentes.
Al ser internos, no se producen llamadas externas cuando se hace referencia a
los métodos o las propiedades de un objeto proporcionado por el componente. Los
objetos del componente operan con la misma eficacia que los objetos de la
aplicación cliente propiamente dicha.
Componentes remotos
La Edición Empresarial de Visual Basic le permite crear componentes remotos
que se ejecutan en una máquina diferente en cualquier parte de la red. Aunque
los retrasos debidos a la red supondrán inevitablemente una disminución del
rendimiento de la aplicación, pueden compensar por el uso de los recursos de las
CPU adicionales. Esto es especialmente cierto cuando trabaja con un componente
remoto que opera sobre datos locales de la máquina que contiene el componente.
Puesto que los datos tendrán que transferirse a través de la red de todas
maneras, un componente que opera sobre ellos de forma local y sólo devuelve a
través de la red los resultados puede ser realmente más eficaz.
Por ejemplo, puede crear un objeto en un componente que busca los archivos
que cumplen unos criterios especificados dentro del disco duro local. Si hace
que el componente sea remoto y coloca una copia del mismo en todas las máquinas
de la red, puede escribir un programa de búsqueda de archivos distribuidos que
explore todos los componentes de la red en paralelo mediante los recursos de
todas las CPU.