avril
2009
Je vous présente ici une méthode qui peut permettre de connaitre la taille finale de sa page, à des buts de profiling par exemple ou simplement de log.
Pour ce faire, on peut intercepter l’événement de l’application PostReleaseRequestState qui se produit lorsque ASP.NET a terminé l’exécution de tous les gestionnaires d’événements de requête et lorsque les données d’état de requête ont été stockées.
Pour s’abonner à cet événement, on peut passer par un HttpModule, mais on peut aussi utiliser le Global.Asax .
La solution proposée va être d’utiliser l’objet Response.Filter qui va permettre d’intercepter le code html généré avant la transmission au navigateur.
On l’utilise en créant une classe dérivée de Stream, en général pour le modifier. Dans notre cas, on ne va rien modifier, juste « compter ».
{
protected void Application_PostReleaseRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Handler is Page)
{
Response.Filter = new LengthFilterStream(Response.Filter);
}
}
}
Dans cet exemple, je filtre en testant le type du Handler, mais on peut aussi filtrer avec le contenu mime.
Par exemple
lors d’une requete Ajax.
Le code de la classe hériant de Stream pourrait être le suivant :
{
private int taille;
private readonly Stream outputStream;
public LengthFilterStream(Stream output)
{
outputStream = output;
}
public override void Write(byte[] buffer, int offset, int count)
{
taille += count;
outputStream.Write(buffer, offset, count);
}
protected override void Dispose(bool disposing)
{
Logger.Log(string.Format(« Taille de la page {0} : {1} », HttpContext.Current.Request.Url, taille));
base.Dispose(disposing);
if (disposing)
outputStream.Dispose();
}
}
On hérite plutôt de MemoryStream, comme ca, on a déjà toute la logique implémentée.
Comme la page est envoyée en plusieurs bouts, chaque appel à Write n’est pas forcément unique, c’est pour ca qu’on logue lorsque l’objet est disposé.
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007