Accélérez le savon Magento v1

10

J'ai plusieurs questions pour les développeurs expérimentés de magento:

  1. Est-il possible d'améliorer la vitesse de l'api soap de magento v1? Lors de la demande de données, magento coûte rapidement 1,5 seconde pour compiler des informations simples comme l'adresse du client, etc.

    La demande de plusieurs nœuds de données pertinents possibles peut rapidement coûter environ 5 à 7 secondes.

    Maintenant, je fais déjà ces demandes via des demandes AJAX, donc l'interface de page se charge rapidement, mais une amélioration de la vitesse serait bien.

  2. Ou serait-il préférable d'écrire ma propre application pour me donner les informations pertinentes directement à partir de la base de données magento? Ce n'est pas si compliqué qu'une base de données et si je fais une requête directe, elle se charge en moins d'un centième de seconde avec les résultats ...

    La seule considération que j'ai avec cette option est:

    1. Que faire si magento met à jour et modifie son schéma de base de données?
    2. Ou la configuration de la base de données de magento est-elle relativement à niveau / compatible avec la baisse?

Quelqu'un at-il une expérience avec cela et leurs histoires de réussite ou d'échec? J'ai besoin de faire une décision éclairée pour savoir comment procéder.

Tschallacka
la source
1
C'est probablement PHP lié, pas MySQL, Nginx ou quoi que ce soit d'autre . Identique au reste de votre magasin. Faites votre boutique rapidement et l'API suivra. Cependant, cela ne va jamais s'alléger rapidement - les méthodes de flux de données / API sont lentes malgré tout, donc les implémentations personnalisées seront toujours plus performantes au détriment de la gestion / du temps de mise en œuvre / de la mise à niveau.
Ben Lessani - Sonassi
3
non, ce n'est pas lié au php ... c'est toute la configuration de magento qui ralentit incroyablement les choses. Il faut plus de temps pour terminer une demande d'API Soap que pour demander une grande page de magasin avec plusieurs articles et un panier. Quelque chose est de travers dans la conception de magento.
Tschallacka

Réponses:

8

J'ai rencontré exactement ce problème de manière approfondie, et j'ai contourné ce problème en travaillant directement avec des objets Magento. Je pense qu'il y a le souci des changements de code et ainsi de suite que vous décrivez, mais une grande partie de mon code est dans des scripts à usage unique pour charger de vieilles données, des choses comme ça, donc c'était une préoccupation mineure. Travailler directement avec les objets Magento a également eu l'avantage secondaire de me faire apprendre les composants internes un peu plus que je ne le ferais qu'avec l'API SOAP également - une courbe d'apprentissage plus abrupte à coup sûr, mais je me sens un peu plus informé sur ce qui se passe là-dedans que si je me suis contenté de ne jamais utiliser l'API SOAP.

Une autre option que nous avons essayée était la mise en cache des données à l'aide de Memcached (ou quelque chose comme Redis fonctionnerait aussi), bien que vous deviez maintenant vous soucier de la fréquence de mise à jour du cache, d'où, et des choses comme ça. Mais, il atteint l'objectif de récupérer les données beaucoup plus rapidement. Je pense que ce soit une bonne option ou non dépendra exactement de ce que vous essayez de faire.

Mike
la source
Eh bien, si je devais faire quelque chose à partir de magento lui-même, je ne gagnerais pas beaucoup en vitesse, car magento doit encore être "démarré" pour gérer la demande. J'aime l'api de savon parce qu'elle "ne change pas" mais je déteste le fait qu'elle soit si incroyablement lente à répondre aux requêtes les plus simples. même le site principal qui doit gérer beaucoup plus de demandes est beaucoup plus rapide.
Tschallacka
Ce que j'essaie de faire, c'est de lier magento à notre logiciel ERP, j'ai donc besoin d'accéder aux données les plus récentes à tout moment.
Tschallacka
1
Peut-être - dans mon cas, j'écrivais des choses qui chargeraient une commande par incrémentation d'ID, puis effectueraient une action en fonction de ses données. Le chargement d'une commande complète prenait environ 1,5 seconde dans l'API SOAP, ou une infime fraction de seconde sous la forme d'un "objet brut". Le choix pour moi était clair quand j'en chargerais des centaines en une seule fois. Une autre restriction, aussi, est qu'en le faisant, le style "application magento" doit être sur le même serveur. Dans mon cas, cela ne me dérangeait pas du tout, mais ça vaut la peine de s'en souvenir.
Mike
1
Comment avez-vous tout chargé sous forme d'objet brut?
Tschallacka
$order = Mage::getModel('sales/order')->load($order_id);, basiquement. Il y a un ou deux extraits
Mike
6

Accélérer l'API SOAP va être difficile. Vous pouvez toujours ajouter du matériel supplémentaire (serveur MySQL plus rapide) ou exécuter le magasin sur NginX qui, lorsque vous aurez quelques millisecondes, NginX est meilleur pour gérer de grandes quantités de requêtes http. La mise en cache n'aiderait pas vraiment tant que la réponse de la plupart des appels différera à chaque fois.

Construire votre propre API à partir de zéro à l'aide de modèles Magento Core pourrait être la solution la plus rapide car vous pouvez modifier le code pour améliorer les performances en chargeant uniquement ce dont vous avez besoin. D'après mon expérience en utilisant les classes de base, peu de choses ont changé entre, disons, la version 1.5 et 1.7

Edit: j'ai oublié, une petite victoire rapide pourrait venir de l'activation de la compression de sortie gzip dans le fichier htaccess ou php.ini ou si vous en avez envie, déplacez l'API SOAP vers un autre serveur en utilisant la même base de données si la base de données MySQL n'est pas le goulot d'étranglement

Sander Mangel
la source
1
la base de données mysql n'est pas le goulot d'étranglement, le goulot d'étranglement est en train de démarrer tous ses fichiers de configuration, de charger chaque morceau de merde, de compiler une API de savon et enfin de se rappeler que j'ai fait une demande, récupérer ces données, l'évaluer, compiler il dans le format demandé, valider le format et ensuite le sortir via la connexion soap .... Check check check double check est sympa ... mais c'est trop lent. Cela ira bien au début, mais il faudra accélérer à un moment donné.
Tschallacka
Le cache natif de Magento devrait vous aider à combiner les fichiers de configuration, et vous pouvez utiliser le compilateur pour accélérer le code. Un accélérateur PHP ( en.wikipedia.org/wiki/PHP_accelerator ) augmenterait également vos performances ici. Mais dans votre cas, cela pourrait valoir la peine de chercher à créer votre propre API qui utilise l'API de base Magento.
Sander Mangel