Mengapa Magento sangat lambat? [Tutup]

138

Apakah Magento biasanya sangat lambat?

Ini adalah pengalaman pertama saya dengannya dan panel admin hanya perlu waktu lama untuk memuat dan menyimpan perubahan. Ini adalah instalasi default dengan data uji.

Server tempat ia dihosting menyajikan situs non-Magento lainnya dengan sangat cepat. Ada apa dengan kode PHP yang digunakan Magento yang membuatnya sangat lambat, dan apa yang bisa dilakukan untuk memperbaikinya?

mr-euro
sumber
12
Perangkat keras apa yang Anda jalankan? Magento membutuhkan dukungan perangkat keras yang serius dalam pengalaman saya.
Jitter
3
Saya tidak meminta dukungan, tetapi kode. Harapan saya adalah seseorang pernah mengalami ini di masa lalu dan telah mengoptimalkan kode untuk menghindari perilaku lamban. Saya tidak memiliki potongan kode khusus untuk ditunjukkan karena ini berlaku di seluruh situs. Saya harus melihat lebih jauh ke dalam masalah ini.
mr-euro
18
Magento memiliki 6000+ file kelas dan dibuat untuk penggunaan perusahaan bukan untuk digunakan di rumah. Tanpa APC jangan dipikirkan menginstalnya. Saya tidak merekomendasikannya untuk toko-toko kecil.
Elzo Valugi
1
Mengenai bendera Anda, @Jonesome: pertanyaan ini sangat luas dan ... mungkin agak tanggal pada saat ini. Yang mengatakan, kami sekarang memiliki situs khusus untuk masalah Magento ( Magento ), yang mungkin akan menjadi sumber yang bagus bagi siapa pun yang bekerja untuk mengoptimalkan pengaturan mereka.
Shog9
1
@ Shog9 Saya mengelola tim yang mengembangkan dan mendukung tambahan untuk magento. Saya dapat memberitahu Anda bahwa masalah persis ini muncul hampir setiap hari. Magento bukan aplikasi lampu "normal", karena sangat intensif sumber daya. Utas ini penting. Menutupnya memaksa percakapan umum ini keluar dari SO, yang sangat disayangkan untuk semua.
Jonesome Reinstate Monica

Jawaban:

183

Saya hanya terlibat dalam mengoptimalkan Magento untuk kinerja, tetapi inilah beberapa alasan mengapa sistem ini sangat lambat

  1. Sebagian Magento menggunakan sistem basis data EAV yang diterapkan di atas MySQL. Ini berarti meminta satu "hal" tunggal sering berarti meminta beberapa baris

  2. Ada banyak hal di balik layar (konfigurasi aplikasi, konfigurasi sistem, konfigurasi tata letak, dll.) Yang melibatkan pembuatan pohon XML raksasa dalam memori dan kemudian "meminta" pohon-pohon yang sama itu untuk mendapatkan informasi. Ini membutuhkan memori (menyimpan pohon) dan CPU (mengurai pohon). Beberapa di antaranya (terutama tata letak pohon) sangat besar. Juga, kecuali caching aktif, pohon ini dibangun dari file pada disk dan pada setiap permintaan .

  3. Magento menggunakan sistem konfigurasinya untuk memungkinkan Anda mengganti kelas. Ini adalah fitur yang kuat, tetapi itu berarti kapan saja model, helper, atau controller instantiated, instruksi PHP tambahan perlu dijalankan untuk menentukan apakah file kelas asli atau override file kelas diperlukan. Ini bertambah.

  4. Selain sistem tata letak, sistem template Magento melibatkan banyak rendering rekursif. Ini bertambah.

Secara umum, Insinyur Magento ditugaskan, pertama dan terutama, dengan membangun sistem yang paling fleksibel dan dapat disesuaikan, dan khawatir tentang kinerja nantinya.

Hal pertama yang dapat Anda lakukan untuk memastikan kinerja yang lebih baik adalah mengaktifkan caching (Sistem -> Manajemen Cache). Ini akan meringankan beberapa pemblokiran CPU / disk yang berlangsung saat Magento membangun berbagai pohon XML-nya.

Hal kedua yang ingin Anda lakukan adalah memastikan host dan tim operasi Anda memiliki pengalaman penyetelan kinerja Magento. Jika Anda mengandalkan rencana $ 7 / bulan untuk membantu Anda, well, semoga sukses dengan itu.

Alan Storm
sumber
10
Terima kasih atas penjelasannya. Magento memang sangat kuat sambil memungkinkan fleksibilitas. Saya awalnya berpikir itu hanya DB menulis terhenti karena beberapa SQL yang ditulis dengan buruk, tapi saya menyadari sekarang bahwa ada lebih banyak terjadi di belakang layar yang awalnya diharapkan. Sebagai catatan: caching dinonaktifkan karena produk ditambahkan oleh pemilik toko. Ketika cache menyala ia mengeluh tentang produk yang tidak muncul memaksa saya untuk menonaktifkan caching saat toko sedang disiapkan. Itu sedang di-host di server khusus, tetapi tampaknya saya harus memindahkan Magento ke kotak eksklusif sendiri.
mr-euro
4
Saya membuat profil beberapa waktu lalu dengan XHProf. Penguraian XML membutuhkan banyak waktu - saya pikir Anda tepat dengan daftar ini.
Morgan Tocker
1
Saya bertanya-tanya apakah menjalankan Magento di HHVM akan membuat ini lebih baik. Terakhir saya memeriksa HHVM tidak mendukung Magento, tetapi jika itu dilakukan, apakah itu membantu?
Bharadwaj Srigiriraju
1
Ini menjelaskan banyak hal. Mengetahui adalah setengah dari pertempuran. Saya tidak melihat bagaimana ini tidak dapat dianggap konstruktif.
flcoder
Jangan lupa mengoptimalkan file autoloader komposer (lihat panduan kinerja magento), jika Anda menggunakan komposer, dan - untuk Magento2 - aktifkan mode produksi! Varnish juga merupakan ide yang sangat bagus, asalkan aplikasi Anda tidak memiliki masalah dengan cache satu halaman penuh.
Dmitri Sologoubenko
54

Lebih jauh ke rekomendasi Alan Storm tentang caching, ada dua hal yang saya sarankan secara khusus untuk Anda lihat terkait dengan caching:

- Pastikan cache dalam memcached, bukan pada disk.

Saya menjaga beberapa instalasi magento, dan setelah Anda mendapatkan segala jenis beban pada sistem, memcached mulai bekerja lebih cepat. Dan mati mudah untuk mengubahnya (relatif untuk melakukan hal-hal magento lainnya setidaknya!)

Titik awal yang baik ada di sini: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - tetapi jika Anda belum pernah menggunakan memcached sama sekali sebelumnya, ada baiknya melihat beberapa info umum tentang hal itu juga.

- Aktifkan templat / tampilan caching.

Ini adalah artikel yang bagus: http://inchoo.net/ecommerce/magento/magento-block-caching/

Ada yang bagus di situs magento juga (caching blok google magento), tetapi saat ini sedang turun.

Untuk menambahkan dua sen ke caching blok, saya sarankan Anda membuat blok Anda sendiri di / app / code / local, memperluas yang inti dan mendefinisikan parameter cache, beri nama xxx_Cache dan kemudian perbarui tata letak Anda untuk menggunakan blok ini sebagai gantinya dari yang inti. Dengan cara ini, Anda menghindari kehilangan perubahan atau merusak sistem saat Anda meningkatkan versi magento.

benlumley
sumber
3
Terima kasih untuk poin. Saya akan melihat memcached yang saya belum pernah digunakan dalam produksi sebelumnya. Ide bagus tentang kloning blok juga.
mr-euro
3
Saya kedua apa yang dikatakan benlumbey, saya tidak menggunakan memcached karena saya menjalankan windows server, tapi saya menyimpan direktori / var dalam solid state drive dan itu telah membuat perbedaan besar bagi saya.
Rick J
@rickj - ya, apa pun untuk membuat folder ./var lebih cepat pasti membantu, saya sudah mencoba menggunakan tmpfs sebelum memcached juga, dan mendapat dorongan yang layak dari itu juga.
benlumley
Saya akan menambahkan untuk menggunakan cache APC hanya untuk satu node karena tampaknya memiliki lebih sedikit overhead daripada memcached untuk lingkungan multi node.
sbditto85
2
Ya benar. Tetapi ada beberapa peringatan di sana, tergantung pada bagaimana Anda menjalankan PHP, Anda dapat berakhir dengan cache APC terpisah untuk setiap proses PHP - yang menjadi lebih tidak optimal jika Anda bersepeda proses PHP Anda setiap X permintaan.
benlumley
23

Jika Anda belum melihatnya, Magento dan Rackspace bekerja sama untuk membuat buku putih tentang penyetelan kinerja Magento. Ini luar biasa. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

--- sunting ---

Sumber hebat lainnya, baru tersedia (Okt 2011) adalah: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Terima kasih karena Alan Storm yang satu ini.)

Laizer
sumber
Terima kasih atas pembaruannya, saya akan membacanya secara mendalam nanti.
mr-euro
2
Tautan kedua itu sekarang mati.
Laizer
1
Tautan pertama juga mati.
Edward
Tautan rusak. Ner
Ner
1
Tautan langsung untuk Whitepaper Rackspace (tautan # 1).
Levi Figueira
17

Mungkin juga ada alasan yang sangat tidak jelas mengapa antarmuka admin Anda sangat lambat. Magento memiliki modul bernama Mage_AdminNotification. Cobalah untuk menonaktifkan ext itu. Karena yang dilakukannya adalah permintaan magentocommerce.com untuk pesan pembaruan baru. Jika server mereka lambat, halaman admin Anda menunggu dan berlaku lambat karena jaringan lag dan memuat berita eksternal. Jika Anda telah mengamankan koneksi server keluar Anda melalui firewall, ini bisa lebih menyebalkan, karena antarmuka admin akan menunggu waktu habis ketika tidak dapat mencapai magentocommerce.com

Untuk menonaktifkannya: pergi ke System -> Configuration, gulir ke bawah dan tekan Advanced (di bagian Advanced). Sekarang nonaktifkan Mage_AdminNotificationdan simpan!

Sam Figueroa
sumber
4
Ini membuat perbedaan yang signifikan dalam kinerja di lingkungan pengembang lokal saya, yang selalu membuat saya frustrasi betapa lambatnya berlari pada kotak pengembangan yang sangat cepat. Terima kasih!
random_user_name
Di Magento2: Toko-> Konfigurasi-> Lanjutan-> Lanjutan, lalu nonaktifkan Mage_AdminNotification.
Scott C Wilson
6

Saya hanya memiliki pengalaman dangkal dengan Magento. Saya menginstalnya di grid-server bersama dan memuat halaman suram ~ 5 + detik. Pada seekor burung, saya menginstalnya pada server khusus situs CMS yang dioptimalkan, dan rasanya sangat, sangat tajam.

Hosting khusus saya memiliki ~ 10 Joomla! situs dan situs VBullitin berjalan.

Dugaan saya adalah itu tidak akan tampil di shared hosting. Berlangganan berlebih tidak akan memungkinkan sumber daya yang cukup untuk dijalankan oleh Magento seperti yang seharusnya.

creuzerm
sumber
6

Saya lebih terlibat dalam optimalisasi server terkelola di perusahaan saya, tetapi saya mungkin punya beberapa tips untuk Anda. Pertama, Anda dapat melihat kode lebih dekat menggunakan fitur pelacakan kode server Zend. Ini akan memungkinkan Anda untuk melihat di mana dan kapan semuanya menjadi kotor.

Saya benar-benar berbagi pertimbangan Benlumley mengenai cache. Sebagian besar situs yang kami host bahkan tidak mengaktifkan caching blok. Cache ini harus secara eksplisit dipanggil dan tidak "diasumsikan". Jadi, jika kode Anda belum mengambil bagian dari mekanisme ini, itu adalah sesuatu yang pasti ingin Anda coba. Jika Anda memiliki versi EE, Anda bisa mendapatkan halaman penuh untuk mendapatkan yang terbaik dari binatang itu.

Proxy terbalik juga akan banyak membantu. Ini akan men-cache sumber daya statis, secara signifikan menurunkan tekanan pada tumpukan interpretasi php dari server depan Anda.

Jangan lupa untuk menulis sesi & cache Magento ke disk RAM. Ini juga pasti akan membawa Anda ke tingkat pertunjukan yang lain.

Masih banyak yang bisa dikatakan di sini, tetapi saya kehabisan waktu. Anda harus tahu bahwa situs yang bagus, yang dikodekan dengan baik dalam versi 1.4.1 CE, berjalan pada server 2xeon Xeon + 16 GB RAM dan memiliki Rproxy di atasnya dapat memakan waktu hingga 50.000 pengunjung unik sehari dengan halaman yang halus untuk semua orang .

kameo
sumber
5

Beralih dari Apache ke LiteSpeed ​​banyak membantu kami. Selain: Mengedit pengaturan MySQL, menginstal Fooman Speedster (modul untuk mengkompresi / menggabungkan file js dan css), dan menginstal APC. Magento juga memposting kertas putih tentang cara mendapatkan kinerja terbaik dari edisi perusahaan, tetapi juga berlaku untuk versi lain: http://www.magentocommerce.com/whitepaper/

Jonathan
sumber
4

Ada banyak alasan mengapa kereta belanja Magento Anda bisa berjalan lambat tetapi tidak ada alasan untuk ada berbagai cara untuk menghilangkan masalah dan membuatnya sangat sangat cepat. Mengaktifkan Gzip dengan memodifikasi file htaccess Anda adalah sebuah permulaan. Anda juga dapat menginstal ekstensi speedster fooman. Jenis server yang digunakan juga akan menentukan kecepatan toko Anda. Lebih banyak tips dan penjelasan yang lebih baik di sini http://www.interactone.com/how-to-speed-up-magento/

Thomas
sumber
4

Ketika saya pertama kali menginstal saya memiliki halaman yang mengambil 30 detik untuk memuat. Server saya tidak maksimal dalam ram atau prosesor, jadi saya tidak tahu harus berbuat apa. Melihat panel jaring pembakar itu memuat sekitar 100 file per halaman, dan masing-masing membutuhkan waktu lama untuk terhubung. Setelah menginstal fooman speedster dan gzip di htaccess, waktu pemuatan turun menjadi 3 detik, seperti mereka berada di kereta belanja lain di server saya.

Scott
sumber
3

Magento sangat lambat karena desain basis datanya tidak terlalu bagus. Kode ini berantakan dan sangat sulit untuk diperbarui dan dioptimalkan. Jadi semua optimasi dilakukan melalui cache, bukan kode.

Di samping itu. Ini adalah toko web dengan banyak alat. Jadi jika Anda memerlukan webshop yang fleksibel, beli saja server yang sangat kuat dan Anda akan baik-baik saja.

pengembang
sumber
1
Desain basis data sebenarnya sangat bagus dan fleksibel.
Hitam
3

itu juga akan turun ke fungsi versus kinerja.

Kinerja mentah diperoleh dengan menggunakan nginx, php-fpm, memcached, apc, dan server yang dirancang dengan baik.

Fungsi seperti kinerja plesk dan magento dapat dikelola dengan mengambil seluruh infrastruktur dalam perspektif saat merancang awan kinerja magento.

ProKontraktor
sumber