Ir para conteúdo

POWERED BY:

Arquivado

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

lote14

otimização na pratica

Recommended Posts

fala pessoal,

 

criei um site meio que aos "trancos e barrancos" quando era principiante nivel 1, agora que já sou principiante nivel 2 Imagem Postada , estou tentando melhorar o site e estou tendo problemas de velocidade e desempenho (lentidão pura).

 

queria tirar algumas duvidas, tudo bem, já li vários posts, ja fui no nosso amado google, porém algumas duvidas ficaram, vamos lá.

 

1.recordset com mesmo nome na página, tem problema? ou é melhor criar um com cada nome?

 

exemplo:

 

set rs

uso o rs

e fecho o rs

 

set rs

uso o rs

e fecho o rs

 

set rs

uso o rs

e fecho o rs

 

2.toda vez que faço isso, preciso fechar a conexao?

 

exemplo:

 

set rs

uso o rs

e fecho o rs

e fecho conexao

 

3.ou abro a conexão no começo da pagina e só fecho no fim da pagina.

 

exemplo:

 

abro conexao - comeco da pagina

 

set rs

uso o rs

e fecho o rs

 

set rs

uso o rs

e fecho o rs

 

set rs

uso o rs

e fecho o rs

 

fecho conexao - fim da pagina

 

 

4. qual melhor opção para executar uma sql? e porque?

 

exemplo:

 

rs = Conn.Execute ()

 

ou

 

rs.open (sql,cursores...não lembro)

 

 

por enquanto é isso.

 

 

como diz o vendedor de bala do metro da carioca no rj. Imagem Postada

 

"quem puder ajudar eu agradeço mas quem não puder eu agradeço do mesmo jeito"

 

valeu pessoal... e fico no aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- Não tem problema

 

2-3 Feche no final apenas mas sempre feche isso é importante

 

4 Se não precisar de nenhuma propriedade especial do recordset use o execute mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu abro a conexão e os records sets e no final fecho.

 

Prefiro fazer o sql="blá blá blá" depois o set rs=conexao.execute(sql), pois caso aconteça algum problema só preciso comentar o execute e por um response.write sql para ver como está a instrução, não preciso modificar parametros para checar se está tudo bem.

 

Acessei o site que você passou em outro post e para mim estava normal, como muitos dos sites que acesso normalmente, essa lentidão toda que você tem falado, por acaso não é por causa do seu acesso a internet? ou pela diferença entre processar localmente e processar por um servidor remoto (internet) ?

 

Vai no google e usa as ferramentas do webmaster e o analytics, eles dão um bom panorama e num deles tem o tempo médio de carga do site, com uma comparação com outros sites, ele informam + - assim:

seu site levou 3 minutos para carregar, isso é 98% mais rapido que a maioria dos sites.

Ou seja, seu site está bom, pode continuar assim.

 

Ah, outra coisa que pode atrapalhar é o uso excessivo de tabelas no site. O conteudo de uma tabela só é exibido depois que toda a tabela está carregada (textos, imagens, etc...) e se você aloja toda a estrutura do site em tabelas e sub-tabelas, o site fica lento, cansei de ver isso por ai.

 

Ferramentas que incham o código também colaboram para que um site fique lento, por isso se quer ser bom em criação de sites, não seja dependente de nenhum programa em especial, use-os como auxiliares de uma tarefa, e não como já vi muitos por ai, "só faço se for com tal programa"

 

Pra variar acabo sempre me alongando ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

to achando que é um problema no host - hotel da webagora mesmo saiu do ar e voltou lento demais.já esta uns 3 dias assim.outra coisa.

"Se não precisar de nenhuma propriedade especial do recordset use o execute mesmo"

tenho uma tabela do acess onde possui +- 4000 registros, que são simulados que foram resolvidos e para formar as estatísticas de media, acertos, notas etc... uso um rs para ler esta tabela de +-4000 registros, pergunta?uso atualmente conexao.execute(sql), não seria melhor usar rs.open e usar algum cursor, se sim, quais cursores?valeu vinicius, preciosas suas dicas e pode continuar se empolgando... :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá, eu actualmente abro a conexão de inicio e fecho-destruo no fim, quando aos recordsets abro sempre quando preciso abrir e fecho-destruo de imediato, normalmente uso o execute, só quando é paginação ou preciso que o cursor tenha mais funcionalidades é que uso o rs.open sql,conexao...

 

Já agora quando usam o rs.open sql,conexao,1,3 ou rs.open sql,conexao,3,3 ou outros tipos de cursor e locktype, qual é que recomendam a nível de desempenho?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada nestes itens:

 

Cursores de Recordset

 

O tipo e a localização do cursor do recordset podem mudar drasticamente a performance da sua aplicação ASP.

 

A propriedade CursorLocation determina onde ficará o controle do cursor: Client ou Server. Sempre que possível utilize o cursor Server, se for necessário utilizar cursor Client, garanta que poucos registros serão retornados. O cursor Client traz todo o recordeset para a memória, e no caso de aplicação Web, fica na memória do Web-Server, um cursor Client com muitos registros em uma página que tem muitos acessos simultâneos pode gerar graves conseqüências.

 

A propriedade CursorType determina o tipo de cursor a ser usado: ForwardOnly, KeySet, Dynamic, Static. Em 90% dos casos o cursor ideal é o ForwardOnly pois é o cursor que tem menos recursos e menos custo. Evite atualizar, inserir e deletar registros através de cursores, prefira stored procedures ou instruções SQL.

 

 

 

Alternação entre códigos ASP e HTML '<% %>'

 

Evite ficar alternando entre códigos ASP e HTML <% %>, a alternação entre códigos afeta diretamente a performance da página.

Abaixo segue exemplo de como melhorar a performance de suas páginas retirando a alternação entre códigos:

 

Código de baixa performance:

 

'<%Do Until rsLinks.EOF %>
'<a href="<%=rsLinks("URL")%>"><%=rsLinks("NomeSite") %></a>
'<%rsLinks.MoveNext%>
'<%Loop%>

 

Código de alta performance:

 

'<%Do Until rsLinks.EOF
'Response.Write "<a href=""" & rsLinks("URL") & """>" & rsLinks("NomeSite") & "</a>"
'rsLinks.MoveNext
'Loop%>

 

Uso de funções / Variáveis de módulo

 

Nunca escreva grandes trechos de códigos diretamente nas páginas, no formato conhecido como código lingüíça. Use sempre Subs ou Functions para estruturar seu código. Um código bem estruturado facilita a manutenção e evita o uso desnecessário de recursos.

Limite-se ao uso de If ou Select Case e chamadas de funções diretamente na página.

Declare as variáveis dentro das funções ou subs, desta maneira menos recursos serão gastos. Em alguns casos são necessárias algumas variáveis de módulo para uso em várias funções, limite-se a variáveis de tipo simples (inteiras, strings, boleanas e etc), nunca declare variáveis do tipo Recordset fora de funções (em módulo).

 

 

Conversões Explicitas (Tipos de variáveis)

 

As linguagens de script não possuem tipos de variáveis declarados, para garantir a segurança e estabilidade de aplicação utilize sempre conversões ao atribuir valor às variáveis. Exemplo:

'intCdAssunto = CInt(Request.QueryString("CdAssunto"))

 

Includes

 

O uso de includes é muito útil e recomendado. Porém você precisa saber como os includes funcionam para utilizá-los de forma correta.

O Web-Server (IIS) substitui as chamadas dos includes pelos seus respectivos códigos antes de qualquer outra ação. Portanto a página ASP só será processada após todos os includes serem substituídos. Abaixo algumas dicas para o uso dos includes:

 

Não utilize includes de forma indiscriminada, pois quanto mais includes existirem em suas páginas mais tempo elas irão demorar para serem processadas.

Utilize os includes para uso de funções comuns.

Não utilize includes para estruturar o site, se uma página possuir um If ou um Select Case para escolher qual include utilizar, então, está na hora de você pensar em transformá-la em duas ou mais páginas distintas.

Nunca utilize duas chamadas do mesmo include na mesma página, se for necessário utilizá-lo duas ou mais vezes, transforme-o em uma função, declare o include no topo da página e efetue a chamada da função quantas vezes forem necessárias.

Evite o uso de includes dentro de includes, isso gera muita confusão no código.

 

Request

 

Evite o uso do Request("atributo"), sempre que possível utilize a coleção à qual você deseja efetuar o Request (Request.Form, Request.QueryString, Request.Cookies). O uso do Request deixa a página mais lenta.

 

Sessions

 

As variáveis de Session são muito úteis, porém perigosas. Uma variável Session ocupa espaço diretamente na memória RAM do servidor.

Recomenda-se armazenar em Session apenas o informações do tipo Id do usuário e controles de acesso, as demais informações devem ser armazenadas em Cookies

 

Você pode desabilitar o controle de Sessão em páginas que não necessitam, isso economiza recursos. Para desabilitar o controle de Sessão utilize o comando abaixo:

'<%@ EnableSessionState=False %>'

 

Leitura/Atribuição de Coleções (Request, Session, Application, Recordset, etc...)

A leitura e atribuição de valores à coleções é um processo lento, se sua página efetua repetidas leituras ou atribuições à coleções (Request.Form("parametro"), Request.QueryString("parametro"), Session("variavel"), Application("variavel") ou RecordSet("campo")) atribua o valor a uma variável e sempre que necessário utilize a variável.

 

Tratamento de Erro

 

O tratamento de erro em ASP é um grande problema, mas existe uma ótima solução para resolver a deficiência do ASP.

O On Error Resume Next é o único tratamento possível, porém se for usado de forma errada ele torna-se péssimo.

 

Veja o exemplo abaixo do uso do On Error Resume Next:

 

'<%
'On Error Resume Next


'Call SuaFuncao()

'If Err.Number <> 0 Then

'Call LogarErros()
'End If


'On Error Goto 0


'Sub SuaFuncao()
...
'End Sub


'Sub LogarErro()
'Response.Write "Ocorreu um erro inesperado (" & Err.number & " - " & err.Description & ")"
'Response.End
''SEU CÓDIGO PARA LOGAR EM BANCO DE DADOS, EVENT VIEWER, EMAIL, ETC...
'End Sub
'%>

 

Option Explicit

 

Alternação entre códigos ASP e HTML '<% %>'

Uso de funções / Variáveis de módulo

Sessions

Leitura/Atribuição de Coleções (Request, Session, Application, Recordset, etc..)

Conversões Explicitas (Tipos de variáveis)

Includes

Request

Cursores de Recordset

Tratamento de Erro

 

Option Explicit

Utilize sempre a opção Option Explicit em suas páginas ASP.

Utilizando Option Explicit, além de melhorar a performance das páginas você detectará erros de digitação imediatamente, evitando horas de depuração de código para descobrir que o problema era uma variável com alguma letra trocada.

 

Variavel de objeto - nome_da_variavel - utilizada em Session/Application

Armazenar um objeto ADO numa variável Session/Application, manterá um objeto criado aberto continuamente por cerca de 20 minutos fazendo com que a performance se seu site ou aplicação caia, principalmente com o aumento de acessos simultâneos.Para isso crie os objetos diretamente no script que irá utiliza-lo e destrua o mesmo assim que a utilização for concluída.

 

Nao utilizar VBScript.Encode

Mesmo sendo possível a utilização do Windows Script Encoder a utilziação deste poderar gerar um pico no processamento dentro dos nossos servidores.Certifique-se que realmente é necessário seu uso. Geralmente a utilização desta encriptação é utilizada em funções críticas, onde contenha dados como os de usuario e senha de banco de dados.

 

Mais de 5 Recordsets abertos na mesma pagina

Instanciar vários recordsets em um mesmo script irá causar além de lentidão a possibilidade de derrubar nossos servidores, dependendo da query, da base de dados utilziada e do tamanho que esta base possui.Verifique se todos os Recorsets criados são realmente necessários. Uma alternativa é de utilizar o mesmo recordset criado para uma mesma base fechando-o e reabrindo-o com uma nova query e destruí-lo quando a utilização do mesmo não for mais necessária.

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.