2009-06-14 30 views
14

Tôi đang xây dựng các lớp học giao diện với API Twitter và tôi tự hỏi liệu trình phân tích cú pháp XML hoặc JSON được tích hợp sẵn của PHP có nhanh hơn không? Twitter sẽ gửi cho tôi cùng một dữ liệu ở một trong hai định dạng, vì vậy hiệu năng PHP sẽ quyết định lựa chọn của tôi. Tôi đang sử dụng php_apc, vì vậy bạn có thể bỏ qua thời gian phân tích cú pháp và giả sử tôi đang chạy bytecode.PHP: là trình phân tích cú pháp JSON hoặc XML nhanh hơn?

Cảm ơn!

nhiều hơn: Tôi chỉ đang tìm cách nhận mảng kết hợp từ dữ liệu. Tôi không làm cây đi bộ, lặp lại nút hoặc bất cứ điều gì quá phức tạp. Định dạng sẽ luôn giống nhau. (Tôi hy vọng!)

+7

Tại sao không tự chuẩn bị nó trên các tập dữ liệu thực bạn sẽ sử dụng? Hiệu suất của trình phân tích cú pháp có thể khá phụ thuộc vào những gì bạn nạp nó. –

+1

Bạn định sử dụng xml-apis nào của PHP? Tôi đoán rằng SimpleXML và DOM chậm hơn hoặc ngang bằng với JSON, trong khi XMLReader hoặc SAX thì nhanh hơn. –

Trả lời

10

tôi đã không làm bất kỳ điểm chuẩn nhưng ...

Kể từ khi JSON chỉ là một mô tả về trình tự chuỗi lồng nhau, mà không cần phải cung cấp một giao diện DOM, thuộc tính phân tích cú pháp và các công cụ tinh tế khác , tôi đoán là một trình phân tích cú pháp JSON nhanh hơn một trình phân tích cú pháp XML.

+1

Tôi đồng ý.JSON có cấu trúc đơn giản hơn và ít năng động hơn. – Blixt

+4

Phân tích cú pháp định dạng JSON phức tạp hơn nhiều so với định nghĩa XML. Chuỗi phân tích cú pháp là một công việc rất phức tạp, có thể vì bạn sử dụng hàm thư viện chuẩn mà bạn không cảm thấy, nhưng đơn giản hơn nhiều là phân tích cú pháp XML có cấu trúc so với dữ liệu có cấu trúc trong JSON. –

+0

Nếu bạn chỉ xem xét phân tích cú pháp thuần túy, JSON sẽ nhanh hơn. Nhưng nó cũng phụ thuộc vào việc sử dụng dữ liệu được phân tích cú pháp. –

1

Câu trả lời tùy thuộc vào cách bạn dự định sử dụng nó. Tôi có nghĩa là nếu bạn sẽ tạo ra một số yêu cầu và xử lý chúng bên trong kịch bản PHP, tôi tin rằng XML sẽ nhanh hơn nhiều. Nhưng một khi bạn xem xét để tạo và gọi AJAX và kết quả sau này, bạn nên cân nhắc sử dụng JSON, vì bạn được hưởng lợi từ JavaScript tự động biểu diễn kết quả JSON như một đối tượng, nó hỗ trợ yêu cầu miền chéo với chức năng gọi lại. .

0

JSON có xu hướng nhỏ hơn rất nhiều kích thước

Ngoài ra bạn chạy json_decode lần và sau đó truy cập vào dữ liệu như là một mảng không sử dụng cho bất kỳ chức năng khác.

Nếu không có id điểm chuẩn đang chạy, hãy sử dụng JSON nhanh hơn

17

Nhận xét từ Adam ở trên đã thuyết phục tôi đánh giá nó. Sử dụng https://twitter.com/status/mentions.[format], tôi thấy rằng simplexml_load_string() là SLIGHT nhanh hơn json_decode(). Nhưng sự khác biệt là thực tế là một lề của lỗi.

Test #1 time (xml): 3.75221395493 seconds 
Test #2 time (xml): 4.1562371254 seconds 
Test #3 time (xml): 3.60420489311 seconds 
Test #4 time (xml): 3.85622000694 seconds 
Test #5 time (xml): 3.89622211456 seconds 

so

Test #1 time (json): 4.53225803375 seconds 
Test #2 time (json): 4.06823205948 seconds 
Test #3 time (json): 4.03222990036 seconds 
Test #4 time (json): 3.80421590805 seconds 
Test #5 time (json): 3.88022208214 seconds 

vào đoạn mã sau (nơi tôi đã curl'ed dữ liệu vào một tập tin, dữ liệu. [Xml, json]).

<?php 

$test = 'json'; //xml or json 
$data = implode(file("data.".$test),"\r\n"); 

for ($t=1; $t<=5; $t++) { 
    $start[$t] = microtime(1); 
    for ($i=0; $i<3000; $i++) { 
     if ($test == 'xml') $xml = simplexml_load_string($data); 
     else $json = json_decode($data); 
    } 
    $end[$t] = microtime(1); 
    echo "<p>Test #{$t} time ({$test}): " . ($end[$t] - $start[$t]). " seconds</p>"; 
} 
+14

Tuy nhiên, thử nghiệm này không, sau khi tải, đọc dữ liệu từ đối tượng XML. Trong khi json_decode trả về một mảng đơn giản, SimpleXML cung cấp một đối tượng với các phương thức đặc biệt để đọc dữ liệu, bao gồm một số phép thuật động. Điều này có thể ảnh hưởng đến hiệu suất. –

4

Tôi có xu hướng thấy rằng simplexml_load_string() nhanh hơn json_decode() khi trả về json là một đối tượng.

Tuy nhiên, việc json được trả về dưới dạng mảng sử dụng json_decode ($ string, true) thực sự nhanh hơn rất nhiều so với sử dụng đối tượng (như là đúng với hầu hết mọi thứ PHP khi so sánh mảng với đối tượng).

Tôi thấy json_decode() nhanh gấp hai lần simplexml_load_string() trong các trường hợp này.

1

Bạn đã xem xét mức tiết kiệm băng thông tổng thể có thể ảnh hưởng đến hiệu suất của tập lệnh của bạn không? Nếu các yêu cầu của bạn sẽ được lặp đi lặp lại một lượng thời gian đáng kể bằng cách sử dụng JSON phải là lựa chọn kinh tế hợp lý.

Các vấn đề liên quan