Vâng, tối ưu hóa và hack Doctrine 2 sẽ không phải là một nhiệm vụ dễ dàng. Tôi chỉ có thể khuyên bạn nên làm theo "thực hành tốt nhất" chính thức:
- Sử dụng Query cache
- Sử dụng siêu dữ liệu bộ nhớ cache
- Pre-tạo proxy
- Tránh người nghe (hoặc kết hợp chúng theo loại sự kiện (tuôn , cập nhật), nó sẽ tránh thời gian tra cứu và vòng lặp cho các sự kiện đã đăng ký)
- Sử dụng tải chậm bất cứ khi nào có thể
- Đảm bảo mối quan hệ hoặc thừa kế của bạn không bị rối loạn
(Lưu ý rằng tôi đã không được đề cập bộ nhớ cache quả mà nên không là một cách để tối ưu hóa một ứng dụng)
Từ sử dụng của tôi, phần quan trọng nhất mà tôi đã phải tối ưu hóa không phải là học thuyết riêng của mình (trong khi có tối ưu hóa để làm cho lõi) nhưng Truy vấn được tạo, như thường lệ, tôi EXPLAIN
đã chỉnh sửa các truy vấn và chỉ mục được tối ưu hóa.
Học thuyết 2 có thể tốn nhiều bộ nhớ để tải nhiều thực thể cùng một lúc có thể làm chậm ứng dụng của bạn, bạn có thể thấy hữu ích khi biết về các phương pháp clear()
, detach()
, iterate()
.
Mặc dù thực tế Doctrine 2 đôi khi có thể chậm, tôi chủ yếu nhận thấy rằng tôi đã có thể tối ưu hóa ứng dụng ở một nơi khác, bên trong khung công tác Zend hoặc bản thân PHP.
Giả sử, Doctrine 2 mất 100ms trong đó Zend Framework mất 300ms cho tổng số 450ms (nội dung I/O, hàm nội bộ PHP, v.v.)
Nếu bạn có thể chia dễ dàng bằng hai thời gian được thực hiện bởi Zend Framework, tối ưu hóa Doctrine 2 để đạt được 10% sẽ không tăng đáng kể tốc độ của ứng dụng của bạn. Hãy suy nghĩ về nó hai lần.
Dưới đây là một vài lời khuyên:
- Tạo điểm riêng của bạn thay vì sử dụng Xem Helpers (tránh những tra cứu helper)
- cache đối tượng Zend_Config của bạn (tải thực sự nặng)
- Tránh đường Regex bất cứ khi nào có thể (ZF tuyến là một nút cổ chai lớn)
- Sử dụng một autoloader ClassMap thay vì Zend_Loader_Autoloader mẹ đẻ
Có rất nhiều cách tối ưu để thực hiện, một số có tác động thực sự trong khi một số khác thì không.
Đảm bảo tìm chúng bằng cách lập hồ sơ ứng dụng của bạn, dễ dàng và đa nền tảng là sử dụng webgrind.
Nguồn
2012-05-10 12:04:09
+1 Cảm ơn câu trả lời chi tiết, nhưng bạn có thể vui lòng giải thích thêm về điểm này không. Tránh các tuyến đường Regex bất cứ khi nào có thể (tuyến ZF là nút cổ chai lớn) _? Trên thực tế, tôi đã có một bài viết trong một thời gian trước đó đã được hỏi về cùng một điều. Có lẽ bạn có thể cung cấp câu trả lời cho nó [Tối ưu hóa các tuyến khung công tác Zend] (http://stackoverflow.com/questions/10070634/optimizing-zend-framework-routes) – Songo
Vì câu trả lời này rất cũ, ** gợi ý: ** làm cho chắc chắn nâng cấp lên Zend Framework 2, đã được viết lại từ đầu và nhanh hơn nhiều trong hầu hết các trường hợp. –