2013-02-18 31 views
17

Trong khi đánh giá hiệu quả của các khuôn khổ PHP Tôi đã xem qua một vấn đề lạPerformance text/html vs application/json

Gửi một JSON như application/json có vẻ là chậm hơn nhiều so với gửi không có tiêu đề phụ (mà dường như để dự phòng text/html)

Ví dụ # 1 (application/json)

header('Content-Type: application/json'); 
echo json_encode($data); 

Ví dụ # 2 (text/html)

echo json_encode($data); 

thử nghiệm với băng ghế dự bị apache (ab -c10 -n1000) mang lại cho tôi:

Ví dụ # 1: 350 #/giây

Ví dụ # 2: 440 #/giây

đó cho thấy rằng thiết lập các tiêu đề phụ dường như chậm hơn một chút.

Nhưng:

Lấy JSONs cùng qua "ajax" (jQuery.getJSON('url', function(j){console.log(j)});) nên sự khác biệt rất lớn (thời gian như đã thấy trong Chrome Web Inspector):

Ví dụ # 1: 340 ms/yêu cầu

Ví dụ # 2: 980 ms/yêu cầu

Whats vấn đề của sự khác biệt này?

Có lý do nào để sử dụng ứng dụng/json bất chấp sự khác biệt về hiệu suất không?

+1

Nó có tạo sự khác biệt nếu bạn chạy 'ob_start();' trước khi đặt tiêu đề? – mkaatman

+0

một chút, nhưng sự khác biệt là giống nhau – stwagner

+1

Nếu không có nhìn vào mã nguồn, tôi không nghĩ rằng jQuery.getJSON quan tâm đến kiểu nội dung, phải không? – stwagner

Trả lời

1

Máy chủ của bạn có xử lý gzipping/deflate khác nhau tùy thuộc vào loại nội dung không? Của tôi. Tin tưởng ab không chấp nhận gzip theo mặc định. (Bạn có thể thiết lập điều này trong ab với một tiêu đề tùy chỉnh với cờ -H). Nhưng Chrome sẽ luôn nói rằng nó chấp nhận gzipping.

Bạn có thể sử dụng thử nghiệm curl để xem nếu các tập tin có kích cỡ khác nhau:

curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null 

Bạn cũng có thể nhìn vào các tiêu đề để xem nếu gzipping được áp dụng:

curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate" 
+0

vâng, đó là nó, gzipping không được kích hoạt cho ứng dụng/json, không có tốc độ gần như bằng nhau! – stwagner

2

Tôi sẽ đưa phần cuối cùng của câu hỏi:

Có lý do để sử dụng ứng dụng/json mặc dù hiệu suất diffe rence?

trả lời: Vâng

Tại sao: 1) text/html thường có thể bị thay đổi json và sẽ đi còn tự do cho đến khi bạn cố gắng phân tích nó.ứng dụng/json sẽ thất bại và bạn có thể dễ dàng gỡ lỗi bất cứ khi nào json bị biến dạng

2) Nếu bạn đang xem json trong trình duyệt, có loại tiêu đề sẽ định dạng nó theo định dạng thân thiện với người dùng. text/html sẽ hiển thị nó nhiều hơn như một blob.

3) Nếu bạn đang tiêu thụ json này vào trang web của bạn, application/json sẽ ngay lập tức được chuyển đổi thành đối tượng js và bạn có thể truy cập chúng như obj.firstnode.childnode, vv

tính năng 4) gọi lại có thể làm việc trên application/json, nhưng không trên text/html

Lưu ý: Sử dụng gzip sẽ làm giảm nhẹ vấn đề hiệu suất. text/html sẽ vẫn nhanh hơn một chút, nhưng không phải là cách được đề xuất để tìm nạp các đối tượng json

Bạn muốn xem thêm thông tin chi tiết về hiệu suất. Độ dài tiêu đề chắc chắn không gây ra vấn đề về hiệu suất. Nhiều việc phải làm với máy chủ web của bạn phân tích định dạng tiêu đề.