sarvendev.com

Dev back

UUID, ORM and strange deadlocks - SarvenDev

Cet article aborde un problème de deadlock dans un module d'application géré avec Doctrine ORM et MySQL. Il explique comment la gestion des transactions et les verrouillages des enregistrements peuvent entraîner des blocages, même avec un faible volume de requêtes. L'auteur détaille les investigations menées pour identifier que les mises à jour de version et la comparaison d'UUID dans l'Unité de Travail d'ORM causaient ces blocages. En apportant des modifications simples, comme la refonte des modèles et le changement des types d'identifiant, il réussit à améliorer les performances et à réduire les erreurs de deadlock.

Dev back

Poor performance of Eloquent ORM in comparison to Doctrine - SarvenDev

Cet article compare la performance de deux ORM, Eloquent et Doctrine, en soulignant que Doctrine est généralement plus rapide lors de la lecture de données à partir de la base de données. Il note que l'utilisation de modèles de lecture est une meilleure approche pour optimiser la récupération des données, car Eloquent nécessite plusieurs étapes après l'hydratation, contrairement à Doctrine. En moyenne, Doctrine est 10 ms plus rapide par requête.

Dev back

Unlocking ORM Performance: The Essential Role of Read Models - SarvenDev

Cet article discute de l'importance des modèles de lecture pour améliorer la performance des ORM en PHP. Il compare les performances de Doctrine ORM, Doctrine DBAL et Eloquent en matière de lecture de données en examinant des cas pratiques. L'auteur souligne que l'utilisation de modèles de lecture distincts permet d'optimiser les performances et d'éviter des problèmes communs tels que le problème N+1, tout en soulignant l'importance de choisir judicieusement les outils en fonction des besoins spécifiques des projets.

Dev back

Container Efficiency in Modular Monoliths: Symfony vs. Laravel - SarvenDev

L'article compare les performances des conteneurs de Symfony et Laravel dans des architectures de monolithes modulaires, soulignant que Symfony est généralement plus performant grâce à des configurations précompilées et à la gestion des instances partagées. Il aborde également les défis d'amélioration des performances de Laravel en matière de conteneur, suggérant plusieurs pistes d'optimisation. En résumé, Symfony s'avère être un meilleur choix pour les applications modulaires à grande échelle.

Dev back

Laravel: Bootstrap time optimization by using a hashtable to store providers - SarvenDev

L'article discute de l'optimisation du temps de bootstrap de Laravel en utilisant une table de hachage pour améliorer la gestion des ServiceProviders. La méthode getProvider dans Laravel prend du temps à cause de la nécessité d'itérer à travers tous les providers enregistrés, ce qui entraîne une complexité élevée. L'utilisation d'une table de hachage réduit cette complexité à O(1), entraînant ainsi des gains de performance significatifs, même si les bénéfices immédiats peuvent sembler modestes en raison des surcharges de profilation.

Dev back

Rethinking Mocking: DIY Approach vs. Frameworks on examples in PHP and Typescript - SarvenDev

Cet article discute de l'équilibre entre l'approche DIY et les frameworks pour le mocking dans les tests logiciels, en insistant sur l'importance de l'utilisation appropriée des mockings pour éviter les complexes et rendre les tests plus fiables. Il explique la différence entre divers types de doubles de test, comme les mocks, stubs, et spies, ainsi que les implications sur la maintenabilité et le refactoring. L'auteur souligne l'importance de choisir la bonne méthode de mocking pour garantir l'intégrité des tests tout en maintenant la flexibilité du code.

Dev back

Tips for optimizing integration tests - SarvenDev

Optimiser les tests d'intégration est crucial pour un bon développement. L'article fournit des conseils pratiques, tels que l'utilisation d'autoloader optimisés de Composer, des transactions pour réinitialiser l'état de la base de données et l'utilisation de tmpfs dans Docker pour améliorer les performances. D'autres astuces incluent la réduction de la taille des images Docker et l'importance d'utiliser les dernières versions de PHP pour éviter les problèmes de mémoire. Des méthodes pour diviser les tests sur plusieurs jobs CI et l'utilisation de Paratest pour les tests parallèles sont également abordées afin d'accélérer les délais de retour d'information.

Dev back

Uncovering the bottlenecks: An investigation into the poor performance of Laravel's container - SarvenDev

Une enquête sur les problèmes de performance du conteneur de Laravel révèle que la création non partagée des dépendances entraîne une consommation excessive de ressources, surtout pour les applications lourdes. En optimisant l'utilisation des dépendances par des méthodes de liaison appropriées, des améliorations de performance allant jusqu'à 60 % peuvent être réalisées. Cela soulève des questions sur l'efficacité de Laravel pour les grandes applications monolithiques, comparé à Symfony où les dépendances sont partagées par défaut.

Dev back

Laravel - AggregateServiceProvider affects the performance - SarvenDev

L'article discute de l'impact négatif des AggregateServiceProviders sur la performance des applications Laravel, en expliquant qu'ils ne respectent pas les fournisseurs différés, entraînant des temps de démarrage plus longs. Après une refonte partielle en réduisant le nombre d'AggregateServiceProviders, une amélioration de plus de 20 % du temps de démarrage a été observée. L'auteur recommande d'éviter leur utilisation pour améliorer les performances et suggère d'écrire des tests pour vérifier la configuration des fournisseurs différés.

Dev back

Laravel - variadic parameter trap - SarvenDev

Cet article aborde un problème rencontré dans Laravel lors de l'utilisation de paramètres variadiques dans un ServiceProvider, où une erreur de type BindingResolutionException n'est pas correctement gérée. L'auteur souligne que Laravel lie une array vide par défaut en cas de dépendance non créée, ce qui semble contre-productif par rapport au principe Fail Fast. Il propose d'améliorer la gestion des exceptions pour signaler les erreurs plus rapidement.