2010-01-17 17 views

Trả lời

6

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.

+0

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

+0

@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

2

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.

+1

Đ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. –

+0

Có bạn đi: Đã sửa lỗi. –

+0

Điều gì là với downvote? Bạn đã làm cho tôi có một danh tiếng 666 ... –

0

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.

+0

Tôi đang đánh bại bạn một lần nữa! –

+0

Vì chi phí (nhỏ?) Cho mỗi tệp. – Pindatjuh

1

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.

2

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ố . 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. :)

+0

Pekka có nghĩa là gì? – Pacerier

0

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 ...

1

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.

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