Câu hỏi PHP: Mảng là var_export / include so với (un) tuần tự hóa so với mã json_ (en | de)


Tôi phải chuyển một mảng lớn từ máy chủ này sang máy chủ khác bằng một tệp. Đó là một mảng đa chiều nhưng khá đơn giản. Bây giờ tôi đang tìm kiếm cách hiệu quả nhất để đưa tệp này vào ứng dụng của tôi trên máy chủ thứ hai. Vì vậy, câu hỏi này là về phần file-> mảng, không phải mảng -> phần tập tin trên máy chủ đầu tiên.

Tất nhiên tôi đã làm một số điểm chuẩn trên 3 lựa chọn thay thế có vẻ hứa hẹn nhất. Dữ liệu điểm chuẩn hoàn chỉnh của tôi:

thời gian:

  • bao gồm: 0.338 ...
  • unserialize: 0.180 ...
  • json_decode: 0.134 ...

sử dụng bộ nhớ cao điểm:

  • bao gồm: 384374,64
  • unserialize: 201377.28
  • json_decode: 219528.08

Kích thước tập tin:

  • bao gồm: 3135 kB
  • unserialize: 3142 kB
  • json_decode: 1838 kB

Tôi nghĩ rằng json_decode là con đường để đi, bởi vì sử dụng bộ nhớ cao điểm là mối quan tâm nhỏ nhất của tôi và thậm chí có json là khá tốt. Nhưng tốc độ và kích thước tập tin của json chỉ là đá. Tôi đã không bao giờ nghĩ rằng nó được nhanh như vậy.

Bất kỳ phản đối hoặc đề xuất nào khác?


17
2018-01-19 10:24


gốc


Dường như bạn đã tự tìm ra giải pháp. Bây giờ bạn chỉ cần làm theo (và sử dụng JSON). :) - jensgram
+1 - Thật tuyệt khi bạn làm tất cả những việc đó trước khi đến đây và đặt câu hỏi của bạn. Hầu hết sẽ không đi đến nỗ lực này. - Andy E
Chắc chắn phương pháp include nên nhanh nhất vì nó đã là mã php? Tui bỏ lỡ điều gì vậy? - aland
@aland: Tôi không biết làm thế nào là điểm chuẩn được thực hiện, nhưng tôi đoán - Petr Peller
Phương thức include có thể chậm hơn một chút so với các phương thức khác vì PHP phải phân tích mã nguồn thay vì văn bản có khả năng phân tích cao. Tuy nhiên, nếu bạn đang sử dụng bộ nhớ cache bytecode như APC, nó sẽ là cách nhanh nhất để tải dữ liệu vì nó chỉ phải được phân tích cú pháp một lần và sau đó tất cả các yêu cầu tiếp theo sẽ chỉ sử dụng mã byte được lưu trữ. - chiborg


Các câu trả lời:


Kudo đến Jan cho 1) thực sự thử các phương pháp khác nhau 2) chia sẻ kết quả

Một số thời gian trước đây, tôi đã làm việc trên một hệ thống AI whwew knowledgebase được lưu trữ trong một mảng lớn. Tôi thấy nó là một thứ tự cường độ nhanh hơn để xây dựng lại toàn bộ mảng từ các bản ghi cơ sở dữ liệu (mysql cục bộ, khoảng 30.000 hàng) thay vì unserialize mảng từ một tệp.

(Điều này cũng có nghĩa là sau này tôi có thể sửa đổi mã để chỉ chọn lọc tải các phần có liên quan của cây kiến ​​thức để tăng tốc nó nhiều hơn).

HTH

C.


2
2018-01-19 10:37