1
resposta

Esforço computacional

Olá, no projeto da aula, a função NegociacaoView.update(negociacoes) é chamada cada vez que um objeto é adicionado na this._listaNegociacoes, porém quando lemos os dados do IndexedDB ou fazemos a importação temos uma lista de importações que serão adicionadas UMA A UMA, ou seja, cada vez que adicionar uma negociação vai disparar o update da view apagando o conteúdo anterior e adicionando as linhas conforme o tamanho atual da _listaNegociacoes, ou seja, se eu tiver 30 negociações, vai disparar 30x o update, fazendo com que o código escreva uma quantidade de linhas = a soma de todos os antecessores da quantidade de negociações. Ou seja se tem 30 negociações, vai renderizar 496 linhas. Pensando na otimização do código e na redução do esforçor computacional, qual seria a melhor forma de solucionar este problema? Por aqui pensei em criar um método de adicionar específico para quando importação (qual não dispararia automaticamente o update) e só chamar o update manualmente ao final da importação.

1 resposta

Fala aí Rafael, tudo bem? Existe várias maneiras para resolver esse problema, segue duas abordagens que eu pensaria:

  1. Fazer exatamente como você falou, eu guardaria em uma variável o array de negociações atuais, ao fazer a importação eu pegaria todas as negociações importadas e concatenaria com as atuais desse array, no final, eu chamaria uma função para atualizar a tabela.
  2. Criaria uma regra para atualizar apenas um pedaço da tabela específico, ou seja, se eu adicionei um novo item, em vez de renderizar tudo novamente, apenas adiciona um novo tr no tbody.

A segunda solução pode complementar a primeira, ou seja, se temos um array com 10 itens que já estão na tela, após adicionar mais 5 itens no array, seria legal apenas adicionar os 5 itens na tabela e não re-renderizar a tabela inteira.

Espero ter ajudado.