Site hosted by Angelfire.com: Build your free website today!

INTRODUCCION A A.S.P.

-ASP realiza numerosas tareas sirviéndose de componentes (objetos) que deben ser comprados (o programados) por el servidor a determinadas empresas especializadas. PHP presenta una filosofía totalmente diferente y, con un espíritu más generoso, es progresivamente construido por colaboradores desinteresados que implementan nuevas funciones en nuevas versiones del lenguaje.

Este manual va destinado a aquellos que quieren comenzar de cero el aprendizaje de este lenguaje y que buscan en él la aplicación directa a su proyecto de sitio o a la mejora de su sitio HTML. Los capítulos son extremadamente simples, sino simplistas, buscando ser accesibles a la mayoría. Ellos pueden ser complementados posteriormente con otros artículos de mayor nivel destinados a gente más experimentada.

La forma en la que hemos redactado este manual lo hace accesible a cualquier persona no familiarizada con la programación. Sin embargo, es posible que en determinados momentos alguien que no haya programado nunca pueda verse un poco desorientado. Nuestro consejo es el de no querer entender todo antes de pasar al siguiente capítulo sino intentar asimilar algunos conceptos y volver atrás en cuanto una duda surja o hayamos olvidado algún detalle. Nunca viene mal leer varias veces lo mismo hasta que quede bien grabado y asimilado.

Opciones de ASP

Las aplicaciones ASP pueden configurarse de forma que se ejecuten de tres formas distintas. Con IIS 5.0, el “nivel de aislamiento” de la terminología se ha introducido para describir dichas opciones. Los tres valores del nivel de aislamiento son bajo, medio y alto:

Entonces, ¿cuál es la opción más adecuada? En IIS 4.0 se podía observar un declive en el rendimiento cuando la aplicación se ejecutaba fuera de proceso. Se ha trabajado a conciencia en este tema en IIS 5.0 y se ha logrado minimizar el coste de la ejecución de las aplicaciones ASP fuera de proceso. De hecho, en la mayoría de las comprobaciones, las aplicaciones ASP fuera de proceso en IIS 5.0 se ejecutan más rápidamente que las aplicaciones en proceso en IIS 4.0. No obstante, las aplicaciones en proceso generan (con un nivel de aislamiento bajo) el mejor rendimiento en ambas plataformas. A pesar de esta circunstancia, resulta difícil obtener beneficios del nivel bajo si la frecuencia de aciertos o la salida máxima son relativamente bajas. Por tanto, es mejor no alcanzar el nivel de aislamiento bajo hasta que se necesiten cientos o miles de páginas por segundo y por servidor Web. Como siempre, se deben comprobar las distintas configuraciones para determinar las compensaciones se que desean obtener.

Nota: cuando se ejecutan aplicaciones ASP fuera de proceso (con aislamiento medio o alto), se ejecutan en MTS en NT4 y en COM+ en Windows 2000. Es decir, en NT4 se ejecutan desde Mtx.exe y, en Windows 2000, por su parte, lo hacen en DllHost.exe. Se pueden ver los procesos en el Administrador de tareas. También se pueden conocer los detalles de la configuración de los paquetes MTS o de las aplicaciones COM+ por parte de IIS para aplicaciones ASP fuera de proceso.

Utilizar variables locales en las subrutinas y las funciones

Las variables locales son aquellas que se declaran con las subrutinas y las funciones. Dentro de una subrutina o función, el acceso a una variable local es mucho más rápido que a una global. La utilización de las variables también tiende a hacer que el código presente una mayor claridad, por lo que se recomienda su uso siempre que sea posible.

Copiar datos utilizados frecuentemente en las variables de la secuencia

Cuando se tiene acceso a los objetos COM en ASP, se deben copiar los datos de objetos utilizados frecuentemente en las variables de la secuencia. De esta forma se reduce el número de llamadas a los métodos COM, que resultan relativamente costosos comparados con el acceso a las variables de las secuencias. Obtener acceso a los objetos Collection y Dictionary reduce el número de costosas consultas que es preciso llevar a cabo.

Por regla general, si se desea obtener acceso a datos de objetos más de una vez, éstos se deben introducir en una variable de secuencia. Los protagonistas principales a los que va dirigida esta optimización son las variables de solicitud (Form y QueryString). Por ejemplo, puede que su sitio pase una variable QueryString denominada UserID. Supongamos que se hace referencia a UserID una docena de veces en una página concreta. En lugar de llamar a Request("UserID") doce veces, es mejor asignar UserID a una variable en la parte superior de la página ASP y, a continuación, utilizar dicha variable por toda la página. De esta manera se evitarán 11 llamadas al método COM.

En la práctica, el acceso a las propiedades o métodos COM puede resultar costoso en apariencia. A continuación se proporciona un ejemplo de código muy común (desde el punto de vista sintáctico):

Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc Then ' ...

Esto es lo que sucede cuando se ejecuta el código:

  1. La variable Foo se resuelve como un objeto global.
  2. La variable bar se resuelve como miembro de Foo, que resulta ser una llamada al método COM.
  3. La variable blah se resuelve como miembro de Foo.bar. Este también resulta ser una llamada al método COM.
  4. La variable qaz se resuelve como miembro de foo.bar.blah. Sí, de nuevo una llamada al método COM.
  5. Invoque Foo.bar.blah.quaz(1). Otra llamada al método COM. ¿Se hace una idea?
  6. Siga los pasos 1-3 otra vez para resolver baz. El sistema desconoce si la llamada a qaz ha cambiado el modelo de objeto, por lo que se deben volver a realizar los pasos 1-3 para resolver baz.
  7. Resuelva baz como miembro de Foo.bar.blah. Introduzca la propiedad.
  8. Vuelva a seguir los pasos 1-3 para resolver zaq.
  9. Siga de nuevo los pasos 1-3 y resuelva abc.

Como se puede ver, se trata de un sistema terriblemente ineficaz (y lento). La forma rápida de escribir el código en VBScript es:

Set myobj = Foo.bar.blah ' resolver blah UNA VEZ
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc Then '...

Si se utiliza VBScript 5.0 o posterior, se puede escribir utilizando la instrucción With:

With Foo.bar.blah
    .baz = .qaz(1)
    If .zaq = .abc Then '...
    ...
End With

Tenga en cuenta que esta sugerencia también se puede aplicar a la programación en VB.

Response.Flush

Uno de los problemas que se plantean con el búfer de respuesta es los usuarios perciben que la respuesta que obtienen de las páginas ASP es menor (aunque el tiempo global de respuesta se haya mejorado) ya que deben esperar a que se genere toda la página antes de poder ver algo. En el caso de las páginas que tardan en cargarse, se puede activar el búfer de respuesta con Response.Buffer = False. Sin embargo, una estrategia mucho más eficaz sería utilizar el método Response.Flush, que descarga todo el HTML de ASP en el explorador. Por ejemplo, después de que aparezcan 100 filas de una tabla de 1.000, ASP puede llamar a Response.Flush para que fuerce los resultados y que éstos aparezcan en el explorador; de esta forma el usuario puede ver las primeras 100 filas antes de que las restantes estén listas. Esta técnica puede proporcionar además lo mejor de ambos métodos: el búfer de respuesta combinado con la presentación gradual de los datos en el explorador.

(Es importante señalar que en el ejemplo anterior de una tabla de 1.000 filas, muchos exploradores no empezarán a cargar la tabla hasta que vean la etiqueta de cierre </table>. Compruebe los exploradores para obtener información sobre compatibilidad. Para solucionar este problema, intente dividir la tabla en varias más pequeñas con menos filas cada una de ellas y llame a Response.Flush después de cada tabla. Las últimas versiones de Internet Explorer mostrarán las tablas antes de descargarlas completamente y lo harán a una velocidad considerable especialmente si se especifica la anchura de columna previamente; con esto, Internet Explorer se evita tener que calcular la anchura de la columna en función del contenido de cada celda).

Otro de los problemas más comunes que presenta el búfer de respuesta es que puede utilizar gran parte de la memoria del servidor cuando genera páginas muy extensas. Dejando a un lado la cuestión de si es recomendable o no generar páginas extensas, también se puede hacer frente a este problema utilizando Response.Flush.


 

El ASP nos ayuda a darle dinamismo a nuestros sitios con la construcción de páginas dinámicas.
Una de sus cualidades más importantes, es su interacción con bases de datos.

En el siguiente taller leeremos los contenidos de una base de datos Access que contiene 3 campos: Nombre, Email y URL, con los que alimentaremos unas tablas para nuestras páginas.

La base de datos que utilizamos puede ser descargada aquí.

Y para facilitar el entendimiento del ejemplo,
se comentará directamente en el código ASP para una mejor explicación.
Recuerden que para comentar el código en ASP, se utiliza una comilla simple (').
El código ASP está denotado en color azul.

<HTML>
<HEAD><TITLE>Leyendo una base de datos de Access con ASP</TITLE></HEAD>
<BODY>
<TABLE BORDER="1">
<TD><B>Nombre<B></TD>
<TD><B>Email<B></TD>
<TD><B>Url<B></TD>

<%
Dim conexion, registros, basedatos

' El primer paso consiste en declarar algunas variables que nos serán de utilidad.
' De estas tres variables, utilizaremos la primera para nuestra conexión a la base de datos, la segunda para seleccionar los registros y la tercera para ingresar la dirección donde se encuentra nuestra base de datos.


basedatos = Server.MapPath("ejemplo.mdb")

' En la asignación anterior, la instrucción Server.Mappath nos da el Path completo en el servidor hacia el archivo ejemplo.mdb que se encuentra en el mismo directorio que el ejemplo.
' También se puede utilizar el path completo para definir esta variable que quedaría algo así:
' basedatos = "c:\Inetpub\wwwroot\ejemplo.mdb"


Set conexion = Server.CreateObject("ADODB.Connection")

' Declaramos nuestra conexión a bases de datos.

conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & basedatos & ";"
' Abrimos la conexión a través del OLE Driver., indicandole la dirección de la base de datos por medio de la variable que declaramos algunas líneas antes.
' Así como utilizamos el OLE Driver, también pudimos utilizar una conexión por medio del ODBC y un DNS declarado en el sistema, aunque este Driver es el más rápido y recomendado para utilizar.


Set registros = conexion.Execute("SELECT * FROM Ejemplo ORDER BY Ejemplo.Nombre")
' A continuación, declaramos en registro los datos que estaremos seleccionando en la base de datos.
' Por medio de lenguaje SQL Seleccionamos todos los campos de la tabla Ejemplo, ordenándolos por el campo Nombre.


Do While Not registros.EOF
' Para empezar a mostrar los registros, utilizamos un CICLO que se repetirá mientras no lleguemos al final de los registros encontrados.
' Luego de esto, iremos tomando los valores de la base de datos e imprimiéndolos dentro del HTML.

%>
<TR>
<TD>
<%= registros.Fields("Nombre").Value %></TD>
<TD><A HREF="mailto:
<%= registros.Fields("Email").Value %>"><%= registros.Fields("Email").Value %></A></TD>
<TD><A HREF="
<%= registros.Fields("URL").Value %>"><%= registros.Fields("URL").Value %></A></TD>
</TR>

<%
registros.MoveNext
Loop

' Cada vez que se ejecuta el ciclo, le pedimos por medio de .MoveNext que pase al siguiente registro encontrado
' La instrucción Loop es la que indica hasta donde debe de repetirse el ciclo.


registros.Close
Set registros = Nothing
conexion.Close
Set conexion = Nothing

'Algo muy importante que debemos recordar es cerrar nuestras conexiones, para no dejar la base de datos abierta.
' Para esto, primero la cerramos por medio de .Close y a continuación es recomendable declararles valores de "nada", para dejar las variables limpias.

%>

</TABLE>
</BODY>
</HTML>

Como apreciamos, el comunicarse con una base de datos no es tan complicado y nos permite crear páginas con contenidos que pueden estar actualizándose fácilmente por medio de actualizaciones a la base de datos y no a nuestros archivos HTML.