Beschleunigen Sie Magento Seife v1

10

Ich habe mehrere Fragen an erfahrene Magento-Entwickler:

  1. Ist es möglich, die Geschwindigkeit der Magento v1 Seifen-API zu verbessern? Bei der Anforderung von Daten kostet es Magento schnell 1,5 Sekunden, einfache Informationen wie Kundenadresse usw. zusammenzustellen.

    Das Anfordern mehrerer möglicher relevanter Datenknoten kann schnell etwa 5-7 Sekunden kosten.

    Jetzt mache ich diese Anfragen bereits über AJAX-Anfragen, damit die Seitenoberfläche schnell geladen wird, aber eine Geschwindigkeitsverbesserung wäre schön.

  2. Oder wäre es besser, meine eigene Bewerbung zu schreiben, um mir die relevanten Informationen direkt aus der Magento-Datenbank zu geben? Es ist nicht so kompliziert von einer Datenbank und wenn ich eine direkte Abfrage mache, wird sie innerhalb einer 100stel Sekunde mit den Ergebnissen geladen ...

    Die einzige Überlegung, die ich bei dieser Option habe, ist:

    1. Was ist, wenn Magento sein Datenbankschema aktualisiert und ändert?
    2. Oder ist das Datenbank-Setup von Magento relativ sicher / abwärtskompatibel?

Hat jemand irgendwelche Erfahrungen damit und mit ihren Erfolgs- oder Erfolgsgeschichten? Ich muss eine informierte Entscheidung treffen, um wissen zu können, wie ich vorgehen soll.

Tschallacka
quelle
1
Es ist wahrscheinlich PHP-gebunden, nicht MySQL, Nginx oder irgendetwas anderes . Das gleiche wie der Rest Ihres Geschäfts. Machen Sie Ihren Shop schnell und die API wird folgen. Es wird jedoch nie schnell blitzen - Datenfluss- / API-Methoden sind unabhängig davon langsam, sodass benutzerdefinierte Implementierungen immer auf Kosten der Verwaltbarkeit / Implementierungszeit / Aktualisierbarkeit eine Outperformance erzielen.
Ben Lessani - Sonassi
3
Nein, es ist nicht an PHP gebunden ... es ist das gesamte Setup von Magento, das die Dinge unglaublich verlangsamt. Das Ausfüllen einer Seifen-API-Anfrage dauert länger als das Anfordern einer großen Storeview-Seite mit mehreren Artikeln und einem Warenkorb. Im Magento-Design ist etwas schief.
Tschallacka

Antworten:

8

Ich bin genau diesem Problem ausgiebig begegnet und habe es umgangen, indem ich direkt mit Magento-Objekten gearbeitet habe. Ich denke, es gibt Bedenken hinsichtlich Codeänderungen und so weiter, die Sie beschreiben, aber ein Großteil meines Codes befindet sich in Einweg-Skripten zum Laden alter Daten, solche Dinge, also war es ein kleines Problem. Die direkte Arbeit mit den Magento-Objekten hatte auch den Nebeneffekt, dass ich die Interna ein wenig mehr lernte als nur mit der SOAP-API - natürlich eine steilere Lernkurve, aber ich fühle mich ein bisschen besser informiert darüber, was los ist da drin, als hätte ich mich daran gehalten, immer nur die SOAP-API zu verwenden.

Eine andere Option, die wir versucht haben, war das Zwischenspeichern der Daten mit Memcached (oder so etwas wie Redis würde auch funktionieren), obwohl Sie sich jetzt Gedanken darüber machen müssen, wie oft der Cache aktualisiert werden soll, von wo und aus ähnlichen Dingen. Es erreicht jedoch das Ziel, Daten viel, viel schneller abzurufen. Ich denke, ob dies eine gute Option ist oder nicht, hängt davon ab, was Sie genau versuchen.

Mike
quelle
Nun, wenn ich etwas aus Magento selbst machen würde, würde ich nicht viel Geschwindigkeitsvorteil erzielen, da Magento immer noch "hochgefahren" werden muss, um die Anfrage zu bearbeiten. Ich mag die Seifen-API, weil sie sich "nicht ändert", aber ich hasse die Tatsache, dass es so unglaublich langsam ist, auf einfachste Fragen zu antworten. Selbst die Hauptseite, die viel mehr Anfragen bearbeiten muss, ist viel schneller.
Tschallacka
Ich versuche, Magento mit unserer ERP-Software zu verknüpfen, damit ich jederzeit auf die neuesten Daten zugreifen kann.
Tschallacka
1
Vielleicht - in meinem Fall habe ich Dinge geschrieben, die eine Bestellung nach Inkrement-ID laden und dann eine Aktion basierend auf ihren Daten ausführen. Das Laden einer vollständigen Bestellung dauerte in der SOAP-API etwa 1,5 Sekunden oder in Form eines "Rohobjekts" einen Bruchteil einer Sekunde. Die Wahl für mich war klar, wann ich Hunderte von ihnen in einem einzigen Lauf laden würde. Eine weitere Einschränkung besteht darin, dass sich der "Magento App" -Stil auf demselben Server befinden muss. In meinem Fall hat mir das überhaupt nichts ausgemacht, aber es lohnt sich, sich daran zu erinnern.
Mike
1
Wie haben Sie alles in Rohobjektform geladen?
Tschallacka
$order = Mage::getModel('sales/order')->load($order_id);im Grunde. Es gibt ein oder zwei Ausschnitte in diesem Forenthread
Mike
6

Die SOAP-API zu beschleunigen wird schwierig sein. Sie können jederzeit zusätzliche Hardware (schnellerer MySQL-Server) einsetzen oder den Speicher unter NginX ausführen. Wenn Sie einige Millisekunden benötigen, kann NginX große Mengen von http-Anforderungen besser verarbeiten. Caching würde nicht wirklich helfen, da die Antwort der meisten Anrufe jedes Mal unterschiedlich sein wird.

Das Erstellen einer eigenen API von Grund auf mit Magento Core-Modellen ist möglicherweise die schnellste Lösung, da Sie den Code optimieren können, um die Leistung zu verbessern, indem Sie nur genau das laden, was Sie benötigen. Aus meiner Erfahrung mit den Kernklassen hat sich zwischen Version 1.5 und 1.7 nicht viel geändert

Bearbeiten: Ich habe vergessen, ein kleiner schneller Gewinn könnte durch das Aktivieren der gzip-Ausgabekomprimierung in der Datei htaccess oder php.ini oder durch das Verschieben der SOAP-API auf einen anderen Server mit derselben Datenbank erzielt werden, wenn die MySQL-Datenbank dies nicht tut der Engpass

Sander Mangel
quelle
1
Die MySQL-Datenbank ist nicht der Flaschenhals, der Flaschenhals bootet magento alle Konfigurationsdateien, lädt jeden Mist, kompiliert eine Seifen-API und erinnert sich schließlich daran, dass ich eine Anfrage gestellt, diese Daten abgerufen, ausgewertet und kompiliert habe es in das angeforderte Format, validieren Sie das Format und geben Sie es dann über die Seifenverbindung aus .... Check check check double check ist nett ... aber es ist zu langsam. Am Anfang wird es gut gehen, aber irgendwann muss es schneller werden.
Tschallacka
Der native Cache von Magento sollte Ihnen dabei helfen, Konfigurationsdateien zu kombinieren, und Sie können den Compiler verwenden, um den Code zu beschleunigen. Auch ein PHP-Beschleuniger ( en.wikipedia.org/wiki/PHP_accelerator ) würde Ihre Leistung hier steigern. In Ihrem Fall lohnt es sich jedoch möglicherweise, eine eigene API zu erstellen, die die Magento-Kern-API verwendet.
Sander Mangel