Rationale
De Patchwork.
Version du 28 octobre 2009 à 10:24 par Nicolas Grekas (discuter | contributions)
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
linkpour 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)

