Tôi đã thực hiện một số thử nghiệm về (các) chi phí khác nhau của php include()
mà tôi muốn chia sẻ, khi tôi thấy nhiều người lập trình hoặc nền tảng CMS xem chi phí trước khi chạy php này.
Chi phí của bản thân chức năng khá không đáng kể.100 tập tin bao gồm (với các tập tin trống) chi phí khoảng 5ms; và không quá một micro giây khi sử dụng opcache.
Vì vậy, tiết kiệm chi phí bao gồm tệp php lớn hơn chứa 100 lớp, trái với 100 tệp riêng biệt bao gồm, chỉ khoảng 5ms. Và sử dụng bộ nhớ cache OpCode làm cho chi phí đó không liên quan.
Chi phí thực tế đi kèm với kích thước tệp của bạn và PHP phải phân tích cú pháp và/hoặc biên dịch. Để có ý tưởng tốt hơn về những chi phí đó, đây là kết quả thử nghiệm tôi đã thực hiện trên máy Mac Mini Server 2010, với ổ đĩa 10.000 RPM, chạy PHP 5.3 với trình tối ưu hóa đã bật eCcelerator opcache.
1µs for 100 EMPTY File includes, w/opcache
5ms for 100 EMPTY File includes, no opcache
7ms for 100 32KB File includes, w/opcache
30ms for 100 32KB File includes, no opcache
14ms for 100 64KB File includes, w/opcache
60ms for 100 64KB File includes, no opcache
22ms for 100 128KB File includes, w/opcache
100ms for 100 128KB File includes, no opcache
38ms for 100 200KB File includes, w/opcache
170ms for 100 200KB File includes, no opcache
Do đó, tệp PHP 600KB có giá khoảng 6ms hoặc khoảng 1ms khi sử dụng bộ nhớ cache opcode. Những gì bạn thực sự muốn xem thay thế là kích thước của tất cả các mã được bao gồm theo yêu cầu.
Việc hợp nhất tệp trong combo để thử và lưu tài nguyên chắc chắn không phải là một ý tưởng hay và sẽ là một sai lầm khi sử dụng bộ đệm ẩn. Bài kiểm tra của tôi không tính đến tốc độ đĩa rất nhiều nếu có, vì tôi đã bao gồm cùng một tệp 100 lần. Điều đó nói rằng tôi không cảm thấy cần phải bao gồm đĩa I/O ở tất cả, bởi vì có một op-cache cài đặt thực sự là một điều kiện tiên quyết về hiệu suất cơ bản.
Để đạt được hiệu suất nhiều nhất có thể và tiết kiệm RAM, người ta phải làm ngược lại. Đó là chia nhỏ các tệp theo ngữ cảnh càng nhiều càng tốt, với việc sử dụng trình nạp tự động hoặc mẫu nhà máy lớp, để bao gồm ít mã không sử dụng nhất có thể cho mỗi và mọi yêu cầu.
mục đích đó, misusing include_once()
cũng có thể có những hậu quả thực hiện tiêu cực ...
Liên quan đến các lớp cơ sở của bạn. Tôi có hoàn cảnh tương tự, nhưng tôi chỉ bao gồm một phần nhỏ của lược đồ bảng. Chủ yếu là các loại trường và chi tiết khóa chính. Vì lý do hiệu suất, tôi cố ý không bao gồm lược đồ khá nặng của các bảng mọi lúc, vì chúng hiếm khi được sử dụng và khi chúng được sử dụng, tôi chỉ sử dụng một vài trong số chúng tối đa theo yêu cầu.
Chi tiết cột đầy đủ trung bình của bảng là khoảng 20-50k cho mỗi mảng lược đồ. Bao gồm 10-15 trong số họ trên bất kỳ yêu cầu cho chi phí chỉ khoảng 1-3 ms cho các mảng. Mà trong chính nó, không phải là nhiều. Nhưng nó trở nên đáng giá khi kết hợp với một tiết kiệm 500k RAM cho mỗi yêu cầu.
Để làm rõ, đây sẽ là "lớp cơ sở" cho ORM. Không có cách nào dễ dàng để phân biệt chúng bằng "hàm", chúng chỉ là biểu diễn của lược đồ cơ sở dữ liệu. Chúng tôi ghi đè lên chúng trên mỗi "bản dựng" và hiện tại chúng tôi mở rộng chúng hai lần cho cả đối tượng và mức ghi đè của bảng. Trên bất kỳ yêu cầu nhất định nào, chúng tôi đang tải khoảng 10-15 trong số đó. Trong các thử nghiệm ban đầu của tôi, tôi thấy không có sự khác biệt đáng chú ý nào giữa tải tệp đầy đủ và không. Chúng tôi đã kích hoạt APC, vì vậy có lẽ đó là một phần của nó? – FilmJ