Ir para conteúdo

POWERED BY:

Arquivado

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

junior fernandes

Site Muito lento -ASP

Recommended Posts

Olá pessoal, estou tendo alguns problemas nos meus projetos. Estou sentindo que os sites dinamicos feito em asp+mysql via dreamweaver esta demorando muito para entrar, em media mais de 30 segundo pra poder entrar no site, quando coloco uma pagina simples em html a resposta é imediata.

 

Pela logica, essa demora está sendo ocasionado pela conexao do banco, e uso muito recordset, gostaria de saber como faço pra poder pegar os dados do banco de dados, vou postar abaixo o codigo que estou usando:

 

Include para conexão com o db:

<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO" 
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_ConVoltz_STRING
MM_ConVoltz_STRING = "Driver={MySQL ODBC 3.51 Driver};Server=mysql.site.com;Database=nome_db; User=Usuario;Password=Senha;Option=3;"
%>

 

RecordSet:

<%
Dim rsb1
Dim rsb1_numRows

Set rsb1 = Server.CreateObject("ADODB.Recordset")
rsb1.ActiveConnection = MM_ConVoltz_STRING
rsb1.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 1 ORDER BY RAND() LIMIT 1"
rsb1.CursorType = 0
rsb1.CursorLocation = 2
rsb1.LockType = 1
rsb1.Open()

rsb1_numRows = 0
%>

 

Repeat:

<%
Dim Repeat3__numRows
Dim Repeat3__index

Repeat3__numRows = 1
Repeat3__index = 0
rsRecados_numRows = rsRecados_numRows + Repeat3__numRows
%>


<% 
While ((Repeat3__numRows <> 0) AND (NOT rsLerNoticia.EOF)) 
%>

Conteudo

<% 
  Repeat3__index=Repeat3__index+3
  Repeat3__numRows=Repeat3__numRows-3
  rsLerNoticia.MoveNext()
Wend
%>

Exemplo do site que estou fazendo que está o erro citado: www.kanalvip.com.br

Fico no aguardo!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoalmente, não uso nenhum editor que inche meu codigo. E dreamwaever é especialista nisso.

Os trechos postados, pelo que li por cima são trechos de uma páginação, então até é toleravel uma certa demora pois estaria consultando o banco de dados. Se o banco de dados contem muitos registros, pode demorar um pouco a consulta.

 

O que normamlmente vejo é que o problema não está na consulta ou na base de dados, mas sim em abrir tabela dentro de tabela, numa sucessão quase infinita.

Os dados contidos numa tabela, só serão exibidos depois que todo seu conteudo for carregado. Por isso que demora.

Se usar tags div para posicionamento e tabela somente no que realmente é preciso (dados tabulares) a pagina é carregada rapidamente.

 

Talvez seja melhor rever todo o código gerado e começar a faxinar tudo que é irrelevante.

Ou melhor ainda, mudar de editor para um que não inche o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá junior fernandes,

 

Dicas para otimização de velocidade:

1 - Programe, não deixe que o programa(Dreamweaver) faça isso por/para você.

2 - Use o RecordSet o menos possível, é um objeto mto pesado pro servidor, pra uma simples consulta use o .Execute do Objeto Connection.

3 - Se for imprescindível o uso do RecordSet, use sempre seus métodos e propriedades, como ponteiros, etc...

4 - Nunca esqueça de Fechar e Destruir os Objetos: Objeto.Close e Set Objeto = Nothing

5 - EVITE SEMPRE código espaguete (misturar código em ASP com HTML, fica muito lento), quando precisar usar ambos na mesma página, gere HTML com ASP.

6 - Não abuse do Session, ele é mto útil, mas mto pesado.

 

No mais é isso, precisando, estou aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito otimo a sua citação, vou postar abaixo o codigo de minha pagina. Obs: Não tem muitos registros no banco para poder resultar a demora a carregar os dados.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include virtual="/Connections/ConVoltz.asp" -->
<%
Dim rsEnquete
Dim rsEnquete_numRows

Set rsEnquete = Server.CreateObject("ADODB.Recordset")
rsEnquete.ActiveConnection = MM_ConVoltz_STRING
rsEnquete.Source = "SELECT *  FROM kanalvip.questoesenq"
rsEnquete.CursorType = 0
rsEnquete.CursorLocation = 2
rsEnquete.LockType = 1
rsEnquete.Open()

rsEnquete_numRows = 0
%>
<%
Dim rsVotos
Dim rsVotos_numRows

Set rsVotos = Server.CreateObject("ADODB.Recordset")
rsVotos.ActiveConnection = MM_ConVoltz_STRING
rsVotos.Source = "SELECT *  FROM kanalvip.questoesenq,kanalvip.votosenq  WHERE IdQuestVoEn = IDQueEnq"
rsVotos.CursorType = 0
rsVotos.CursorLocation = 2
rsVotos.LockType = 1
rsVotos.Open()

rsVotos_numRows = 0
%>
<%
Dim rsAgenda
Dim rsAgenda_numRows

Set rsAgenda = Server.CreateObject("ADODB.Recordset")
rsAgenda.ActiveConnection = MM_ConVoltz_STRING
rsAgenda.Source = "SELECT * FROM tbagenda"
rsAgenda.CursorType = 0
rsAgenda.CursorLocation = 2
rsAgenda.LockType = 1
rsAgenda.Open()

rsAgenda_numRows = 0
%>
<%
Dim rsLerNoticia
Dim rsLerNoticia_numRows

Set rsLerNoticia = Server.CreateObject("ADODB.Recordset")
rsLerNoticia.ActiveConnection = MM_ConVoltz_STRING
rsLerNoticia.Source = "SELECT * FROM kanalvip.tbnoticia ORDER BY Noticia_id DESC"
rsLerNoticia.CursorType = 0
rsLerNoticia.CursorLocation = 2
rsLerNoticia.LockType = 1
rsLerNoticia.Open()

rsLerNoticia_numRows = 0
%>


<%
Dim rsNoticia
Dim rsNoticia_numRows

Set rsNoticia = Server.CreateObject("ADODB.Recordset")
rsNoticia.ActiveConnection = MM_ConVoltz_STRING
rsNoticia.Source = "SELECT * FROM tbnoticia"
rsNoticia.CursorType = 0
rsNoticia.CursorLocation = 2
rsNoticia.LockType = 1
rsNoticia.Open()

rsNoticia_numRows = 0
%>
<%
Dim rsb0
Dim rsb0_numRows

Set rsb0 = Server.CreateObject("ADODB.Recordset")
rsb0.ActiveConnection = MM_ConVoltz_STRING
rsb0.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 0 ORDER BY RAND() LIMIT 1"
rsb0.CursorType = 0
rsb0.CursorLocation = 2
rsb0.LockType = 1
rsb0.Open()

rsb0_numRows = 0
%>
<%
Dim rsb1
Dim rsb1_numRows

Set rsb1 = Server.CreateObject("ADODB.Recordset")
rsb1.ActiveConnection = MM_ConVoltz_STRING
rsb1.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 1 ORDER BY RAND() LIMIT 1"
rsb1.CursorType = 0
rsb1.CursorLocation = 2
rsb1.LockType = 1
rsb1.Open()

rsb1_numRows = 0
%>
<%
Dim rsb2
Dim rsb2_numRows

Set rsb2 = Server.CreateObject("ADODB.Recordset")
rsb2.ActiveConnection = MM_ConVoltz_STRING
rsb2.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 2 ORDER BY RAND() LIMIT 1"
rsb2.CursorType = 0
rsb2.CursorLocation = 2
rsb2.LockType = 1
rsb2.Open()

rsb2_numRows = 0
%>
<%
Dim rsb3
Dim rsb3_numRows

Set rsb3 = Server.CreateObject("ADODB.Recordset")
rsb3.ActiveConnection = MM_ConVoltz_STRING
rsb3.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 3 ORDER BY RAND() LIMIT 1"
rsb3.CursorType = 0
rsb3.CursorLocation = 2
rsb3.LockType = 1
rsb3.Open()

rsb3_numRows = 0
%>
<%
Dim rsb4
Dim rsb4_numRows

Set rsb4 = Server.CreateObject("ADODB.Recordset")
rsb4.ActiveConnection = MM_ConVoltz_STRING
rsb4.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 4 ORDER BY RAND() LIMIT 1"
rsb4.CursorType = 0
rsb4.CursorLocation = 2
rsb4.LockType = 1
rsb4.Open()

rsb4_numRows = 0
%>
<%
Dim rsb5
Dim rsb5_numRows

Set rsb5 = Server.CreateObject("ADODB.Recordset")
rsb5.ActiveConnection = MM_ConVoltz_STRING
rsb5.Source = "SELECT * FROM tbbanners WHERE BannerTipo = 5 ORDER BY RAND() LIMIT 1"
rsb5.CursorType = 0
rsb5.CursorLocation = 2
rsb5.LockType = 1
rsb5.Open()

rsb5_numRows = 0
%>
<%
Dim RepeatNoticias__numRows
Dim RepeatNoticias__index

RepeatNoticias__numRows = 3
RepeatNoticias__index = 0
rsNoticia_numRows = rsNoticia_numRows + RepeatNoticias__numRows
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
rsLerNoticia_numRows = rsLerNoticia_numRows + Repeat1__numRows
%>
<%
Dim EnqueteR__numRows
Dim EnqueteR__index

EnqueteR__numRows = -1
EnqueteR__index = 0
rsVotos_numRows = rsVotos_numRows + EnqueteR__numRows
%>
<%
Dim Repeat3__numRows
Dim Repeat3__index

Repeat3__numRows = 1
Repeat3__index = 0
rsRecados_numRows = rsRecados_numRows + Repeat3__numRows
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kanal Vip</title>
<meta name="url" content="www.kanalvip.com.br" />
<meta name="description" content="Coberturas de festas, eventos, casamentos." />
<meta name="keywords" content="festas, coberturas, baladas, casamentos, fotos, fotos de festas,  paulo afonso" />
<meta name="charset" content="ISO-8859-1" />
<meta name="autor" content="Junior Fernandes, Clebson Moreno, Icaro -Belk" />
<meta name="company" content="Raiz propaganda" />
<meta name="revisit-after" content="5" />
<link rev="made" href="mailto:contato@raizpropaganda.com.br" />

<link href="css/styles.css" rel="stylesheet" type="text/css" />
	<script type="text/javascript" src="js/flash.js"></script>
	<script type="text/javascript" src="js/enquete.js"></script>
	<script type="text/javascript" src="js/ajax.js"></script>
	<script type="text/javascript" src="js/actions.js"></script>


	<script language="javascript">
<!--
function abrirr(valor){
	janela=window.open("fotos.asp?id="+valor,"","width=835,height=650,scrollbars=yes")
	text = "Se a janela não estava abrindo\ntalvez seja porque voce tenha um\nprograma bloqueador de pop-up!\nObservação » O windows XP service pack 2\nbloqueia pop-ups!";
	if(janela == null) { 
		alert(text); return; 
	}
	newWidth = ((screen.width - 835) / 2) ;
	newHeight = ((screen.height - 650) / 2) ;
    janela.moveTo(newWidth,newHeight);
}
//-->
</script>
</head>
<body>
<div id="barra_radio"></div>
<div id="geral">
	<div id="top">
		<!--#include file="includes/topo.asp" -->
	</div>
	<div id="menu">
	  <!--#include file="includes/menu.asp" -->
	</div>
	<div id="content">
			<div id="content_Um">
              <div id="content_c">
                <% 
While ((Repeat1__numRows <> 0) AND (NOT rsLerNoticia.EOF)) 
%>
                  <div style="padding-bottom:6px;">
					  <div>»<strong> <%=(rsLerNoticia.Fields.Item("titulo").Value)%></strong></div>
					  <div style="font-size:10px;">    <a href="view-noticia.asp?id=<%=(rsLerNoticia.Fields.Item("Noticia_id").Value)%>"><%=(rsLerNoticia.Fields.Item("resumo").Value)%></a></div>
				  </div>
                  <% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsLerNoticia.MoveNext()
Wend
%>
</div>
              <div id="parte_enquete">
						<div id="enquete">
							<!--#include file="includes/enquete.asp" -->
						</div>
						<!--#include file="includes/links.asp" -->
			  </div>
				<div id="parte_noticias">
						<div id="banner_3">
								<%if rsb5.EOF = true and rsb5.BOF  = true then 
					
					else
					%>					
					<script type="text/javascript">
					GerarSWF("files/flash/<%=(rsb5.Fields.Item("BannerEnd").Value)%>",100,500,"<%=(rsb5.Fields.Item("BannerNome").Value)%>");
					</script>
					<%end if%>
						</div>
						<div id="agenda">
							<div id="barra_agenda"><img src="imagens/agenda.jpg" width="235" height="26" /></div>
							<div id="foto_agenda"><img src="img/<%=(rsAgenda.Fields.Item("foto").Value)%>" width="224" height="120" /></div>
							<div id="content_agenda"><%=rsAgenda("data")%><br />
							      <span class="red_Bold"><%=rsAgenda("atracao")%></span><br />
						  <%=rsAgenda("local")%></div>
						</div>
						<div id="noticias">
								<div id="titulo_noticias"><img src="imagens/noticias.gif" /></div>
								
								<!--Akki-->
								 <% 
While ((RepeatNoticias__numRows <> 0) AND (NOT rsNoticia.EOF)) 
%>
								<div id="content_noticias">
								  <span class="red"><%=(rsNoticia.Fields.Item("data").Value)%></span><br />
									<a href="includes/view-noticia.asp?id=<%=(rsNoticia.Fields.Item("Noticia_id").Value)%>"><%=(rsNoticia.Fields.Item("resumo").Value)%></a> </div>
									<% 
  RepeatNoticias__index=RepeatNoticias__index+1
  RepeatNoticias__numRows=RepeatNoticias__numRows-1
  rsNoticia.MoveNext()
Wend
%>
									<!--Akki-->
				  </div>
				</div>
	  </div>
			<div id="content_Dois">
					<!--#include file="includes/lateral.asp" -->
			</div>
	</div>
	<div id="banner_rodape">
		<!--#include file="includes/banner_rodape.asp" -->
	</div>
</div>
</body>
</html>
<%
rsLerNoticia.Close()
Set rsLerNoticia = Nothing
%>

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.