PDC : ASP.Net Runtime Core et ASP.NET Futures

by Nicolas Calvi 18. novembre 2009 08:17

Deux sessions sur les nouveautés de ASP.NET 4.0

-          Peu de nouveauté sur l’ASP.Net 4.0 au niveau du core :

o   Quelques modifications sur les sessions : avec la possibilité de compresser la session, de les désactiver globalement dans le aspnet.config ou par code pour plus de précision et désactiver la fonctionnalité par page ou control.

o   Des modifications sur le cache pour pouvoir faire son custom provider de cache.

o   La nouveauté la plus intéressante est la fonctionnalité de warm up de IIS 7.5. Le principe est d’informer IIS de faire des appels à des URI au lancement des applications pool. La configuration peut être fait à la fois au niveau de IIS ou au niveau du web.config des applications.

L’effort à surtout été fourni sur l’optimisation des performances et l’ajout de quelques classes « Helper » comme le redimensionnement d’images ou l’ajout de la validation par mail dans le wizard de création de login.

Egalement présenté, la possibilité de regrouper plusieurs images au sein d’une seule et même image afin de réduire le nombre de requêtes.

En bref, pas de changement fondamentaux mais pas mal de petit plus pour nous simplifier la vie.

Référencer des scripts dans une MasterPage

by Nicolas Calvi 27. avril 2009 15:11

Il m'est arrivé récemment d'avoir un problème de référencement de me scripts JavaSript dans ma MasterPage. En effet ayant une arborescence compliquée (cf. ci-dessous), les chemins des fichiers se perdent un peu au moment du rendu.

> Site (Contient des pages qui implémente mes MasterPage)
    > Scripts (Contient mes fichiers js)
    > Master (Contient mes MasterPage)
    > CollectionPage1 (Contient des pages qui implémente mes MasterPage)
        > CollectionPage2 (Contient des pages qui implémente mes MasterPage)
    > CollectionPage3 (Contient des pages qui implémente mes MasterPage)

La question est donc : Comment référencer des scripts dans une MasterPage afin que le chemin soit toujours juste, et ce, peux importe ou se trouve ma page dans mon arborescence projet ? La réponse est de référencer les scripts dans l'événement Page_PreRender de la MasterPage (ou page) et faire un ResolveUrl sur le chemin du script, afin qu'a chaque rendu, la MasterPage puisse trouver le script sans problème, peut importe la page qui l'appelle.

protected void Page_PreRender(object sender, EventArgs e)
{
  this.Page.ClientScript.RegisterClientScriptInclude("MonScript1", this.ResolveUrl("~/Scripts/MonScript1.js"));
  this.Page.ClientScript.RegisterClientScriptInclude("MonScript2", this.ResolveUrl("~/Scripts/MonScript2.js"));
  this.Page.ClientScript.RegisterClientScriptInclude("MonScript3", this.ResolveUrl("~/Scripts/MonScript3.js"));
}

[Maj] Créer une propriété dans le ViewState

by Nicolas Calvi 9. janvier 2009 14:58

Suite au billet publié récement sur comment créer une propriété dans le ViewState, l'un de mes collègues (Guillaume ROUCHON) m'a alerté sur le fait que cela pouvait être optimisé. En effet, dans l'exemple précédent, si la propriété est accédée nous affectons une valeur par défaut au ViewState si celle-ci était Null. Par cette action nous faisons grossir le ViewState par des données inutiles vu que la valeur par défaut ne change pas.

Voici donc une méthode qui permet de ne renseigner le ViewState si et seulement si la valeur stockée est différente de sa valeur par défaut :

public string MaProp
{
  get
  {
    object value = this.ViewState["MaProp"];

    if (value != null)
    {
      return ((string)value);
    }

    return (string.Empty);
  }
  set
  {
    this.ViewState["MaProp"] = null;

    if ( !string.IsNullOrEmpty(value) )
    {
      this.ViewState["MaProp"] = value;
    }
  }
}

Par cette simple modification, on affecte le ViewState seulement si la valeur par défaut est différente, ce qui allège sa taille et donc les performances de la page, car cela limite sa taille et son temps de transport sur le réseau.

 

Créer une propriété dans le ViewState

by Nicolas Calvi 25. novembre 2008 11:58

Une des questions qui revient souvent quand on développe en ASP.Net, c'est comment persister facilement et simplement une donnée sur une page dans le ViewState pour pouvoir la réutiliser à chaque PostBack. Avant de faire cela il faut déjà comprendre que cela à un coup.

En effet la moindre information persistée dans le ViewState prend beaucoup de place et donc alourdit la page et son chargement, il faut donc l'utiliser avec beaucoup de précaution. Il faut savoir aussi que seules les données sérialisables peuvent être ajoutées au ViewState.

Ensuite il suffit de procéder comme ceci pour créer sa propriété dans sa page :

public string MaProp
{
  get
  {
    if ( this.ViewState["MaProp"] == null )
    {
      this.ViewState["MaProp"] = String.Empty;
    }

    return((string)this.ViewState["MaProp"]);
  }
  set
  {
    this.ViewState["MaProp"] = value;
  }
}

Vous pouvez remarquer que le nom de la clé dans le ViewState est la même que ma propriété, même si cela n'est pas obligatoire cela permet une meilleurs relecture et ajoute une cohérence à notre code.

Dans le cadre du GET je test si le ViewState possède déjà ma clé, si ce n'est pas le cas on lui affecte une valeur par défaut pour permettre une initialisation automatique, pensez à bien caster le retour du GET.