Sau khi đọc về cách các phiên PHP dựa trên tập tin không phải là lớn nhất cho hiệu suất, nó đã cho tôi suy nghĩ. Điều này có nghĩa là một kịch bản PHP bao gồm rất nhiều tập tin là xấu là tốt? Vì nó bao gồm một tệp hoặc khác với cách tệp dữ liệu phiên được truy xuất?Có bao gồm rất nhiều tệp trong PHP giống như đối với các phiên dựa trên tệp không?
Trả lời
Bạn nên sử dụng spl_autoload_register () và OOP. Theo cách này, dù dự án của bạn nhỏ đến mức nào hay nó lớn như thế nào theo thời gian (và nó sẽ là câm để loại trừ khả năng này), PHP sẽ chỉ bao gồm những gì nó cần, không hơn, không kém.
Đó là số tiền hoàn hảo tương lai theo định hướng giữa sử dụng RAM trong thời gian chạy, khả năng bảo trì của mã và tác động của thời gian chờ của ổ đĩa cứng, tôi nói, miễn là bạn đã mô đun hóa mã của mình đúng cách, tất nhiên (và XDebug giúp ở đây).
Có nói rằng, nó ngụ ý tính xấu của việc bao gồm các tệp không sử dụng. Bao gồm các tệp (spl_autoload_register() hoặc cách khác), nên được thực hiện với đường dẫn tuyệt đối, do chỉ thị php.ini include_path, mà PHP sẽ tìm kiếm thông qua các tệp của bạn khi sử dụng đường dẫn tương đối.
Và một lưu ý nhỏ về lý do "bao gồm 'foo.php'" hoạt động như "bao gồm" ./foo.php '"(cách" bình thường "bao gồm tệp): đó là vì thư mục". " là một phần của include_path theo mặc định.
Nó không thực sự là xấu. Điều này có thể được hiển thị bởi thực tế là không ai cố gắng tạo trình biên dịch để làm cho toàn bộ ứng dụng PHP thành một tập lệnh đơn lẻ.
Nếu bạn thực sự sử dụng chức năng microtime
của PHP để đo lượng thời gian, nằm trong phần tỷ của một giây.
Đoạn 2 không chính xác: Mỗi tệp bao gồm() được tải vào bộ nhớ của mỗi tập lệnh, không có không gian dùng chung cho những bộ nhớ đó nếu bạn không sử dụng bộ đệm opcode như APC. –
Có bạn đi: Đã sửa lỗi. –
Điều gì là với downvote? Bạn đã làm cho tôi có một danh tiếng 666 ... –
Bao gồm nhiều tệp nhỏ kém hiệu quả hơn bao gồm tệp lớn, đó là lý do tại sao các công cụ bộ nhớ cache như APC tồn tại.
Tôi đang đánh bại bạn một lần nữa! –
Vì chi phí (nhỏ?) Cho mỗi tệp. – Pindatjuh
Giống như Chacha102 đã viết, nó không thực sự là xấu.
Nhưng nó cũng phụ thuộc vào tệp tập lệnh thực tế của bạn.
Trong thực tế, bạn nên lập hồ sơ cho mã của mình, Xdebug là điều tuyệt vời cho việc này.
Để làm rõ: tiểu sử và so sánh. Tránh nhiều tệp tập lệnh nhỏ nếu bạn có thể, nhưng vẫn giữ mã nguồn của bạn được sắp xếp (một tập lệnh duy nhất có hàng nghìn dòng không thoải mái để chỉnh sửa). Một hồ sơ sẽ cung cấp cho bạn một số con số để tìm một sự cân bằng tốt.
Tôi nghĩ rằng tất cả những ai thích thú với PHP đều đến mức khi thư viện của họ trở nên lớn và lo lắng về hiệu suất.
Kinh nghiệm của tôi là có, nếu bạn luôn tải tất cả thư viện của mình, thì điều này sẽ ăn bộ nhớ quý giá (Trong đó bạn chỉ được phân bổ một số MB cố định cho mỗi quy trình). Tôi đã có tập tin mã nguồn có trọng lượng 300-400kb (với ý kiến) mà ăn 2-3 MB cho mỗi trường hợp kịch bản. Thấy rằng tập lệnh chỉ có 16-32 MB với nhiều máy chủ được chia sẻ, đó là số lô. Ngoài ra, việc xử lý các tệp lớn như vậy thường xuất hiện ở tối đa một nửa giây cho mỗi yêu cầu, đó là cách quá nhiều.
Vì vậy, việc chia nhỏ chắc chắn là cần thiết và dễ dàng thực hiện với Tự động tải và liên kết. Xem câu trả lời của tôi cho this question để biết một số đề xuất về cách phân chia mã của bạn một cách khôn ngoan. Ngoài ra còn có một liên kết đến a question about how to organize a large PHP project, mang lại kết quả tuyệt vời. Tôi đang trong quá trình tự mình tìm ra cấu trúc hoàn hảo và chưa hoàn thành. :)
Pekka có nghĩa là gì? – Pacerier
Một tùy chọn khác là "lười" bao gồm các tệp, ví dụ: require_once chúng trước khi sử dụng chúng (ví dụ instantiating a class) để toàn bộ tải không được sử dụng bao gồm (loại) xảy ra.
Tôi đã sử dụng một tính năng Zend về vấn đề này (đăng ký tự động load) nhưng tôi không biết nếu nó là tổng quát để php hoặc nếu nó không phải là nhưng tồn tại để các khuôn khổ khác ...
Cá nhân, tôi luôn có nhiều vấn đề hơn với dữ liệu mà các trang xử lý thay vì kích thước và số lượng tệp nguồn bao gồm. Tuy nhiên, tôi viết nhiều mã tham số trong các lớp trừu tượng (nghĩ về điều này ngược lại với lập trình cắt-n-paste) nên rất nhiều công việc khác nhau được thực hiện bởi cùng một mã chỉ bằng cách thay đổi một nửa tá tham số đơn giản.
- 1. Maven: bao gồm tệp tài nguyên dựa trên tiểu sử
- 2. Bao gồm các tệp PHP với khuôn khổ Laravel
- 3. Bao nhiêu PHP bao gồm quá nhiều?
- 4. PHP CLI bao gồm() không tìm tệp
- 5. php bao gồm có cách nào để bao gồm một tệp tương đối chỉ với tài liệu đó không?
- 6. bao gồm tệp từ xa trong PHP
- 7. php bao gồm tệp trong lớp
- 8. PHP bao gồm tệp trong foreach Loop
- 9. MvcBuildViews dường như xây dựng nhiều tệp hơn được bao gồm trong tệp .csproj
- 10. Bao gồm tệp .cpp?
- 11. Đọc các tệp rất lớn trong PHP
- 12. Bao gồm tệp PHP dưới dạng chuỗi
- 13. Bao gồm các tệp R?
- 14. Stack Overflow bao gồm các tệp Javascript như thế nào?
- 15. Bao gồm tệp lô trong tệp lô
- 16. Cách sử dụng đường dẫn tương đối cho các tệp được bao gồm như .css
- 17. Bao gồm tệp .js trong tệp .js
- 18. Các tệp Javascript có nên bao gồm BOM hay không?
- 19. Tệp .js có thể "bao gồm" một tệp .js khác
- 20. Nhận tên tệp của tệp chạy PHP bao gồm
- 21. đối tượng đệm giống như tệp python
- 22. Cách bao gồm nhiều tệp nguồn trong C#
- 23. Không gian tên PHP và Bao gồm() với các lớp
- 24. Định nghĩa schema.ini đơn có thể bao gồm nhiều tệp
- 25. Có thể có nhiều dự án require.js được bao gồm trong một tệp html không?
- 26. php: các phiên dựa trên cookie
- 27. Bao gồm các tệp kết cấu vào tệp collada
- 28. Nhập không gian tên so với tệp bao gồm trong PHP
- 29. Tách một tệp thành nhiều tệp dựa trên mẫu
- 30. Có một Node.js tương đương với PHP bao gồm, do đó mã bao gồm có quyền truy cập vào các biến của tệp gốc không?
Bạn nói để sử dụng đường dẫn tuyệt đối ... nhưng không bao gồm './foo.php' một họ hàng bao gồm? – Pacerier
@Pacerier Bạn đang trộn "ghi chú bổ sung" với câu trả lời thực tế. Tôi đã đề cập đến những lưu ý bổ sung để kích động tự suy nghĩ. Câu trả lời thực tế vẫn hợp lệ: đường dẫn tuyệt đối tốt hơn. Đọc lại câu trả lời cẩn thận, không có mâu thuẫn hợp lý nào trong đó. – Flavius