Booster les performances de votre Magento avec Varnish!

Booster les performances de votre Magento avec Varnish!

C’est un fait et tous les développeurs de Magento s’en plaignent un jour ou l’autre : Magento est lent.

Alors il existe pas mal de “trucs” pour accélérer une boutique Magento :

  • optimiser la configuration de mysql, apache…
  • activer le cache, si possible le full page cache
  • utiliser APC ou Xcache ou autre
  • activer la compression gzip
  • utiliser un CDN pour les fichiers statiques
  • utiliser la mémoire comme espace de stockage du cache, des sessions
  • optimiser les images
  • minifier les css, les javascripts
  • utiliser le “flat catalog” de Magento
  • utiliser la compilation de Magento

Et il y en a d’autres ! En fait toutes ces astuces ou presque concernent des “bonnes pratiques” qui ne sont pas vraiment spécifiques à Magento… et même si on les applique à la lettre la lourdeur de Magento reste un problème sur les boutiques assez conséquentes.

La solution : Varnish !

Varnish est un serveur de cache HTTP ultra-puissant. Le principe est simple : après un premier chargement de page, les suivants chargements seront ultra rapides car ils ne feront plus appel à des traitements serveurs ou des requêtes de base de données. En fait c’est le principe du cache me direz-vous, oui sauf que Varnish va au-dela des performances des autres caches car il s’agit en fait d’un proxy qui se place directement entre votre frontend et votre serveur web (apache, nginx) et permet de mettre toute une page en cache pour la délivrer à tous les clients tout en gérant des “blocs dynamiques” propres à chacun (par ex : l’affichage du panier ou du nom) via les ESI.

varnish_logo-closeup

Une fois que vous avez installé Varnish sur votre serveur, il y a de fortes chances que vous soyez déçus par votre Magento car, de base, la configuration de Varnish n’est pas tellement adaptée, ne serait-ce que parce qu’il ne met pas en cache les pages avec des cookies, et que Magento crée un cookie dès que l’on arrive sur le site…

Du coup, quelques modules Magento ont vu le jour pour optimiser ça. J’en ai essayé plusieurs… mais celui que j’ai retenu, et de loin, et que je vous recommande, c’est magento-turpentine.

Le développeur est de plus sympa, réactif, vous aidera en cas de problème, et le module est vraiment bien fini même si c’est toujours une version beta. Les fonctionnalités apportées sont :

  • Cache “full page“, avec utilisation des blocs dynamiques chargés avec les ESI Varnish ou par Ajax
  • Mise en cache des pages même pour les visiteurs identifiés, même pour les pages avec session/cookie
  • Configuration de Varnish via l’interface de Magento pour la plupart des choses (pour les réglages vraiment pointus et spécifiques à votre application il faudra quand même mettre la main à la pâte)
  • Permet de générer et d’appliquer votre configuration Varnish “à la voléesans redémarrage du serveur
  • Blacklistage d’URL ou de paramètres GET
  • Automatisation du vidage de cache par action (sauvegarde d’un produit par exemple)
  • Support pour les installations Magento multi-boutique/multi-site

Je vous laisse découvrir les fonctionnalités plus en détails sur le site de l’extension…

J’ai eu à mettre en place ce Varnish dans un cas assez complexe sur les sites de la marque Alice’s Garden, www.resine-factory.com & ses petites frères :

  • Magento multi-boutique
  • Les boutiques sont sur des domaines différents
  • Les boutiques ont un panier partagé ET session client partagée (identification sur site-A.com conservée lors du passage à site-B.com)
  • Paramètres Google Analytics dans les URL pour tracker le traffic venant du site-A.com vers site-B.com

Les problèmatiques ont été multiples :

  • les paramètres liées au transfert de session d’un domaine à l’autre ainsi que les paramètres liés à Google Analytics doivent bien être conservés MAIS ne doivent pas être pris en compte pour la mise en cache de la page ou pour aller rechercher la dite page dans le cache : tous les utilisateurs doivent utiliser la même page en cache même si ces paramètres sont différents
  • en revanche, les autres paramètres (exemple : choix d’un attribut dans une page catalogue avec filtres) doivent bien être pris en compte pour la mise en cache, si on filtre sur la couleur bleue on ne s’attend pas à avoir la même page que les éléments de couleur rouge !
  • Varnish doit évidemment bien transmettre la session d’un domaine à l’autre
  • certains blocs sont chargés dynamiquement et spécifiques au client
  • les produits sont mis à jour par un service externe

Bientôt, un article plus technique sur la mise en place d’une configuration Varnish adaptée à ces besoins !

Custom User Model sous Django 1.5+

Custom User Model sous Django 1.5+

Avant Django 1.5, étendre le modèle utilisateur pouvait être un peu fastidieux. Il y a bien eu la création du profil utilisateur pour palier un peu à ce problème, mais un changement en profondeur du modèle utilisateur restait un travail conséquent.

Depuis la version 1.5 de Django (version RC à ce jour), la tâche a été largement simplifiée. Le seul petit problème est que cela nécessitera un changement (mineur) dans vos applications existentes utilisant le modèle utilisateur pour assurer la compatibilité.

Création de notre modèle

Nous allons donc commencer par créer notre modèle personnalisé d’utilisateur.

Comme vous pouvez le voir la création du modèle est très simple. On crée une nouvelle class “MyUser“, qui va hériter de AbstractUser.
La classe AbstractUser contenue dans django.contrib.auth.models est la même que le modèle utilisateur par défaut de Django, ici je veux seulement l’étendre pour y ajouter des champs, ou pour modifier des méthodes de traitement.

Si je n’avais pas besoin de tous les champs que la classe embarque par défaut (first_name, last_name, email, etc) il faudrait que j’hérite de AbstractBaseUser qui est beaucoup plus simple et n’embarque que les champs de connexion obligatoires. Bien sûr si je veux aller encore plus loin, rien n’empêche de créer sa classe de zéro. Cependant le modèle utilisateur de Django fonctionne plutôt bien et il est assez fréquent d’avoir besoin des champs proposés et donc de vouloir se baser dessus.

USERNAME_FIELD correspond au nom de votre champ d’identifiant de connexion si vous désirez le personnaliser.

La liste REQUIRED_FIELDS permet de lister tous les champs obligatoires, sauf celui qui sert d’identifiant de connexion, autrement dit sauf le USERNAME_FIELD. Ici comme on hérite de la classe AbstractUser, on n’ajoute que les nouveaux champs personnels et obligatoires dans REQUIRED_FIELDS.

Si votre classe MyUser hérite de AbstractBaseUser n’oubliez pas d’implémenter les méthodes suivantes :

  • get_full_name
  • get_short_name

Et après ?

C’est quasiment terminé ! La seule chose à faire c’est de prévenir Django que notre modèle est celui qui sera utilisé à la place du modèle User par défaut. Cela se passe dans le fichier de configuration settings.py :

Compatibilité avec les anciennes applications

Si vous créez votre propre modèle utilisateur et que vous le déclarez dans le fichier settings.py alors Django lèvera une erreur chaque fois qu’une application (à vous ou tierce) tentera d’accéder à la classe User. Par exemple, si un bout de code indique :

En fait c’est tout à fait normal, Django vous prévient que vous tentez d’accéder à une classe qui a été étendue et qui n’est donc plus utilisée, il faut donc appeler cette nouvelle classe. Pour cela il faudra donc utiliser la méthode générique suivante :

Il ne vous reste plus qu’à synchroniser votre base !

Documentation Django : https://docs.djangoproject.com/en/dev/topics/auth/customizing/#auth-custom-user

25 janvier 2013 0 commentaire Lire la suite
Workshop gratuit HTML5 Référencement

Workshop gratuit HTML5 Référencement

Jeudi 31 janvier 2013 de 14h à 18h, La Coopérative des Tilleuls vous invite à un workshop gratuit basé sur l’utilisation des propriétés sémantiques du HTML5 pour le référencement naturel des sites internet.

L’atelier se déroulera dans les locaux de Co-Factory au 677 avenue de la République, Lille (métro “Buisson”).

Au programme :

  • Introduction au référencement
  • Présentation des balises sémantiques de HTML5
  • Comprendre l’algorithme de « outline » HTML5 pour mettre en valeur l’information pertinente
  • Mettre en avant ses pages dans les moteurs de recherche avec les microdata, Schema.org et les extraits enrichis
  • Allez plus loin, jouer avec Javascript pour référencer des SPA (Single Page Application)

Pour assister à ce workshop il suffit de vous inscrire gratuitement avant le 31 janvier. Attention le nombre de places est limité !

workshop-html5-referencement-tilleuls

23 janvier 2013 0 commentaire Lire la suite
Pourquoi miser sur Magento ?

Pourquoi miser sur Magento ?

Les commerçants, qu’ils aient franchi le pas ou non, le savent bien : le passage au commerce en ligne devient inévitable. L’achat en ligne a séduit les internautes, particuliers ou professionnels, en sachant faire oublier les craintes du début et en valorisant les atouts d’un commerce à portée de clic : choix du mode de paiement, choix du mode de livraison, un catalogue riche et complet accessible n’importe où, n’importe quand, sans oublier la dimension sociale.

Que ce soit pour les commerçants “pure players” qui développent leur business uniquement en ligne, ou les entreprises jouant sur le multi-canal (site e-commerce + boutique physique), Magento est devenu un outil très puissant. Le e-commerce s’impose dans le modèle de distribution comme un moyen de conquérir une clientèle plus large, en BtoC ou en BtoB.

Magento est une plateforme de e-commerce qui s’est fait une place forte dans le domaine depuis son lancement en 2008. Créée par l’éditeur Varien sur un modèle opensource et s’appuyant sur le framework Zend, elle a bénéficié de l’expérience forte de la société américaine et s’est depuis développée largement, se divisant dorénavant en trois versions : la version communautaire, gratuite, et deux versions payantes apportant fonctionnalités supplémentaires et support, Magento Entreprise Edition et Magento Professionnal Edition.

Pour le e-commerçant, il s’agit d’une plateforme à la fois souple et robuste, embarquant de base des fonctionnalités e-commerce abouties :

  • une gestion simple du site, dotée d’une interface facile à prendre en main
  • des outils simples de marketing et de promotions : suivi des ventes, des recherches effectuées sur le site, recoupements…
  • une gestion client aussi bien côté administration que côté public (espace client avec suivi des commandes), et newsletter
  • la facilité de gérer un site multilingue et multiboutique
  • une optimisation du référencement naturel pour une meilleure position dans les moteurs de recherche
  • un suivi des commandes, factures, expéditions, paiements
  • une gestion du catalogue très souple et configurable, supportant notamment des types de produit complexes : produit physique, produit virtuel, produit groupé…
À cela s’ajoute bien entendu la possibilité d’étendre le coeur du programme avec des développements spécifiques, pour permettre par exemple l’interfaçage avec d’autres outils mis en place (CRM, ERP, place de marché…).
Magento offre également la possibilité d’élargir son activité au m-commerce en créant facilement une application mobile native (iphone, android, ipad).

Quelques exemples de sites sous Magento

Zadig & Voltaire

Le Furet du Nord

La halle

10 juillet 2012 0 commentaire Lire la suite