Versão 22
Novidades
Otimização do consumo de memória do SimpleLayout
A exibição de relatórios SimpleLayout
com grupos colapsáveis, recurso habilitado pela
propriedade
SimpleLayout.prototype.groupExpansionLevel
,
poderia provocar uma alocação excessiva de memória ou erros de “Out of Memory” caso o relatório
contivesse uma quantidade elevada de registros.
Essa era uma restrição conhecida e para contornar essa limitação de uso alguns relatórios disponibilizam na grade de variáveis a opção “Nível em árvore”, permitindo desligar essa funcionalidade caso fosse necessário exibir uma quantidade elevada de dados.
Essa abordagem era problemática, pois a má utilização do relatório poderia provocar um
consumo elevado de recursos, afetando outros usuários no mesmo servidor. Para evitar
problemas dessa natureza, o SimpleLayout
foi revisto para utilizar uma estrutura interna mais
eficiente que reduz em aproximadamente 90% o consumo de memória na construção desse tipo de
relatório. Em um caso atípico de uso do relatório
Admin > Auditoria > Consultar Alterações
, foi observada uma redução de aproximadamente 1.5 GB na
memória alocada durante a execução do relatório.
É importante observar que apesar do sistema tratar melhor a geração de relatórios com alto volume de dados, o navegador Web ainda terá dificuldades em renderizar o relatório HTML gerado. A exportação de dados para arquivos ou a geração de relatórios textuais continuam sendo melhores alternativas para tratar esse tipo de demanda.
Melhorias
Engine
- O construtor da classe
Uint8Array
passa a aceitar instâncias de Array e Uint8Array, conforme a especificação da linguagem. Também foi implementado o métodoUint8Array.prototype.join
. - Foi criado o guia de boas práticas de desenvolvimento na plataforma do Engine em https://nginstack.com/pt/docs/best-practices/. Essa documentação tratará de assuntos ou soluções que sejam específicas da plataforma, não sendo um guia geral de boas práticas de desenvolvimento em JavaScript, material esse que já pode ser encontrado com facilidade na Internet. Inicialmente foram abordados o tratamento de números decimais e o consumo de chaves do sistema. No futuro, esse material será revisto para tratar de outros assuntos relevantes da plataforma.
- O método
VirtualFileSystem.prototype.setFileContent
passa a permitir que o parâmetrocontent
seja umFile
ouMemoryStream
, evitando a criação destrings
temporárias em memória quando o conteúdo do arquivo se encontra nesses objetos. Também passa a ser possível indicar o tipo do conteúdo por meio do novo parâmetro opcionalcontentType
. - Foi criado o método
DBKey.from
com o objetivo de converter um valor em uma instância deDBKey
. Ele é mais eficiente que o construtorDBKey
, pois evita a construção de um objeto em memória quando não há conversão a ser realizada. - Foi criado o método
DBKey.prototype.equals
com o objetivo de testar se uma chave é igual a outra, seja ela um outra instância deDBKey
ou uma representação numérica ou textual da chave. Este novo método é útil quando utilizado o V8, onde as chaves passam a ser representadas por instâncias deDBKey
em vez de valores do tiponumber
.
Web Framework
- A grade
lookup
passa a executar o eventoonGetImages
para obter a imagem associada ao registro pesquisado em vez de chamar diretamente a funçãogetMainImageUrl
. O objetivo dessa alteração é permitir que comportamento padrão do sistema possa ser customizado, permitindo inclusive a associação de imagens aos valores dos campos do tipocombo
. - O método
UploadedFile.prototype.uploadToVfs
passa a receber a opçãokey
com o objetivo de indicar o arquivo daVirtualFileSystem
onde deverá ser gravado o conteúdo da operação deupload
. Antes dessa alteração, somente era possível criar novos arquivos por meio dessa API.
Defeitos corrigidos
Desenvolvimento
- A atualização do sistema via API HTTP não reinicializa o Engine quando necessário.
Engine
- As alterações realizadas em uma instância de
Uint8Array
não eram refletidas noArrayBuffer
informado no construtor. - O serviço de execução remota de scripts, na versão 32 bits do Engine, poderia causar um erro de violação de acesso.
Web Framework
- Ao informar o valor de um campo lookup ocorria o erro “Cannot read property editingCellId of null” se a grade perdesse o foco antes do sistema exibir a grade auxiliar com o resultado da pesquisa.
- Os valores escritos em uma coluna de um relatório
SimpleLayout
com a propriedadeColumn.prototype.mergeDuplicatedValues
ativa não eram mesclados corretamente se a duplicação fosse detectada na última linha do relatório ou se fossem escritas mais de 1000 células.
Outras alterações
Admin
- O preenchimento das variáveis “Data Inicial” e “Data Final” do relatório
Admin > Auditoria > Consultar Alterações
passa a ser opcional quando informada uma versão de alteração.
Engine
- As colunas do tipo
number
passam a ser criadas no banco de dados Oracle com o tipoNumber(38, 10)
em vez deNumber
, de forma similar ao comportamento já adotado nos demais bancos de dados suportados pelo Engine. A adoção de uma escala fixa torna o resultado das operações de agregação no banco de dados mais previsíveis, pois a escala deixa de flutuar com base na ordem de grandeza da parte inteira. - O runtime Javascript V8 foi atualizado para a versão 7.5.26.