ASP peut exécuter vos pages Web dynamiques rapidement, mais vous pouvez également les accélérer en compressant le code et les connexions à la base de données. Il s'agit d'un article détaillé sur la manière de rationaliser le code et les fonctionnalités ASP pour obtenir la vitesse d'exécution la plus rapide. Pour un utilisateur impatient, tout délai entre l'appui sur un bouton utilisateur et l'apparition du résultat sur son écran pourrait signifier qu'il navigue sur un autre site ? Si vous possédez un site commercial, cela pourrait vous faire perdre des ventes potentielles.
Nous n'avons aucun moyen de contrôler la bande passante de l'utilisateur, mais nous obtenons les meilleures performances en optimisant le site ASP. La plupart des améliorations potentielles des performances résultent de modifications du système plutôt que d'un resserrement du code. Une idée inappropriée consiste à demander à l'administrateur système de mettre à niveau le système lorsque vous rencontrez des problèmes d'efficacité du système.
Premièrement, quels facteurs pourraient affecter les performances d’Asp ? Malheureusement, il existe de nombreux facteurs ? En voici quelques-uns :
bande passante disponible
La vitesse du processeur et des autres matériels du serveur
D'autres programmes exécutés sur le serveur (comme ces économiseurs d'écran OpenGL !)
Mode de connexion à la base de données, pool de connexions, système de base de données lui-même (par exemple, Oracle est meilleur que SQL Server, SQL Server est meilleur qu'Access)
langue utilisée
Les procédures stockées sont meilleures que les instructions SQL basées sur les lignes
Utilisez des composants compilés au lieu de VB ou JavaScript, une bonne expérience en programmation ASP, comme la gestion des erreurs, etc.
Certains des facteurs ci-dessus peuvent déjà être remarqués par les développeurs ayant des connaissances et une expérience d'IIS, mais d'autres peuvent être des problèmes très complexes pour eux. Dans cet article, nous allons essayer d'expliquer tous les facteurs qui affectent les performances d'Asp* et examiner les principales choses qui peuvent être faites en quelques millisecondes de rasage.
Taille du script ASP
Votre page de script (et d’autres pages) est-elle plus longue que nécessaire ? C'est quelque chose qui réduira les performances d'Asp* dès son exécution. Les scripts ASP sont utiles pour obtenir des informations et formater la sortie, mais les scripts sont également interprétés ligne par ligne, donc plus votre script est long, plus son exécution prendra du temps.
Si votre script est volumineux, que pouvez-vous faire pour réduire sa longueur ? Voici quelques suggestions :
Pouvez-vous les convertir en composants côté serveur, c'est-à-dire en DLL VB ou en composants non compilés via des langages de programmation Windows avancés ou des langages d'interface COM appropriés ? Et enregistrez-les côté serveur. Un guide rapide peut être trouvé sur
Trouvé sur http://www.webdevelopersjournal.com/articles/activex_for_asp.html. Compiler un composant ActiveX bien écrit peut non seulement améliorer considérablement les performances, mais également protéger vos logiciels (scripts), notamment lorsque vous publiez votre site ASP sur un hébergeur tiers.
Les scripts étant interprétés ligne par ligne, les performances peuvent être améliorées en éliminant les scripts redondants ou en créant des scripts plus efficaces. Si vous avez des centaines de lignes de code dans un seul fichier ASP, vous pourrez probablement ainsi séparer correctement les utilisateurs, les transactions et les services de données. En fait, si vous faites cela, vous risquez de trouver du code redondant : si vous devez générer plusieurs tables, vous pouvez écrire une fonction générale pour générer une table et l'appeler simplement plusieurs fois.
Lorsqu'on parle de la taille des scripts Asp, il faut mentionner la taille des fichiers inclus. Lorsque vous utilisez un fichier d'inclusion, l'intégralité du fichier d'inclusion est chargée. Lorsque le fichier d'inclusion est inclus, cela équivaut à écrire cette partie du code dans le fichier Asp lui-même. Par conséquent, si vous définissez de nombreuses méthodes et définitions courantes dans un long fichier d'inclusion, sachez que lorsque vous incluez le fichier, que vous souhaitiez utiliser chaque méthode ou définition, il sera inclus dans l'intégralité du fichier chargé. ASP met en cache tout le code d'extension, ce qui réduit l'efficacité de la recherche. Dans ce cas, le fichier inclus doit être divisé en fichiers plus petits et modulaires. Comprenez également que les fichiers d'inclusion sont traités comme des requêtes de page distinctes par le serveur et que l'utilisation d'un trop grand nombre de fichiers d'inclusion peut affecter les temps de téléchargement.
<!-- #include file=Header.asp -->
<!-- #include file=Footer.asp -->
<Langage SCRIPT=vbscript runat=serveur>
Sous-principal()
En-tête d'écriture
ÉcrireCorps
Écrire le pied de page
Fin du sous-marin
SubWriteBody()
...
Fin du sous-marin
Principal?'Procédure d'appel Principal
</SCRIPT>
Si votre script est long, utilisez Response.IsClientConnected. Cela signifie que le processeur de votre serveur peut éviter d'attendre en boucle lorsque le client n'est plus connecté au serveur.
<%
'Vérifiez si le client est toujours connecté
Si ce n'est pas le cas Response.IsClientConnected alors
"Toujours connecté, gestionnaire
Autre
'déconnecter
Fin si
%>
Intercalation d'ASP et de HTML
Est-ce que tout le monde fait ça ? Lorsque nous produisons le tableau, nous convertissons entre le code ASP et HTML, ce qui est une mauvaise habitude. Par exemple:
<HTML>
<CORPS>
<%
Définir MyConn = Server.CreateObject (ADODB.Connection)
MdbFilePath = Server.MapPath (exemple.mdb)
MyConn.Open Driver={Pilote Microsoft Access (*.mdb)}; DBQ= & MdbFilePath & ;
SQL_query = SELECT * FROM Amis
Définir RS = MyConn.Execute (SQL_query)
PENDANT QUE PAS RS.EOF
%>
<LI><%=RS(Nom)%> : <A HREF=>Page d'accueil</A>
<%
RS.MoveNext
WEND
%>
</CORPS>
</HTML>
Un autre exemple courant est celui de l'utilisation d'une instruction IF :
<%
Si ce n'est pas une session (DBOpen) alors
%>
<H1>Base de données non connectée</H1>
<%
Autre
%>
<H1>Base de données ouverte</H1>
<%
Fin si
%>
Dans ces cas, les performances du script peuvent être améliorées en écrivant ensemble le script côté serveur et en utilisant Response.write pour générer le code HTML. Par exemple:
<%
Si ce n'est pas une session (DBOpen) alors
Response.Write <H1>Base de données non connectée</H1>
Autre
Response.Write <H1>Base de données ouverte</H1>
Fin si
%>
Dans le cas de scripts volumineux et de nombreux scripts, vous constaterez des améliorations de performances. Notez que l'utilisation de balises <% est évitée autant que possible, afin d'améliorer les performances, ASP n'a pas besoin de calculer le code Ascii des caractères lors de l'exécution du script.
Statut de la session
Il ne fait aucun doute que la possibilité de maintenir un certain état via la session est une fonctionnalité très puissante d'ASP. Cependant, cela peut affecter vos* performances. Évidemment, l'évolutivité de votre site devient un autre problème si vous limitez l'utilisation des sessions. Cependant, les sessions consomment des ressources serveur pour chaque utilisateur.
Que se passe-t-il si vous n'utilisez pas de variables de session, ou en fait, vous n'êtes pas obligé de le faire ? L'utilisation de champs de formulaire masqués, l'enregistrement des données dans la base de données et les chaînes de requête sont-ils une solution ? Vous devez donc désactiver l'état de session. Vous pouvez désactiver l'utilisation de la session avec l'instruction suivante :
@EnableSessionState = Faux
De cette façon, ASP ne vérifiera plus les informations de session.
Si vous devez vous fier à l'état de la session, vous devez éviter de stocker de grandes quantités de données dans l'objet de session. La session dans IIS sera maintenue tant que le cookie HTTP du client sera disponible, ce qui entraînera l'occupation de la mémoire occupée par la session jusqu'à ce que la session se termine ou expire. De cette façon, si plusieurs utilisateurs utilisent votre programme en même temps, les ressources de votre serveur risquent d'être épuisées.
Accès à la base de données
L'accès à la base de données est indispensable ? L'accès à une base de données ralentira considérablement votre application, mais il est évident que de nombreux sites ne valent rien sans base de données. Mais en accédant à la base de données via des procédures stockées au lieu d'utiliser des instructions SQL intégrées, vous pouvez augmenter les performances potentielles. Ils disposent également d'une bonne flexibilité* grâce à l'utilisation de procédures stockées et d'ActiveX Data Objects (ADO). Dans la mesure du possible, extrayez les données des procédures stockées.
Assurez-vous que votre base de données dispose d'index, car cela améliorera directement l'efficacité de votre programme. Essayez également d'exécuter Mettre à jour les statistiques sur votre serveur de base de données pour vous aider à suivre la distribution de vos données afin que votre base de données puisse modifier l'exécution des requêtes en fonction de ces informations. Notez que certaines bases de données, telles que MS Access, sont vraiment acceptables dans les programmes d'entreprise ? SQL Server 7.0 ou Oracle est un meilleur choix.
Laissez SQL fonctionner comme il a été conçu pour compter, joindre, trier et regrouper les données. Lorsque vous pouvez écrire une instruction de requête pour effectuer ces tâches, ne le faites pas vous-même dans d'autres langues.
Voici la syntaxe la plus simple pour compter toutes les colonnes :
SELECT count(*) FROM éditeurs WHERE state='NY'
Si vous comptez une colonne spécifique, vous devez utiliser l'instruction group by pour regrouper cette colonne, sinon cela ne fonctionnera pas :
SELECT count(city),city FROM éditeurs GROUP BY city
Données catégorisées renvoyées :
SELECT * FROM TableName WHERE FieldName>50 OU FieldName<100 ORDER BY FieldName2, Field Name3
Utiliser Odbc ou fichier DSN pour vous connecter à la base de données ? Utilisez la technologie rapide du fournisseur OLEDB pour vous connecter à votre base de données au lieu d’utiliser une connexion DSN. Plus besoin de demander à votre FAI (ou administrateur de base de données/administrateur réseau) de configurer un DSN système pour vous, et aucune modification de configuration lorsque vous déplacez des fichiers Web.
OLEDB se situe entre la couche ODBC et l'application. ADO est une application au-dessus d'ODEDB dans vos pages ASP. Vos appels ADO sont d'abord envoyés à OLEDB puis à la couche ODBC. Cependant, vous pouvez vous connecter directement à la couche OLEDB et, si vous le faites, vous constaterez des améliorations des performances côté serveur. Cependant, Comment se connecter directement à OLEDB ?
Si vous utilisez SQLServer 7, utilisez le code de connexion suivant pour vous connecter à la base de données :
strConnString = DSN='';DRIVER={SQL SERVER};
UID=monuid;PWD=monpwd;
DATABASE=MaBase de Données;SERVEUR=MonServeur;
Le paramètre le plus important est la partie DRIVER=. Si vous souhaitez contourner ODBC et vous connecter à SQL Server à l'aide d'OLEDB (qui est une connexion plus rapide), utilisez la syntaxe suivante :
strConnString =Provider=SQLOLEDB.1;Mot de passe=mon mot de passe;
Persist Security Info=True;ID utilisateur=myuid;
Catalogue initial = mon nom de base de données ;
Source de données = mon serveur ; délai d'attente de connexion = 15
Y a-t-il quelque chose qui ne va pas ?
Maintenant, vous vous demandez peut-être : quel est notre intérêt dans cette nouvelle méthode de connexion ? Pourquoi ne pas utiliser l’approche DSN standard/DSN système ? Eh bien, selon les résultats des tests de Wrox dans son livre « ADO 2.0 Programmer's Reference », si vous comparez la connexion OLEDB avec la méthode de connexion DSN ou sans DSN, vous découvrirez les améliorations suivantes :
*Peut comparer :
Accès SQL
OLEDBDSNOLEDBDSN
Temps de connexion : 18 ? 82 ? Temps de connexion : 62 ?99
Temps pour interroger 1 000 enregistrements : 29005400 Temps pour interroger 1 000 enregistrements : 100950
Remarque : Ce résultat se trouve aux pages 232 et 233 du livre "ADO 2.0 Programmer's Reference" de Wrox. Le temps est mesuré en millisecondes et le temps de requête pour 1 000 enregistrements est calculé à l'aide d'un curseur côté serveur (il n'y a pas beaucoup de différence de performances entre les jeux d'enregistrements OLEDB et DSN lors de l'utilisation de curseurs côté client).
Problème de décodage ASP :
Validez les entrées utilisateur côté client autant que possible pour réduire le nombre de requêtes HTTP aller-retour. Si votre navigateur a la capacité de prendre en charge JavaScript ou d'autres scripts, utilisez leur puissance pour libérer davantage de ressources serveur.
Le VBScript suivant s'exécute dans le navigateur client pour valider les informations utilisateur avant de les soumettre à votre serveur :
<LANGUE SCRIPT=VBScript>
<!--
Sous btnEnter_OnClick
DimLeForme
Définir TheForm = Document.MyForm
Si IsNumeric(TheForm.Age.Value) Alors
LeFormulaire.submit
Autre
Msgbox Veuillez entrer un âge numérique.
Terminer si
Fin du sous-marin
//-->
</SCRIPT>
<FORMmethod=POST name=MyFormaction=myfile.asp> Nom : <INPUT typr=text name=Name>
Âge : <Type d'ENTRÉE=nom du texte=Âge>
<INPUT type=nom du bouton=btnEntervalue=Entrée>
</FORMULAIRE>
Utilisez des variables locales et évitez les variables globales. Les variables locales sont accessibles plus rapidement par le moteur de script Asp que les variables globales, car il n'est pas nécessaire de rechercher l'intégralité du domaine de noms. Évitez de modifier les définitions de tableau. Il est plus efficace d'attribuer simplement une taille suffisante lors de la première initialisation. Dans ce cas, vous risquez de perdre de la mémoire, mais vous bénéficiez de l'avantage de la vitesse. Cette technique est évidemment efficace lorsque le serveur est fortement sollicité.
Si vous devez référencer un objet qui n'est pas forcément utilisé, il est préférable d'utiliser la balise <OBJECT> plutôt que d'utiliser la méthode Server.CreateObject. L'utilisation de Server.CreateObject entraîne la création immédiate de l'objet. Au contraire, la balise <OBJECT> ne crée pas l'objet immédiatement. Si vous n'utilisez pas l'objet après l'avoir défini avec <object>, vous ne gaspillerez pas de ressources.
Par exemple : L'exemple suivant utilise la balise <OBJECT> pour créer une implémentation d'objet Ad Rotator de roue publicitaire au niveau de l'application.
exemple:
<OBJECT runat=server scope=Application id=MyAds progid=MSWC.AdRotator>
</OBJET>
Après avoir stocké l'objet Ad Rotator dans l'application, vous pouvez accéder à l'objet dans n'importe quelle page du programme en utilisant la syntaxe suivante
<%=MyAds.GetAdvertisement(CustomerAds.txt) %>
Activez le commutateur « Option explicite ». En VB et VBScript, vous pouvez utiliser des variables sans déclaration explicite. Mais l'activation de cette option peut identifier et définir des variables, ce qui permet de bien écrire des variables et d'aider à améliorer les performances. Les variables locales non définies sont plus lentes car l'espace de noms doit être recherché pour voir si la variable existe avant de la créer. Débarrassez-vous-en et définissez chaque variable clairement (définissez d'abord, utilisez plus tard).
C'est une bonne habitude, cela peut piéger les fautes de frappe et c'est plus rapide.
Sauf si vous en avez vraiment besoin, n'utilisez pas la méthode Server.MapPath. Utilisez le vrai chemin si vous le connaissez. L'utilisation de MapPath nécessite qu'IIS récupère le chemin actuel du serveur, ce qui signifie qu'une requête spéciale doit être envoyée au serveur, ce qui entraîne une réduction des performances. Une autre méthode consiste à stocker le chemin dans une variable locale et à l'utiliser en cas de besoin, afin que le serveur n'ait pas besoin de le rechercher plusieurs fois.
Vérifiez comment vous allez
Vous pouvez mesurer les performances de votre système grâce à des outils tels que System Performance Monitor, netMon et PerfMon. Pour tester les performances Web*, vous pouvez utiliser WCAT (Web Capacité Analysis Tool). À l'aide de WCAT, vous pouvez tester la capacité de votre serveur IIS et de votre configuration réseau à répondre à une grande variété de demandes de clients, de données ou de pages HTML. Ces résultats de tests peuvent être utilisés comme conseils pour optimiser les configurations de votre serveur et de votre réseau. WCAT est spécifiquement conçu pour estimer la quantité de charge de travail client à laquelle les services Internet sous Windows 2000 (ou Windows NT) et IIS peuvent répondre.
(simulation). Pour plus d’informations, consultez le Kit de ressources IIS. Il existe également un long guide de l'utilisateur WCAT sur le site Web de l'atelier MSDN Online avec un lien de téléchargement. Si vous êtes sérieux au sujet de vos capacités Asp*, assurez-vous de vous procurer cet outil.
Efforcez-vous d'optimiser les performances des applications et votre application Web fonctionnera plus facilement. N'affectez pas les performances du serveur si vous n'en avez pas vraiment besoin.
asp utilise des procédures stockées pour implémenter la pagination des données
1. Créer une table tiku_koushi
s'il existe (sélectionnez * dans dbo.sysobjects où id =
object_id(N'[dbo].[tiku_koushi]') et OBJECTPROPERTY
(identifiant, N'IsUserTable') = 1)
déposer la table [dbo].[tiku_koushi]
ALLER
CRÉER UNE TABLE [dbo].[tiku_koushi] (
[id] [int] IDENTITÉ (1, 1) NON NULLe,
[titre] [varchar] (250) COLLATE
Chinois_PRC_CI_AS NULL ,
[list2_id] [char] (10) COLLATE
Chinois_PRC_CI_AS NULL
) SUR [PRIMAIRE]
ALLER
2. Procédure stockée sp_c
CRÉER proc sp_c
@tablenamevarchar(50),
@titre varchar(250),
@list2_idvarchar(50)
comme
si @tablename='tiku_koushi'
sélectionnez count(*) depuis tiku_koushi où le titre est comme '%'+@title+'%' et list2_id=@list2_id
ALLER
3. Procédure stockée sp_search_tiku
CRÉER UNE PROCÉDURE sp_search_tiku
@tablenamevarchar(50),
@titre varchar(250),
@list2_idvarchar(10),
@pagesize entier,
@page int
COMME
si @tablename='tiku_koushi'
commencer
déclarer @ks int
déclarer @str varchar(200)
définir @ks=@pagesize* (@page-1)
s'il n'existe pas (sélectionnez * dans dbo.sysobjects où id = object_id(N'[dbo].[temp_table91]') et OBJECTPROPERTY(id, N'IsUserTable') = 1)
commencer
sélectionnez * dans temp_table91 depuis tiku_koushi où
titre comme '%'+@title+'%' et list2_id=@list2_id ordre
par identifiant desc
définir le nombre de lignes @pagesize
set @str='select * from temp_table91 où l'identifiant n'est pas présent
(sélectionnez en haut l'identifiant '+str (@ks)+' de temp_table91)'
exécuter (@str)
supprimer la table temp_table91
fin
fin
ALLER
4. search_koushi.asp
<!-- #include file=conn.asp -->
<%
ligne=6
si demande(page)= alors
page=1
autre
page=demande(page)
finir si
si page <1 alors
page=1
finir si
titre=trim(demande(titre))
list2_id=trim(requête(list2_id))
set rs2=conn.execute(sp_c 'tiku_koushi','&title&','&list2_id&')
nombre de pages=CInt(rs2(0)/ligne)
si (CInt (rs2 (0)) ligne mod) = 0 alors
nombre de pages=compte de pages
autre
nombre de pages=compte de pages+1
finir si
si CInt(page)>=pagecount alors
page=CInt(compte de pages)
finir si
str=
str=str&page=&page&&title=&title&&list2_id=&list2_id
définir rs = conn.execute
(sp_search_tiku 'tiku_koushi','&title&','&list2_id&','&line&','&CInt(page)&')
si rs.eof alors
réponse.écrire aucun enregistrement
autre
%>
<html>
<tête>
<style type=text/css>
td{taille de police:12px;}
une{text-decoration:aucun;}
</style>
<langage de script=javascript>
</script>
</tête>
<corps>
<largeur du tableau=518 border=1 bordercolorlight=000000
bordercolordark=#ffffff
align=center cellpadding=0 cellpacing=0>
<!--DWLayoutTable-->
<tr bgcolor=#dfdfdf>
<td width=454 align=center height=24 valign=middle>Questions de l'examen oral</td>
<td width=63 align=center valign=middle>Supprimer</td>
</tr>
<% faire jusqu'à rs.eof %>
<hauteur tr=22>
<td valign=middle>·<a href=void(0)
onclick=window.open('editkoushi.asp?id=<%=rs(id)%>&page=<%=page%>&title=<%=title%>&list2_id=<%=list2_id%>','' ,'largeur=518
hauteur=160 gauche=100')>
<%=rs(title)%></a></td>
<td align=center valign=middle>Supprimer</td>
</tr>
<%
rs.movenext
boucle
%>
<tr align=left valign=middle bgcolor=efeff6
hauteur=22>
<td colspan=2 style=padding-left:6px;>
<a href=search_koushi.asp?page=<%=1%>&title=<%=title%>&list2_id=<%=list2_id%>>Page d'accueil</a> <a
href=search_koushi.asp?page=<%=page-1%>&title=<%=title%>&list2_id=<%=list2_id%>>Page précédente</a> <a
href=search_koushi.asp?page=<%=page+1%>&title=<%=title%>&list2_id=<%=list2_id%>>Page suivante</a> <a
href=search_koushi.asp?page=<%=pagecount%>&title=<%=title%>&list2_id=<%=list2_id%>>Dernière page</a>
Un total de <%=pagecount%> pages. La page actuelle est : <%=page%>/<%=pagecount%> pages.
Il y a <%=rs2(0)%> enregistrements au total</td>
</tr>
</table>
</corps>
</html>
<%
rs2.fermer
définir rs2 = rien
rs.fermer
définir rs = rien
finir si
%>