Mam wiele pytań do doświadczonych programistów Magento:
Czy można poprawić prędkość mydlanego interfejsu API Magento v1? Gdy żądasz danych, magento szybko kompiluje proste informacje, takie jak adres klienta itp., Kosztuje 1,5 sekundy.
Żądanie wielu możliwych istotnych węzłów danych może szybko kosztować około 5-7 sekund.
Teraz już robię te żądania za pośrednictwem żądań AJAX, więc interfejs strony ładuje się szybko, ale poprawa prędkości byłaby miła.
Czy może lepiej byłoby napisać własną aplikację, aby przekazać mi odpowiednie informacje bezpośrednio z bazy danych magento? Db nie jest tak skomplikowany, a jeśli wykonam bezpośrednie zapytanie, ładuje się w ciągu 100 sekund z wynikami ...
Jedyne rozważanie, jakie mam przy tej opcji, to:
- Co się stanie, jeśli Magento zaktualizuje i zmieni schemat bazy danych?
- Czy konfiguracja bazy danych Magento jest stosunkowo bezpieczna / kompatybilna w dół?
Czy ktoś ma jakieś doświadczenie z tym i swoimi sukcesami lub historiami? Muszę dokonać świadomej decyzji, aby wiedzieć, jak postępować.
źródło
Odpowiedzi:
Dokładnie napotkałem dokładnie ten problem i obejrzałem go, pracując bezpośrednio z obiektami Magento. Myślę, że istnieją obawy dotyczące zmian kodu i czegokolwiek, co opisujesz, ale większość mojego kodu znajduje się w skryptach jednorazowego użytku do ładowania starych danych, takie rzeczy, więc było to drobne zaniepokojenie. Bezpośrednia praca z obiektami Magento miała również tę dodatkową zaletę, że uczyłem się wewnętrznych elementów nieco więcej niż bym tylko dzięki API SOAP - z pewnością bardziej stroma krzywa uczenia się, ale mam większą wiedzę na temat tego, co się dzieje tam, niż gdybym nigdy nie używał interfejsu API SOAP.
Inną opcją, którą wypróbowaliśmy, było buforowanie danych przy użyciu Memcached (lub coś takiego, jak Redis też by działało), chociaż teraz musisz się martwić, jak często aktualizować pamięć podręczną, skąd i tym podobne. Ale osiąga cel znacznie, dużo szybciej. Myślę, że to, czy jest to dobra opcja, zależy od tego, co próbujesz zrobić.
źródło
$order = Mage::getModel('sales/order')->load($order_id);
, w zasadzie. W tym wątku na forum jest fragment lub dwa, które mogą ilustrować więcej: magentocommerce.com/boards/viewthread/18629Przyspieszenie interfejsu SOAP będzie trudne. Zawsze możesz wrzucić jakiś dodatkowy sprzęt (szybszy serwer MySQL) lub uruchomić sklep na NginX, co po kilku milisekundach NginX lepiej obsługuje duże ilości żądań HTTP. Buforowanie nie pomogłoby tak bardzo, ponieważ odpowiedź większości połączeń będzie się różnić za każdym razem.
Zbudowanie własnego interfejsu API od podstaw przy użyciu modeli Magento Core może być najszybszym rozwiązaniem, ponieważ możesz dostosować kod w celu zwiększenia wydajności, ładując tylko dokładnie to, czego potrzebujesz. Z mojego doświadczenia w korzystaniu z podstawowych klas niewiele się zmieniło między, powiedzmy, wersją 1.5 a 1.7
Edycja: Zapomniałem, mała szybka wygrana może wynikać z włączenia kompresji danych wyjściowych gzip w pliku htaccess lub php.ini lub jeśli masz ochotę przenieść interfejs SOAP na inny serwer przy użyciu tej samej bazy danych, jeśli baza danych MySQL nie jest wąskie gardło
źródło