Tại sao Magento lại chậm như vậy? [đóng cửa]


138

Có phải Magento thường rất chậm?

Đây là trải nghiệm đầu tiên của tôi với nó và bảng quản trị chỉ mất nhiều thời gian để tải và lưu các thay đổi. Nó là một cài đặt mặc định với dữ liệu thử nghiệm.

Máy chủ nơi nó được lưu trữ phục vụ các trang web không phải Magento khác cực nhanh. Mã PHP mà Magento sử dụng làm cho nó quá chậm và có thể làm gì để sửa nó?


12
Phần cứng nào bạn đang chạy nó trên? Magento cần một số hỗ trợ phần cứng nghiêm trọng theo kinh nghiệm của tôi.
jitter

3
Tôi không yêu cầu hỗ trợ, nhưng mã. Hy vọng của tôi là ai đó đã trải nghiệm điều này trong quá khứ và đã tối ưu hóa mã để tránh hành vi chậm chạp như vậy. Tôi không có một đoạn mã cụ thể nào để chỉ ra vì nó có thể áp dụng trên toàn bộ trang web. Tôi sẽ phải nhìn xa hơn vào vấn đề.
mr-euro

18
Magento có hơn 6000 tệp lớp và được xây dựng để sử dụng cho công ty không dành cho gia đình. Không có APC, đừng nghĩ đến việc cài đặt nó. Tôi không giới thiệu nó cho các cửa hàng nhỏ.
Elzo Valugi

1
Về cờ của bạn, @Jonesome: câu hỏi này rất rộng và ... có lẽ hơi bị lỗi thời điểm này. Điều đó nói rằng, hiện tại chúng tôi có một trang web dành riêng cho các vấn đề Magento ( Magento ), đây có thể là một nguồn tài nguyên tốt cho bất kỳ ai làm việc để tối ưu hóa thiết lập của họ.
Shog9

1
@ Shog9 Tôi quản lý một nhóm phát triển và hỗ trợ các tiện ích bổ sung cho magento. Tôi có thể nói với bạn rằng vấn đề chính xác này xuất hiện gần như hàng ngày. Magento không phải là một ứng dụng đèn "bình thường", ở chỗ nó rất (rất) tốn nhiều tài nguyên. Chủ đề này là quan trọng. Đóng nó buộc cuộc trò chuyện chung này ra khỏi SO, điều không may cho tất cả.
Jonesome phục hồi

Câu trả lời:


183

Tôi chỉ tham gia một cách hữu hình vào việc tối ưu hóa hiệu suất của Magento, nhưng đây là một vài lý do khiến hệ thống quá chậm

  1. Các bộ phận của Magento sử dụng hệ thống cơ sở dữ liệu EAV được triển khai trên MySQL. Điều này có nghĩa là truy vấn một "điều" duy nhất thường có nghĩa là truy vấn nhiều hàng

  2. Có rất nhiều điều đằng sau hậu trường (cấu hình ứng dụng, cấu hình hệ thống, cấu hình bố cục, v.v.) liên quan đến việc xây dựng các cây XML khổng lồ trong bộ nhớ và sau đó "truy vấn" các cây đó để tìm thông tin. Việc này cần cả bộ nhớ (lưu trữ cây) và CPU (phân tích cú pháp cây). Một số trong số này (đặc biệt là cây bố trí) là rất lớn. Ngoài ra, trừ khi bật bộ đệm, các cây này được xây dựng từ các tệp trên đĩatrên mỗi yêu cầu .

  3. Magento sử dụng hệ thống cấu hình của nó để cho phép bạn ghi đè các lớp. Đây là một tính năng mạnh mẽ, nhưng nó có nghĩa là bất cứ khi nào một mô hình, trình trợ giúp hoặc bộ điều khiển được khởi tạo, các lệnh PHP bổ sung cần phải chạy để xác định xem có cần một tệp lớp gốc hoặc tệp lớp ghi đè không. Điều này thêm lên.

  4. Bên cạnh hệ thống bố cục, hệ thống mẫu của Magento bao gồm rất nhiều kết xuất đệ quy. Điều này thêm lên.

Nhìn chung, các Kỹ sư Magento được giao nhiệm vụ, trước hết và quan trọng nhất, với việc xây dựng hệ thống linh hoạt nhất, có thể tùy chỉnh nhất có thể và lo lắng về hiệu suất sau này.

Điều đầu tiên bạn có thể làm để đảm bảo hiệu suất tốt hơn là bật bộ đệm ẩn (Hệ thống -> Quản lý bộ đệm). Điều này sẽ làm giảm một số chặn CPU / đĩa diễn ra trong khi Magento đang xây dựng các cây XML khác nhau của nó.

Điều thứ hai bạn sẽ muốn làm là đảm bảo máy chủ và nhóm vận hành của bạn có kinh nghiệm điều chỉnh hiệu suất Magento. Nếu bạn đang dựa vào kế hoạch $ 7 / tháng để thấy bạn thông qua, tốt, chúc may mắn với điều đó.


10
Cảm ơn bạn đã giải thích rộng rãi. Magento thực sự rất mạnh mẽ trong khi cho phép linh hoạt. Ban đầu tôi nghĩ rằng nó chỉ đơn giản là DB viết bị đình trệ do một số SQL được viết kém, nhưng tôi nhận ra rằng bây giờ có nhiều điều đang diễn ra đằng sau hậu trường mà ban đầu dự kiến. Lưu ý: bộ nhớ đệm đã bị vô hiệu hóa do các sản phẩm được thêm bởi chủ cửa hàng. Khi bật bộ đệm, anh ta phàn nàn về việc các sản phẩm không xuất hiện buộc tôi phải tắt bộ đệm trong khi cửa hàng đang được thiết lập. Nó đang được lưu trữ trên một máy chủ chuyên dụng, nhưng có vẻ như tôi sẽ phải chuyển Magento sang hộp độc quyền của riêng mình.
mr-euro

4
Tôi đã mô tả nó một lúc trước với XHProf. Việc phân tích cú pháp XML mất một lượng thời gian rất lớn - Tôi nghĩ rằng bạn đang ở trong danh sách này.
Morgan Tocker

1
Tôi đã tự hỏi nếu chạy Magento trên HHVM sẽ làm cho điều này tốt hơn nữa. Lần trước tôi đã kiểm tra HHVM không hỗ trợ Magento, nhưng nếu nó được thực hiện, điều đó có giúp ích không?
Bharadwaj Srigiriraju

1
Điều này giải thích rất nhiều. Biết là một nửa trận chiến. Tôi không thấy làm thế nào điều này không thể được coi là xây dựng.
flcoder

Đừng quên tối ưu hóa các tệp tự động tải của nhà soạn nhạc (xem hướng dẫn hiệu suất magento), nếu bạn sử dụng trình soạn thảo và - đối với Magento2 - hãy bật chế độ sản xuất! Varnish cũng là một ý tưởng rất hay, cung cấp ứng dụng của bạn không gặp vấn đề với bộ đệm toàn trang.
Dmitri Sologoubenko

54

Ngoài các khuyến nghị của Alan Storm về bộ nhớ đệm, có hai điều tôi đặc biệt khuyên bạn nên xem xét liên quan đến bộ nhớ đệm:

- Đảm bảo bộ nhớ đệm trong memcached, chứ không phải trên đĩa.

Tôi chăm sóc một vài cài đặt magento và một khi bạn nhận được bất kỳ loại tải nào trên hệ thống, memcached bắt đầu thực hiện nhanh hơn nhiều. Và thật dễ dàng để thay đổi nó (liên quan đến việc thực hiện các công cụ magento khác ít nhất!)

Điểm khởi đầu tốt là ở đây: http : //www.magentoc Commerce.com/boards/viewthread/12998/P30/ - nhưng nếu bạn chưa sử dụng memcached trước đây, thì cũng đáng để xem một số thông tin chung về nó.

- Kích hoạt mẫu / xem bộ đệm.

Đây là một bài viết hay: http://inchoo.net/ecommerce/magento/magento-block-caching/

Có những cái tốt trên trang web magento (bộ nhớ cache khối magento của google), nhưng hiện tại nó đã ngừng hoạt động.

Để thêm hai xu của tôi vào bộ đệm ẩn khối, tôi khuyên bạn nên tạo các khối của riêng mình trong / app / code / local, mở rộng các lõi và xác định các tham số bộ đệm, đặt tên cho chúng là xxx_Cache và sau đó cập nhật bố cục của bạn để sử dụng các khối này của những cái cốt lõi. Bằng cách này, bạn tránh mất các thay đổi hoặc phá vỡ hệ thống khi nâng cấp magento.


3
Thx cho các điểm. Tôi sẽ có một cái nhìn về memcached mà tôi chưa từng sử dụng trong sản xuất trước đây. Ý tưởng tốt về nhân bản các khối quá.
mr-euro

3
Tôi thứ hai những gì benlumbey nói, tôi không sử dụng memcached khi tôi đang chạy máy chủ windows, nhưng tôi lưu trữ thư mục / var trong một ổ đĩa trạng thái rắn và điều đó đã tạo ra sự khác biệt lớn đối với tôi.
Rick J

@rickj - vâng, bất cứ điều gì để làm cho thư mục ./var nhanh hơn chắc chắn sẽ giúp ích, tôi cũng đã thử sử dụng tmpfs trước khi memcached và cũng nhận được một sự cải thiện đáng kể từ đó.
benlumley

Tôi sẽ thêm để sử dụng bộ đệm apc cho chỉ một nút vì nó dường như có ít chi phí hơn sau đó được ghi nhớ cho môi trường nhiều nút.
sbditto85

2
Vâng đúng. Nhưng có một số lưu ý ở đó, tùy thuộc vào cách bạn chạy PHP, bạn có thể kết thúc với bộ đệm APC riêng cho mọi quy trình PHP - điều này thậm chí còn ít tối ưu hơn nếu bạn đang xử lý các quy trình PHP của mình theo mọi yêu cầu X.
benlumley

23

Nếu bạn chưa nhìn thấy nó, Magento và Rackspace đã hợp tác để tạo ra một tờ giấy trắng về điều chỉnh hiệu suất Magento. Nó là tuyệt vời. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-av Available-magento-stores-powered-by-crackspace-solutions /

--- biên tập ---

Một tài nguyên tuyệt vời khác, mới có sẵn (tháng 10 năm 2011) là: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Cảm ơn vì Alan Storm về điều này.)


Cảm ơn đã cập nhật, tôi sẽ đọc nó sâu hơn sau.
mr-euro

2
Liên kết thứ hai đó bây giờ đã chết.
Laizer

1
Liên kết đầu tiên cũng chết.
Edward

Liên kết bị hỏng. Ner
Ner

1
Liên kết trực tiếp cho Whitepaper của Rackspace (liên kết số 1).
Levi Figueira

17

Cũng có thể có một lý do rất không rõ ràng tại sao giao diện quản trị của bạn rất chậm. Magento có một mô-đun có tên Mage_AdminNotification. Cố gắng vô hiệu hóa ext. Bởi vì những gì nó làm là truy vấn magentoc Commerce.com cho các thông báo cập nhật mới. Nếu máy chủ của họ chậm, trang quản trị của bạn sẽ chờ và có hiệu lực chậm do mạng bị chậm và tải các tin tức bên ngoài. Nếu bạn đã bảo mật kết nối máy chủ gửi đi của mình thông qua tường lửa, điều này thậm chí còn khó chịu hơn, vì giao diện quản trị viên sẽ chờ thời gian chờ khi không thể truy cập magentoc Commerce.com

Để tắt nó: đi đến Hệ thống -> Cấu hình, cuộn xuống dưới cùng và nhấn Nâng cao (trong phần Nâng cao). Bây giờ vô hiệu hóa Mage_AdminNotificationvà lưu!


4
Điều này tạo ra sự khác biệt đáng kể về hiệu suất trên môi trường nhà phát triển địa phương của tôi, điều luôn làm tôi thất vọng vì nó chạy chậm như thế nào trên hộp phát triển rất nhanh. Cảm ơn bạn!
Random_user_name

Trong Magento2: Cửa hàng-> Cấu hình-> Nâng cao-> Nâng cao, sau đó tắt Mage_AdminNotification.
Scott C Wilson

6

Tôi chỉ có một trải nghiệm hời hợt với Magento. Tôi đã cài đặt nó trên một máy chủ chia sẻ lưới và tải trang là ảm đạm ~ 5 + giây. Trên một vỏ bọc, tôi đã cài đặt nó trên máy chủ chuyên dụng cho các trang web CMS và nó cảm thấy rất, rất linh hoạt.

Lưu trữ chuyên dụng của tôi đã có ~ 10 Joomla! các trang web và một trang web VBullitin đang chạy.

Tôi đoán là nó sẽ không được thực hiện trên lưu trữ được chia sẻ. Việc đăng ký quá mức sẽ không cho phép đủ tài nguyên để Magento chạy như mong muốn.


6

Tôi tham gia nhiều hơn vào việc tối ưu hóa máy chủ được quản lý trong công ty của mình nhưng tôi có thể có một vài lời khuyên cho bạn. Đầu tiên, bạn có thể xem mã kỹ hơn bằng cách sử dụng tính năng theo dõi mã của máy chủ Zend. Nó sẽ cho phép bạn nhìn thấy nơi và khi mọi thứ bị bẩn.

Tôi hoàn toàn chia sẻ sự cân nhắc của benlumley về bộ đệm. Hầu hết các trang web chúng tôi lưu trữ thậm chí không kích hoạt bộ đệm ẩn. Bộ đệm này phải được gọi rõ ràng và không được "giả định". Vì vậy, nếu mã của bạn chưa tham gia vào cơ chế này, đó là thứ bạn chắc chắn muốn thử. Nếu bạn có phiên bản EE, bạn có thể tải trang Full lên để có được con thú tốt nhất.

Một proxy ngược cũng sẽ giúp rất nhiều. Nó sẽ lưu trữ các nguồn tài nguyên tĩnh, giảm đáng kể áp lực lên ngăn xếp phiên dịch php của các máy chủ trước của bạn.

Đừng quên ghi các phiên & bộ đệm Magento vào đĩa RAM. Điều này cũng chắc chắn sẽ đưa bạn đến một cấp độ biểu diễn khác.

Vẫn còn nhiều điều để nói ở đây nhưng tôi sắp hết thời gian. Bạn phải biết rằng một trang web tốt, được mã hóa tốt trong phiên bản 1.4.1 CE, chạy trên máy chủ RAM 2x5650 Xeon + 16 GB và có Rproxy trên đầu có thể mất tới 50 000 khách truy cập mỗi ngày với các trang mượt mà cho mọi người .


5

Chuyển đổi từ Apache sang LiteSpeed ​​đã giúp chúng tôi rất nhiều. Ngoài: Chỉnh sửa cài đặt của MySQL, cài đặt Fooman Speedster (mô-đun để nén / kết hợp các tệp js và css) và cài đặt APC. Magento cũng đã đăng một tờ giấy trắng về cách có được hiệu suất tốt nhất từ ​​phiên bản doanh nghiệp, nhưng nó cũng có thể áp dụng tương tự cho các phiên bản khác: http : //www.magentoc Commerce.com/whitepaper/


4

Có nhiều lý do tại sao giỏ hàng Magento của bạn có thể chạy chậm nhưng không có lý do nào cho việc có nhiều cách để khắc phục vấn đề và làm cho nó trở nên khá nhanh. Kích hoạt Gzip bằng cách sửa đổi tệp htaccess của bạn là một sự khởi đầu. Bạn cũng có thể cài đặt phần mở rộng speedster fooman. Loại máy chủ được sử dụng cũng sẽ xác định tốc độ cửa hàng của bạn. Thêm lời khuyên và giải thích tốt hơn tại đây http://www.interactone.com/how-to-speed-up-magento/


4

Khi tôi cài đặt lần đầu tiên, tôi có các trang mất 30 giây để tải. Máy chủ của tôi không được sử dụng tối đa trong ram hoặc bộ xử lý, vì vậy tôi không biết phải làm gì. Nhìn vào bảng điều khiển mạng của fireorms, nó đã tải khoảng 100 tệp trên mỗi trang và mỗi tệp mất một thời gian dài để kết nối. Sau khi cài đặt fooman speedster và gzip trong htaccess, thời gian tải xuống còn 3 giây, giống như chúng đã ở trên các giỏ hàng khác trên máy chủ của tôi.


3

Magento rất chậm vì thiết kế cơ sở dữ liệu không tốt lắm. Mã này là một mớ hỗn độn và rất khó để cập nhật và tối ưu hóa. Vì vậy, tất cả các tối ưu hóa được thực hiện thông qua bộ nhớ cache thay vì mã.

Mặt khác. Nó là một webshop với rất nhiều công cụ. Vì vậy, nếu bạn cần một webshop linh hoạt chỉ cần mua một máy chủ rất mạnh mẽ và bạn sẽ ổn thôi.


1
Thiết kế cơ sở dữ liệu thực sự rất tốt và linh hoạt.
Đen

3

nó cũng sẽ đi xuống chức năng so với hiệu suất.

Hiệu suất thô đạt được bằng cách sử dụng nginx, php-fpm, memcached, apc và một máy chủ được thiết kế phù hợp.

Chức năng như hiệu suất plesk và magento có thể được quản lý bằng cách lấy toàn bộ cơ sở hạ tầng theo quan điểm khi thiết kế đám mây hiệu suất magento.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.