Rationale

De Patchwork.

Version du 28 octobre 2009 à 10:24 par Nicolas Grekas (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Problèmes génériques du Web pris en charge par Patchwork :

Sommaire

Protocole HTTP

  • Gestion fine des entêtes de cache (Expires, Cache-Control, ETag, Last-Modified...)
  • Requêtes partielles (Accept-Ranges, Range, If-Match...)
  • Compression HTTP (Accept-Encoding)
  • Négociation de langage (Accept-Language)
  • Gestion des entêtes P3P (pour qu'IE accepte les ccokies)
  • Pretty URL très faciles (adaptation automatique au contexte des variables $_SERVER)
  • Utilisation de mod_xsendfile s'il est activé

Portabilité des applications

Permettre au code de fonctionner sur un maximum d'environnements PHP (versions, options de configuration...)
  • Autoconfiguration statique (reconfiguration optimale de PHP)
  • Implémentations PHP des extensions mbstring et iconv si nécessaire
  • Détection des problèmes liés à la casse des noms de fichiers sous Windows
  • Normalisation des variables $_SERVER (Apache vs IIS)
  • Récupération du referrer dans document.referrer lorsque $_SERVER['REFERER'] n'est pas utilisable

Unicode (UTF-8)

  • mbstring et iconv toujours disponibles même si l'extension correspondante n'est pas activée
  • Normalisations unicode (NFC, NFD, NFKC, NFKD)
  • Manipulation des graphèmes cluster
  • Contrôle de validité des entrées (y compris du code source)
  • Gestion des entêtes HTTP, balises et attributs HTML nécessaires
  • Code source en UTF-8, autorise les caractères étendus dans les identifiants de nom de variables, de classes ou de fonctions
  • Suppression du BOM s'il est présent

Sécurité des applications

  • Normalisation UTF-8 NFC des entrées
  • Déclaration explicite et vérification automatique des variables d'entrée et de leur format
  • Encodage HTML des variables au moment de leur affichage
  • Protection des formulaires POST contre les CSRF par token+cookie
  • Protection contre les attaques de type cross-domain data disclosure
  • Protection contre la détection automatique du type mime d'IE
  • Mécanisme de gestion de sessions amélioré (contre fixation de session)
  • hashage fort de mots de passe

Structuration du code

réutilisabilité, maintenabilité, évolutivité...
  • Héritage multiple d'applications
  • Superposition de classes
  • Substitution de fonctions
  • Préprocesseur statique
  • Compatibilité avec le code existant (PEAR, ZF, ezc...)
  • __constructStatic() et __destructStatic()
  • __construct() auto pour codes PHP4, suppression du constructeur PHP4
  • Contrôleur générique (relation entre l'URL de la requête et le code exécuté)
  • Moteur de template performant et sécurisé

L'héritage multiple d'applications couplé à la superposition de classes permettent de transformer chaque méthode de chaque classe en une accroche pour surcharger localement un code existant. Ainsi, les concepts avancés de plugin, injection de dépendance, object mocking, programmation orientée aspect par exemple sont très faciles à mettre en œuvre ; ils s'utilisent même sans y faire attention (ou sans le savoir :) ).

Internationalisation

  • 100% unicode (UTF-8)
  • Mécanisme de tables de traduction intégré
  • Négociation HTTP automatique du langage
  • Persistance par insertion automatique du paramètre de langage dans les URLs
  • Insertion automatique de balises link pour les langues alternatives

Performance brute

  • Optimisation d'autoload par insertion et substitution automatique de marqueurs dans le source
  • Mécanisme de cache des ressources, avec expiration liée à la durée et/ou par watch/touch
  • Résolution statique des constantes (et bientôt de portions de code)
  • output buffering + compression optimisé

Scalability

  • Utilisation avancée du mécanisme de cache HTTP, basée sur l'expiration et/ou les watch/touch des ressources
  • Découpage des pages en ressources HTTP indépendantes ayant chacune ses paramètres d'expiration
  • Mécanisme de gestion de sessions amélioré
  • Exploitation performante des reverse-proxy et autres CDN

Développement

  • Fenêtre de débuggage
  • Profiling
  • Purge des caches par CTRL+F5
  • Environnement de développement intégré

Applicatif

  • Compatibilité avec le code existant (PEAR, ZF, ezc...)
  • Gestion de formulaires :
    • validations côtés serveur (sécurité) et client (ergonomie)
    • amélioration de l'ergonomie
    • attributs anticipés de HTML5
    • persistance
    • regroupement d'éléments
    • widget personnalisés (fckeditor, QSelect...)
    • etc.
  • Réduction des sources JavaScript
  • Gestion des tâches périodiques (cron) et événementielles (at)
  • Génération facilitée d'emails :
    • file d'attente
    • template
    • sélection automatique du charset
    • génération de la version texte à partir du HTML
    • etc.
  • etc.
  • JavaScript :
    • Requêtes AJAX (QJsrs)
    • date(), printf(), cryptage xxtea, base64...
    • persistance coté client via window.name (BOARD)