2012-10-14 34 views
6

Ví dụ:Tiếp tục APC chậm?

$arr = array(); 

for($i = 5; $i < 300000; $i++) 
    $arr[$i] = 'foo'; 

apc_store('data', $arr); 

Sẽ mất 15 giây. Để có được dữ liệu mất khoảng 0,7s.

Nhưng nếu tôi tuần tự hóa dữ liệu bằng php và lưu trữ dữ liệu như vậy với apc_store('data', serialize($arr)); chỉ mất 1 giây.

Để có được dữ liệu tuần tự và sau đó unserialize nó, phải mất hơn một chút so với 0.6s

Tại sao APC quá chậm?

+0

'apc_store()' kích hoạt hàm '__sleep()', phải không? Nếu đó là sự thật, thì hàm [được chạy trước khi tuần tự hóa] (http://php.net/manual/en/oop4.magic-functions.php). Có lẽ điều đó làm giảm hiệu quả. Nó cũng giống như 'apc_store()' ghi đè lên các mục hiện có ... được cấp Tôi vẫn đang học PHP vì vậy tôi có thể là cách tắt. – Rob

+0

@MikeDtrick: APC không sử dụng serialization. Nó chỉ sao chép toàn bộ cấu trúc 'zval' (trên mức C). – Crozin

+0

@Crozin Đợi đã, cái gì? Điều này liên quan đến 'apc_store()' kích hoạt '__sleep()'? Điều đó có đúng không? – Rob

Trả lời

2

apc_sma_info() cung cấp một thông tin thú vị, có thể, có thể giải thích lý do xảy ra.

Thi apc_store() với một dữ liệu không tuần tự tạo ra cho tôi, trong block_lists chỉ số giá trị sau:

Array 
(
    [0] => Array 
     (
      [size] => 608 
      [offset] => 33152 
     ) 

    [1] => Array 
     (
      [size] => 5589032 
      [offset] => 11211992 
     ) 

    [2] => Array 
     (
      [size] => 2175976 
      [offset] => 31378408 
     ) 
) 

Trong khi serializing chúng bằng tay sản xuất:

Array 
    (
     [0] => Array 
      (
       [size] => 11178232 
       [offset] => 33760 
      ) 

     [1] => Array 
      (
       [size] => 1210040 
       [offset] => 16801024 
      ) 

     [2] => Array 
      (
       [size] => 15542104 
       [offset] => 18012280 
      ) 
    ) 

Đó là tò mò, nhưng dường như với việc tuần tự hóa thủ công, APC chia nhỏ các phần dữ liệu đầu tiên và cuối cùng trong một khối lớn hơn, thực hiện bố cục nội dung tốt hơn.

Dường như không phải là điều nhỏ nhặt bởi vì tôi đã chạy thử nghiệm này một vài lần và tôi nhận được kết quả tương tự mọi lúc.