1) Evite Operações Síncronas
Procure evitar o uso de operações síncronas entre o Viewer e o Servidor. Operações síncronas são todas aquelas que precisam de uma reposta da outra parte para que o fluxo normal de processamento seja continuado.
Um exemplo são scripts no Viewer que obtêm o valor de um tag do servidor através das funções Application.GetObject ou Application.GetValue. Enquanto o objeto ou valor requisitado pela função não for obtido (ou até que haja um erro por timeout, por exemplo), o fluxo de processamento não continuará.
O ideal nestes casos é mover os scripts para algum objeto no servidor (tags internos, objetos de dados, bibliotecas de dados – XObjects, etc.) e repassar para o Viewer somente o valor final do processamento, através de links (associações).
Outro tipo de operação síncrona que pode ser evitada é no objeto E3Chart, que possui duas formas de atualização de dados históricos: os métodos Queries.UpdateData e LoadData. O método LoadData só deve ser utilizado para a impressão de relatórios, pois é uma função síncrona, ou seja, ela só vai para a próxima linha do script após todos os dados da consulta terem chegado ao E3Chart, permitindo assim que o relatório seja impresso somente se o gráfico estiver completo.
A atualização de consultas em telas só deve ser feito com o método UpdateData, pois com ele o gráfico vai recebendo os dados conforme a consulta vai sendo completada, o que permite uma melhor navegação entre as telas para o usuário.
2) Utilize Operações Assíncronas
As operações assíncronas entre o Viewer e o Servidor são aquelas executadas somente sob demanda e que ocorrem em background, sem uma determinação explícita da aplicação. O maior exemplo são as associações ou links entre os objetos. O valor de um tag associado a um display na tela, por exemplo, só vai gerar comunicação no momento em que houver uma mudança no valor do tag no servidor. Ainda assim, essa operação ocorrerá de forma assíncrona, isto é, em um processo separado e em background, não apresentando portanto nenhum atraso de processamento para o Viewer ou incômodo para o usuário (isto é, a navegação de telas, digitação de valores, etc., ocorre de modo independente).
3) Evite tráfego desnecessário
Mesmo utilizando associações, procure evitar o tráfego de informações desnecessárias. Por exemplo: como ver um display em uma tela com o horário corrente? Existem várias maneiras de fazer a mesma coisa, mas o mais comum é criar um tag demo em uma pasta de dados no servidor, do tipo 3-CurrentTime, e associá-lo ao display. No entanto, o usuário tem a liberdade de escolher o período de atualização do tag, em milissegundos. Logo, um ajuste ruim neste tempo pode gerar centenas de comunicações por segundo para o Viewer.
Se não for necessário para o Viewer visualizar o horário exato do servidor, pode-se criar este mesmo tag de horário dentro do próprio Viewer, clicando com o botão direito do mouse sobre o objeto Viewer (no Studio) e escolhendo a opção Inserir. Desta forma, não haverá esse tráfego do Viewer para o Servidor.
Outro exemplo é a criação de telas do tipo “formulário”, que são usadas para preencher intervalos de pesquisa em banco de dados, ou para definir intervalos iniciais e finais de datas. Podemos usar diretamente as propriedades Value dos objetos de tela para armazenar esses valores, ao invés de associar tags (que estão no servidor) a esses objetos. No primeiro método, não há comunicação para o servidor, ou haverá somente no momento da consulta em si; já no segundo método, cada operação com os objetos exigirá uma comunicação com o servidor.
4) Evite o uso de arquivos de imagens
Prefira utilizar as ferramentas primitivas de desenho do E3 em vez de arquivos de imagens. Os arquivos de imagens, dependendo da rede, podem demorar para serem baixados; porém, uma vez já copiados para a máquina do Viewer, requerem apenas processamento local para abertura. Neste caso, existe também a questão de performance de desenho, que é bem superior para as primitivas do E3.
Se o uso de arquivos de imagem for inevitável, prefira os formatos compactados (.GIF, .JPG) em relação aos bitmaps (.BMP).
5) Consultas a Banco de Dados
As consultas aos bancos de dados devem se restringir ao necessário. Evite sempre possível consultas sem filtros, pois conforme o banco de dados vai crescendo, os dados vão aumentando signficativamente, chegando até mesmo a volumes impraticáveis para a infraestrutura de rede e para o próprio banco de dados e aplicação.
Evite também consultas que são feitas diversas vezes e retornam os mesmos dados (por exemplo, desabilite atualizações automáticas do E3Browser), e faça consultas somente após a solicitação do usuário.
6) Use Bibliotecas
Procure utilizar as bibliotecas do E3 para objetos repetidos em sua aplicação. As vantagens neste caso são muitas, desde a diminuição do tamanho das telas para download até a melhora do planejamento e manutenção do sistema no futuro.