Certes, le bit 'testé, certifié' est agréable dans certains environnements. Dans notre cas, les exigences d'audit sont que nous utilisions soit une pile logicielle certifiée, soit que nous devions nous débrouiller tout seuls, mais que nous devions montrer que nous faisons des mises à jour rapides pour chaque petit composant qui s'y connecte. Donc, pour des raisons de santé mentale, nous avons toujours utilisé les offres standard des distributions Linux. Le problème avec cela est qu'ils ont tendance à être des années derrière la courbe. Par exemple, la plupart des distributions ont récemment adopté PHP 5.3 après être resté bloqué avec 5.1 (!). Ce n'est tout simplement pas acceptable lorsque vous essayez de développer des applications modernes qui utilisent des techniques de codage modernes, et que vous abandonnez une tonne en termes de performance et de fiabilité PHP.
Cela étant dit, les fonctionnalités sont plutôt sympas. @Keven a déjà mentionné la file d'attente. C'est génial pour nous, en ce que nous pouvons très facilement décharger toutes sortes de tâches qui s'exécutent de manière asynchrone et maintenir le processus de demande principal en vol. À titre d'exemple, une de nos applications crée des tâches dans notre outil de suivi des bogues lorsque certains types d'événements se produisent. Comme cela est fait par le service web, et le bug tracker est horriblement lent, cela peut prendre plusieurs secondes. Plutôt que de faire patienter les utilisateurs de notre application, nous mettons en file d'attente un travail et le laissons s'exécuter en arrière-plan. De même, notre classe de messagerie standard utilise la file d'attente plutôt que de faire attendre l'utilisateur pendant que notre code parle à un serveur SMTP. Et tout cela n'atteint même pas l'utilité pour générer des rapports volumineux, exécuter des vérifications d'intégrité de base de données, reconstruire des caches, etc.
Le cache de pages est parfait pour les cas où vous pouvez simplement mettre en cache une page entière et être fait avec. Nous l'utilisons avec nos WSDL, car nous avons un meilleur contrôle que les contrôles de cache de PHP. De même, le serveur de téléchargement est merveilleux pour la mise en cache de certains types de contenu, comme les images. Et nous utilisons le cache de données comme un serveur memcached local pour accélérer considérablement toutes sortes de demandes en évitant de faire une requête à un serveur de base de données lent assis ailleurs sur le réseau lent. Et bien sûr, comme le mentionne @ André, il y a de très jolies fonctionnalités de débogage, de traçage et de rapport d'événements.
Il existe également des fonctionnalités intéressantes pour effectuer des déploiements et des annulations, ce qui est très important pour les applications stratégiques. J'ai l'intention de les essayer un jour, mais pour l'instant, j'utilise toujours les outils que j'ai mis ensemble avant d'utiliser ZS. Maintenant, vous pouvez obtenir la plupart de ces fonctionnalités (en particulier, tous les bits de mise en cache) en bricolant ensemble une variété d'autres outils. Mais vous devez ensuite rechercher et apprendre toutes ces choses, les faire toutes installer et travailler ensemble, puis les conserver toutes, y compris faire des tests d'intégration appropriés quand quelque chose est mis à jour. C'est un travail de temps et de temps que je préfère personnellement passer à écrire du code.
Ayant dit tout cela, il y a des inconvénients. D'une part, les choses se sentent parfois ... à moitié cuites et/ou mal conçues. Par exemple, l'API de cache de données renvoie la valeur booléenne false si vous tentez d'extraire un élément qui n'existe pas. Et, il n'a aucune fonction pour vérifier si un article existe sans également aller chercher. Devinez ce que cela signifie: vous ne pouvez pas stocker en toute sécurité une valeur booléenne parce que vous ne pouvez pas le récupérer en toute sécurité. Il inclut une couche de compatibilité APC mal documentée, mais essayer d'utiliser la fonction d'existence à partir d'APC génère une erreur de fonction non définie.Comme autre exemple, nous utilisons des Mac pour nos stations de développement, mais par souci de compatibilité avec le matériel ancien qui a tendance à être utilisé par tous les développeurs professionnels qui perdent des milliers sur le serveur PHP, Zend a choisi d'expédier la version Mac (qui est pour le développement seulement) comme 32 bits seulement. Nous sommes donc obligés de développer une application en 32 bits qui fonctionne partout ailleurs en 64 bits. Cela a causé pas mal de bogues et des tests automatisés qui ont échoué dans notre application, ce qui tue plutôt l'un des objectifs principaux de ZS, qui est une pile logicielle identique dans les environnements de développement, test, staging, QA et production. J'ai essayé de les convaincre de changer cela, mais ils ont rapidement commencé à m'ignorer. Un autre problème important est que la file d'attente des travaux ne peut traiter que les tâches via des requêtes HTTP. L'API est configurée pour permettre d'autres méthodes (comme l'appel de ligne de commande beaucoup plus sensible), mais HTTP est tout ce qui fonctionne. Cela vous oblige à lier les connexions du serveur Web à des tâches qui, de par leur conception, tendent à durer longtemps et doivent donc être retirées du contexte Web. De plus, cela vous force à sauter dans des cerceaux pour empêcher le monde de déclencher vos tâches en visitant une URL dans un navigateur. C'est juste une décision stupide. D'autres exemples sont la mauvaise gestion des événements personnalisés envoyés via API à Zend Monitor, l'encapsuleur php-cli pour le binaire PHP qui casse sur le Mac lorsqu'il est déclenché par la ligne shebang, le manque total (total) de santé et de performance les rapports dans les outils de cache (bien qu'ils disaient que cela change dans ZS 6), et la documentation embarrassante incomplète. Je pourrais continuer ...
Maintenant, ces inconvénients, et le temps perdu et les ressources qui viennent pour le tour, évidemment n'ont pas dépassé les avantages pour nous, mais pour le montant d'argent que nous dépensons , Je m'attends certainement plus.