2010-03-10 42 views
15

Mỗi trang trên trang web của tôi được hiển thị bằng cách sử dụng PHP.Bao nhiêu PHP bao gồm quá nhiều?

Mỗi tệp PHP sử dụng khoảng 10 bao gồm. Vì vậy, đối với mỗi trang được hiển thị, máy chủ cần tìm nạp 10 tệp, ngoài các chức năng còn lại của nó (MySQL, v.v.).

Tôi có nên kết hợp chúng thành một tệp bao gồm không? Điều đó có làm cho BẤT K difference sự khác biệt nào với tốc độ thực tế không? Nó không phải là một nhiệm vụ tầm thường vì sẽ có một spaghetti có phạm vi biến đổi để phân loại.

Trả lời

24

Bao gồm các tệp được xử lý trên máy chủ, do đó trình duyệt không bị "tìm nạp". Sự khác biệt hiệu suất của việc sử dụng bao gồm so với sao chép và dán mã hoặc hợp nhất các tệp là không đáng kể (và tôi đoán chúng ta đang nói đến trong 10   ms đến 100   ms phạm vi, ở mức tuyệt đối nhất), rằng nó là không 't ở tất cả giá trị nó.

Hãy thoải mái includerequire cho nội dung trái tim của bạn. Làm sạch mã quan trọng hơn nhiều so với việc cạo ít hơn 100   ms khi tải trang. Nếu bạn đang xây dựng một cái gì đó mà thời gian là quan trọng, bạn không nên sử dụng PHP anyway.

+0

Tôi nghĩ đó là phức tạp hơn thế, vì nó phụ thuộc nếu các tập tin được đọc từ bộ nhớ hoặc đĩa. Từ đĩa - nó có thể mất vài ms, phụ thuộc nếu nó bị phân mảnh và kích thước của tệp. (hoặc hệ điều hành có thể lưu trữ tập tin, hoặc thiết bị HDD chính nó ..) – Dor

+3

@ Đừng đánh giá thấp khả năng bộ nhớ cache đĩa :) phân mảnh đĩa sẽ không bao giờ ảnh hưởng đến trang web của bạn –

+0

Bạn thậm chí có thể giảm tác động hiệu suất bằng cách tăng realpatch_cache_size nếu bạn có nhiều tệp bao gồm. – gagarine

0

Mặc dù hoạt động I/O đĩa trong số những người ăn hiệu suất lớn nhất, một trang web thông thường sẽ không nhận thấy bất kỳ số lượng bao gồm hợp lý nào. Trước khi bạn nhấn bất kỳ vấn đề nào, bạn có thể đã có một số bộ nhớ đệm opcode để loại bỏ vấn đề này.

0

include\ and requires` chỉ tập tin mở ở phía máy chủ, nhưng đó có thể là thời gian consumming tùy thuộc vào phần cứng/hệ thống tập tin, vv

Dù sao, nếu bạn có thể, sử dụng autoloader. Chỉ các tệp cần thiết sẽ được tải theo cách đó.

Sau đó, nếu bạn cho rằng các tệp được bao gồm là nguồn chậm lại (và tôi nghĩ có rất nhiều điểm khác cần cải thiện trước đó), bạn có thể thử tự động hợp nhất các tệp. Bạn vẫn có một tệp cho mỗi lớp khi phát, nhưng bạn có thể tạo tệp có định nghĩa của mỗi lớp để chỉ có một include (giống như cat <all your included file>.php > to_include.php).

3

Điều cần có thời gian là tìm ra nơi tệp thực sự nằm trong đường dẫn bao gồm. Nếu bạn có nhiều vị trí trong đường dẫn bao gồm của bạn, PHP sẽ tìm kiếm từng vị trí cho đến khi nó tìm thấy tệp hoặc không thành công (trong trường hợp này nó sẽ phát ra lỗi). Đó là lý do tại sao bạn nên đặt đường dẫn bao gồm nơi hầu hết các tệp được bao gồm được tìm thấy trên đầu đường dẫn bao gồm.

Nếu bạn sử dụng đường dẫn tuyệt đối trong đường dẫn bao gồm của bạn, PHP sẽ lưu vào bộ nhớ cache trong bộ nhớ cache realpath, nhưng lưu ý rằng điều này sẽ bị lỗi rất nhanh. Vì vậy, có, bao gồm mười tệp có khả năng chậm hơn bao gồm một tệp lớn, đơn giản vì PHP phải kiểm tra đường dẫn bao gồm thường xuyên hơn. Tuy nhiên, trừ khi máy chủ web của bạn là một máy tính thực sự yếu, mười tệp không đủ để tạo ra tác động. Điều này chỉ thú vị khi bao gồm hàng trăm tệp hoặc có nhiều vị trí để tìm kiếm, trong trường hợp đó, bạn nên sử dụng bộ nhớ cache OpCode. Cũng lưu ý rằng khi bao gồm các tập tin, nó không phải là thực hành tốt để bao gồm mỗi và mọi tập tin ngay từ đầu, bởi vì bạn có thể bao gồm các tập tin mà không bao giờ được gọi bởi ứng dụng của bạn cho một yêu cầu cụ thể.


Reference