2012-11-30 12 views
5

Chúng tôi đang điểm chuẩn Symfony2 với Doctrine2 và ZendFramework2 với Doctrine2.Vui lòng giải thích về kết quả này của Symfony2 và ZendFramework 2

Bài kiểm tra bao gồm trong ZF2 và SF2 Hello World trần cho đường cơ sở Vs. nhưng với Doctrine2 tải một đối tượng đơn giản. Chúng tôi sử dụng ab và chỉ đo các yêu cầu mỗi giây và thời gian cho mỗi yêu cầu.

Trong thử nghiệm khung trần Hello World ZF2 hoạt động tốt hơn nhiều so với SF2 gần gấp 2 lần.

Tuy nhiên, khi chúng tôi thực hiện thử nghiệm tương tự nhưng thêm Doctrine2 vào kết hợp thì kết quả được đảo ngược. SF2 + D2 hoạt động nhanh gấp 2 lần so với ZF2 + D2.

Chúng tôi có kỹ năng trong nhà cho cả Symfony2 và ZendFramework để chúng tôi có thể đi hoặc là, và chúng tôi không quan tâm đến việc sử dụng RAM vì chúng tôi luôn có nhiều RAM hơn. Nhưng chúng tôi quan tâm đến hiệu suất và chúng tôi cần trợ giúp công cụ tốt nhất.

Một số ý tưởng: - Chúng tôi tin rằng S2 đang làm một số loại bộ nhớ đệm - Chúng tôi tin ZF2 Doctrine2 ORM Mô-đun có thể là nguyên nhân - Chúng tôi không chắc chắn về những gì loại bộ nhớ đệm để sử dụng trong sản xuất? APC? Xcache? v.v.

Framework + Doctrine loading an object  
Concurrent:100/Connections: 1000  
    Resp. T ms Req. Sec 
ZF2  60 16 
S2   31 32 

Framework + Doctrine loading an object  
Concurrent: 25/Connections: 150  
    Resp. T ms Req. Sec 
ZF2   57 17 
S2   30 32 


====================== 

Framework Bare  
Concurrent: 100/Connections: 1000  
    Resp. T ms Req. Sec 
ZF2   10.5 94 
S2   15.3 65.36  

Framework Bare  
Concurrent: 25/Connections: 150  
    Resp. T ms Req. Sec 
ZF2   10 98 
S2   15.4 64 
+2

Các hello world là một cơ sở cho cách mỗi khuôn khổ hành xử ra khỏi hộp và nhận được một phép đo ban đầu là khả năng máy tính và cấu hình apache mong muốn. Thử nghiệm liên quan đến nhiều thử nghiệm khác nhưng tôi đã chỉ đề cập đến những điều có liên quan nhất. Chúng tôi đã kiểm tra khối lượng thấp, trung bình, cao, đồng thời, đơn, cục bộ, từ xa, hello world, tải 100, 1000, 10000 đối tượng, lặp lại, v.v. v.v ...Nó không giống như chúng ta có thể xây dựng một ứng dụng toàn bộ trong cả hai khuôn khổ chỉ để thử nghiệm vì vậy chúng tôi đang làm những gì chúng ta có thể trước khi chúng tôi bắt đầu phát triển. – smorhaim

Trả lời

7

Theo mặc định, tích hợp DoctrineORMModule không có loại bộ nhớ đệm nào hoạt động.

Bạn phải thiết lập bộ nhớ đệm cho các ánh xạ của bạn trong cấu hình:

'doctrine' => [ 
    'driver' => [ 
     'orm_default' => [ 
      'class' => 'Doctrine\ORM\Mapping\Driver\DriverChain', 
      'drivers' => [], 
      'cache' => 'apc', 
     ], 
    ], 
], 

Bộ nhớ cache mặc định là array. Nếu không, việc phân tích cú pháp chú thích và bất kỳ loại ánh xạ nào khác sẽ xảy ra ở mỗi yêu cầu.

Vì tôi cũng là người duy trì tích hợp ZF2-Doctrine2, tôi cũng có thể muốn tìm hiểu thêm về chủ đề này. Bạn có một môi trường thử nghiệm để hiển thị?

+0

Oh ok .. chúng tôi sẽ thử lại với các cài đặt này. Chúng tôi thực sự triển khai một ứng dụng nhỏ sử dụng ZF2D2 và nó bị khủng khiếp bằng cách tiêu thụ nhiều bộ nhớ hơn chúng tôi đã phân bổ cho nó và chúng tôi phải quay lại ... vì vậy đó là lý do chúng tôi làm điều này - mặt khác chúng tôi có cơ sở dữ liệu HUGE ứng dụng (với DB đa nhân bản cụm sao) với mức sử dụng thấp đến trung bình trong sản xuất trong 6 tháng nay và hoạt động của nó rất tốt ... Có, chúng tôi có một môi trường thử nghiệm. Bạn có bất kỳ đề xuất hoặc ý tưởng nào khác về cách kiểm tra điều này không? Chúng tôi muốn làm thử nghiệm như táo để táo càng tốt. – smorhaim

+0

Đề xuất là chia sẻ cấu hình cho "hello world with a entity" của bạn. Tốt hơn nếu là một mô-đun nhỏ :) – Ocramius

+0

Ngoài ra, xin lưu ý rằng việc triển khai mọi thứ không có bộ đệm siêu dữ liệu là sự điên rồ thuần túy. Phân tích cú pháp siêu dữ liệu bao gồm rất nhiều hoạt động quét mã phản chiếu. – Ocramius

0

Với bộ nhớ đệm thích hợp của mã opcode (APC) và yêu cầu DB (ví dụ với Memcache), tôi sẽ nói rằng sự khác biệt giữa Synmfony và Zend sẽ là lạc.

Không bao giờ chọn một khung vì sự khác biệt nhỏ như vậy. Bạn sẽ nhận được nhiều sự hài lòng hơn với bộ nhớ đệm và cải tiến DB trên khung công tác.

Trừ khi bạn đang xây dựng một ứng dụng thời gian thực tài chính hoặc chênh lệch 10 hoặc 20ms trong thời gian phản hồi là không có gì. Thời gian phản hồi trung bình cho một trang web thường là 100 giây!

Ngoài ra, việc chuyển đổi thời gian phản hồi thành "số yêu cầu mỗi giây" không có ý nghĩa, mặc dù tôi biết điều này là phổ biến trong điểm chuẩn PHP. Bởi vì Apache của bạn sẽ không xử lý yêu cầu tuần tự (một yêu cầu không tiêu thụ 100% CPU), 5 yêu cầu đến cùng một lúc sẽ được phục vụ trong thời gian ít hơn 5x thời gian cho một yêu cầu.

Như Ocramius nói, bạn nên kích hoạt bộ nhớ cache siêu dữ liệu:

$frontendOptions = array(
     'lifetime' => 7200, // seconds 
     'automatic_serialization' => true 
    ); 

    $backendOptions = array(
     'cache_dir' => APPLICATION_PATH_CACHE 
    ); 

    $this->cache = Zend_Cache::factory('Core', 
           'File',//Memcache is better 
           $frontendOptions, 
           $backendOptions); 

    //ADD a metadata cache for DB, important for perf 
    Zend_Db_Table_Abstract::setDefaultMetadataCache($this->cache); 
+0

Ví dụ bạn đã dán không liên quan gì đến Doctrine 2 ORM ... – Ocramius