Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

[ GuTo ]

Performance: redirecionamento VS abertura de conexoes e recordsets

Recommended Posts

Olá,

 

Gostaria de saber a opnião de vocês asper's.

 

Avaliando performance e tudo mais.

 

Analisem os 3 códigos e digam-me qual seria o melhor num todo.

 

Nota rápida. a intenção é inserir 1 novo registro no banco de dados, mas antes, verificamos a existencia do dado. Caso encontre um departamente já cadastrado com o mesmo nome, retorna erro, caso contrário(caso nao exista nenhum dpartamento com o nome q estamos tentando inserir), é inserido o novo registro.

A questão que quero chegar é o q vale mais aí em todas questões, inclusive de performance no servidor, levando em consideração um código menor ou um código maior.

 

codigo1: neste primeiro verificamos tudo e guardados numa variavel se foi bem sucedido ou nao a rotina. depois fechamos tudo e em sguida, verificamos a variaval e redirecionamos

dim blnAcao, dep: dep="Qualquer"'abro conexao, crio o objeto do recordsetrs.open("SELECT departamento_nome FROM departamentos WHERE departamento_nome='"&dep&"'),objCon,1,2if rs.eof then  rs.addNew:  rs(0)=dep: rs.Update  blnAcao=trueend ifrs.close'destruo o objeto do recordset e fecho a conexaoif blnAcao then Response.Redirect("sucesso.asp")Response.Redirect("erro.asp")'caso blnAcao seja false, vai passar em branco pela linha de cima e jah cai aki
codigo2: neste segundo verificamos e já redirecionamos, assim, não fechando nada que foi aberto caso a rotina tenha ocorrido OK!

dim dep: dep="Qualquer"'abro conexao, crio o objeto do recordsetrs.open("SELECT departamento_nome FROM departamentos WHERE departamento_nome='"&dep&"'),objCon,1,2if rs.eof then  rs.addNew:  rs(0)=dep: rs.Update  Response.Redirect("sucesso.asp")end ifrs.close'destruo o objeto do recordset e fecho a conexaoResponse.Redirect("erro.asp")'caso blnAcao seja false, vai passar em branco pela linha de cima e jah cai aki
codigo3: ou ainda este terceiro.. igual o codigo2, só q menor ainda e com uma leva diferenca, pois agora redirecionamos primeiro em caso de "erro".

dim dep: dep="Qualquer"'abro conexao, crio o objeto do recordsetrs.open("SELECT departamento_nome FROM departamentos WHERE departamento_nome='"&dep&"'),objCon,1,2if NOT rs.eof then Response.Redirect("erro.asp")'notem q aki redirecionamos e nao fechamos nadars.addNew: rs(0)=dep: rs.Updaters.close'destruo o objeto do recordset e fecho a conexaoResponse.Redirect("sucesso.asp")'redirecionamos aki se tudo ok, depois de fechar tudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho...tem N formas de fazer isso.. agora levando em consideração as q você escreveu... todas tem tempos praticamente iguais não impactando em desempenho em nenhuma aplicação... somente qto ao código3, ele naum funciona pq no momento q você executar o comando response.redirect, o servidor q interpreta o ASP automaticamente aborta a leitura (como se fosse um response.end implícito) das linhas posteriores e redireciona para a pagina solicitada sem executar o q vem abaixo.... q dessa forma não irá rodar o addNew q você queria....mas analisando... 2 coisas... limite sua consulta no SELECT.. um TOP 1 ou usar o COUNT, dependendo o tamanho da tabela poderia ter uma performance melhor...mas velho.. sinceridade... se preocupar com essas variantes q são desconsideráveis até em projetos de grande porte, é trabalho demais para ganho de menos ou até ganho "0" e uma ocupação de tempo q poderia ser melhor aproveitada... pelo menos é minha opinião... heheheabraço velho, ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só complementando, antigamente havia muito disso de preocupação "temos que pegar leve pra não ferrar o servidor", mas antigamente os servidores eram muito inferiores aos de hoje em dia... hj temos pcs com 2 GHz de Ram por exemplo...Mas creio que a melhor forma nos exemplos seu seria, fazer um TOP 1 como o amigo falou usar um if pra ignorar o INSERT caso for encontrado algo ou redirecionar ou gerar uma msg de erro na pr´pria pagina,m eu uso muito IF nas minhas páginas para pular trechos do codigos como no seu exemplo... assim evito carregar muita coisa desnecessaria...

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho...

 

tem N formas de fazer isso.. agora levando em consideração as q você escreveu... todas tem tempos praticamente iguais não impactando em desempenho em nenhuma aplicação...

 

somente qto ao código3, ele naum funciona pq no momento q você executar o comando response.redirect, o servidor q interpreta o ASP automaticamente aborta a leitura (como se fosse um response.end implícito) das linhas posteriores e redireciona para a pagina solicitada sem executar o q vem abaixo.... q dessa forma não irá rodar o addNew q você queria....

 

mas analisando... 2 coisas... limite sua consulta no SELECT.. um TOP 1 ou usar o COUNT, dependendo o tamanho da tabela poderia ter uma performance melhor...

 

mas velho.. sinceridade... se preocupar com essas variantes q são desconsideráveis até em projetos de grande porte, é trabalho demais para ganho de menos ou até ganho "0" e uma ocupação de tempo q poderia ser melhor aproveitada... pelo menos é minha opinião... hehehe

 

abraço velho,

;)

qto ao código 3, não está errado, repare com atenção essa linha:

if NOT rs.eof then Response.Redirect("erro.asp")'notem q aki redirecionamos e nao fechamos nada

quanto ao TOP 1, isso é pra access.. o q limita a sql, caso queira migrar E, claro, seria incorreto digamos, pois quero é inserir um novo departamento no bd, mas se já existir um departamento de mesmo nome, não insere e mostra um erro.

 

Só complementando, antigamente havia muito disso de preocupação "temos que pegar leve pra não ferrar o servidor", mas antigamente os servidores eram muito inferiores aos de hoje em dia... hj temos pcs com 2 GHz de Ram por exemplo...

 

Mas creio que a melhor forma nos exemplos seu seria, fazer um TOP 1 como o amigo falou usar um if pra ignorar o INSERT caso for encontrado algo ou redirecionar ou gerar uma msg de erro na pr´pria pagina,m eu uso muito IF nas minhas páginas para pular trechos do codigos como no seu exemplo... assim evito carregar muita coisa desnecessaria...

Tudo bem que não precisamos nos preocupar tanto assim, mas quanto melhor programarmos, sabermos melhor como cada coisa funciona, fazer códigos menores, isto é, menos largura de banda gasta, menos tempo de processamento... enfim, são mtos os ganhos.

_______

 

Sou webdeveloper, procuro saber sempre como fazer um código otimizado, porém, sempre pensando em performance, evitar futuros problemas e inconsistências e etc. São diversos conceitos.

Uma coisa, fora a linguagem server-side falando agora mas que aplico estes conceitos, é tbm na parte client-side; Usando XHTML, CSS, tudo muito semântico, seguindo os web standards...

 

Enfim, pra mtos isso demora pra aprender, mas digo q vale a pena perder uns minutos pra aprender tudo na web, e depois na hora de construir, seu tempo de desenvolvimento será menor e você já saberá aonde terá de contornar as possíveis inconsistências.

 

Obrigado pela opnião de qualquer forma.

 

Quero dizer que fiquei com o 3ºcódigo, pois vi que pro ASP automaticamente sozinho fechar os recordsets e conexoes é tão rápido quanto via código nós fazermos.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guto..Gosto muito deste tipo de tópico, mas esse, tem uma coisa que eu não concordo.Faz-se uma validação que nas melhores práticas (e acredito que é isso que você deseja), deve ser feita pelo próprio banco de dados.Nós precisamos ter em mente que cada parte de nosso código tem que fazer alguma coisa, mas temos que lembrar também que nosso banco de dados não é apenas um arquivo texto que recebe informações.Caso estivermos trabalhando com no mínimo o Access, temos como criar nossas chaves, portanto, neste caso, cria-se uma chave no nome do departamente, tenta inserir o registro, se der erro, trata-se o erro e mostra-o para o usuário.Essa validação não deveria ter sido feita pelo ASP, mas, pelo banco de dados, temos que começar a pensar em n-camadas.Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo...Dê me um exemplo de como fazer isso.Tenho de confessar que com banco de dados ainda sou bastante leigo, pois não tenho experiência ainda.Desde já agradeço,Amplexos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Validação que você diz por banco de dados seria por exemplo criar um View ou Stored Procedure, que verifica a existencia do mesmo e você só chama o memso na página ASP ?Algo semelhante a isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que imagino é isso que ele se refere.Só gostaria de saber como ficaria neste caso.Estou aprendendo um pouco sobre modelagem de dados ultimamente.Inté

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso do access que ele quis dizer é configurar o campo para não aceitar duplicidade. Isso gerará um erro em caso de insert de um valor já existente e usando o tratamento de erro você já sabe se inseriu ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ExatoDefinir dentro do proprio banco de dados coisas que podem facilitar posteriormente via código.Depois, no código, o tratamento falado, é o on errorFalando em codigos, eu costumo validar todos os dados que chegam nas paginas, costumo testar de onde os dados vieram, costumo testar todas as principais causas de hackin que conheço.Normalmente, uso variaveis e ifs pra passar pelas possibilidades, e no final, se a variavel que estava testando as condições estiver com um valor padrao, ou seja, nao entrou em nenhum if, eu executo a ação de insert/update/delete, o que for.Não sei se é a melhor forma, mas é a que acho mais conveniente usar em códigos.Assim, eu sei por onde ele passou, o que veio de dado e etc.É isso.Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso do access que ele quis dizer é configurar o campo para não aceitar duplicidade. Isso gerará um erro em caso de insert de um valor já existente e usando o tratamento de erro você já sabe se inseriu ou não.

É isso aí !!!!...O gerenciamento e o relacionamento das tabelas tem que ser feito corretamente dentro do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas nesse caso estamos falando de SQL server por exemplo né ? Access e MySQL suportam trigger, stored procedure e views por exemplo ?E tratar o tipo de dados eu faço bastante, coisas que aprendi no decorrer do aprendizado =PFaço muita verificação em JS antes de mandar os dados pra verificação em ASP, pq as vezes são coisas que podem ser evitadas, tipo letras em campo numérico, letras em campo tipo data, sempre deixo o mais pratico possivel para o usuario e para o tratamento em ASP...

Compartilhar este post


Link para o post
Compartilhar em outros sites

DackAle,Eu editei meu POST, pois achei que tinha postado logo após o Salgado.Não me refiro, as Procedures e Triggers, que também podem ser utilizadas, mas, em relação a tipo de dados, duplicidade de informação, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.