2011-10-14 27 views
21

Ứng dụng web hiện tại của tôi sử dụng khoảng 30 hoặc nhiều Contants (DEFINE()). Tôi đang đọc những thứ mà các biến nhanh hơn. Với điều kiện là có một quy ước đặt tên để tránh việc ghi đè biến, thì chỉ có một phép vẽ khác mà tôi thấy là các biến này sẽ phải được định nghĩa là các biến toàn cầu một số cách trong mọi hàm.Tốc độ nào nhanh hơn? Hằng số, Biến hoặc Mảng biến

Tốc độ nào nhanh hơn? Tôi sử dụng các hằng số này trong toàn bộ ứng dụng của tôi và có thể sẽ mãi mãi bổ sung thêm vào danh sách và chúng được sử dụng trong và ngoài các hàm và lớp.

+15

"Tối ưu hóa sớm là gốc rễ của mọi điều ác". Nói cho tôi biết, nếu bạn có thể _measure_ bất kỳ sự khác biệt nào;) – KingCrunch

+4

Thời gian lưu lại quá mỏng đến mức nó không thực sự đáng xem xét. –

+0

khi nào nó có giá trị tối ưu hóa này? Có chi phí cho mỗi lần bạn tham chiếu hằng số không? Và đó có phải là nhiều hơn khi bạn tham chiếu một biến không? 30 hằng số này là 100 tham chiếu trên mỗi trang. – David

Trả lời

23

Hằng số được xác định bằng cách sử dụng define() khá chậm trong PHP. Mọi người thực sự đã viết các tiện ích mở rộng (như hidef) để cải thiện hiệu suất.

Nhưng trừ khi bạn có vô số hằng số, điều này sẽ không tạo ra nhiều khác biệt.

Kể từ PHP 5.3, bạn cũng có thể sử dụng hằng số biên dịch bằng cách sử dụng const NAME = VALUE;. Đó là nhanh hơn nhiều.

+4

Xác định tải trọng của bạn là bao nhiêu? Tôi có khoảng 30 được tham chiếu 100 lần mỗi trang – David

+1

@David 30 không nhiều. Vấn đề chỉ có thể phát sinh với hàng trăm hằng số. – NikiC

11

Sự khác biệt sẽ thực sự nhỏ (tối ưu hóa vi mô). Bạn nên đóng gói một số hằng số của bạn trong các lớp để bạn có thể truy cập chúng theo Classname::CONSTANT để không gây ô nhiễm không gian tên chung của ứng dụng của bạn.

-1

Tôi cũng không thể tưởng tượng rằng bất kỳ sự khác biệt về tốc độ nào cũng sẽ là hậu quả. Điều chắc chắn đúng là các biến được sử dụng dễ dàng hơn nhiều so với các hằng số trong nhiều trường hợp. Tuy nhiên có vẻ như vấn đề thực sự của bạn là bạn có một loạt dữ liệu cấu hình và bạn muốn tránh phải truyền tải các biến đến các hàm, hoặc phải làm cho chúng trở thành toàn cầu.

Không có câu trả lời nào phù hợp với mọi người, nhưng giải pháp phổ biến là sử dụng lớp đăng ký hoặc tự tạo một lớp. Bạn có thể làm điều này khá dễ dàng bằng cách khai báo một mảng php. Sau đó, bạn khởi tạo đối tượng đăng ký và các hàm và lớp của bạn truy cập nó thông qua một cuộc gọi phương thức tĩnh. Thay vì cung cấp cho bạn các đoạn trích, tôi sẽ chỉ giới thiệu bạn đến zend_configzend_registry làm ví dụ. Trong khi ZF cung cấp những điều này, bạn không nên ngại cuộn các phiên bản của riêng mình, vì cũng không khó để tái tạo dưới dạng đơn giản hơn nếu bạn muốn tránh sử dụng ZF trong dự án của bạn.

7

Xét nghiệm nhanh cho thấy việc xác định các hằng số (define('FOO', 'bar');) là chậm hơn khoảng 16 đến 18 lần so với quy định một biến ($foo = 'bar';), nhưng bằng cách sử dụng định nghĩa (hằng số) có giá trị nhanh gấp 4 đến 6 lần.

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