2012-05-10 32 views
7

Tôi hiện đang xây dựng một ứng dụng web bằng cách sử dụng khung công tác Zend 1.11.11 và Doctrine 2.2. Tôi đã tìm kiếm rất nhiều cách tốt nhất và hacks để tối ưu hóa các framework được sử dụng.Doctrine 2 tối ưu hóa cực độ

Trong tìm kiếm của tôi cho Zend tối ưu hóa khuôn khổ tôi stumbled khi bài đăng này: Optimising the Zend Framework

gì là thú vị về nó là nó đề cập vài kỹ thuật tối ưu hóa mà nổi lên từ việc sử dụng framework và đã không được đề cập trong hướng dẫn sử dụng chính nó như:

  • tắt chế độ xemNgười bán hàng và tự chăm sóc chế độ xem.

Bây giờ tôi đang tìm các kỹ thuật tương tự có thể được áp dụng cho Doctrine 2 khác với các kỹ thuật được đề cập here in the manual.

Note

Tôi biết nhiều người sẽ đề cập đến profiling các truy vấn, bộ nhớ đệm và tìm kiếm cổ chai của ứng dụng, nhưng đó không phải um tìm kiếm :) Tôi đang tìm kiếm cải tiến thực tế phát hiện trong Học thuyết 2 cách sử dụng.

Cảm ơn;)

Trả lời

11

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.

+1

+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

+1

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. –