Có một điểm để giảm thiểu PHP?


101

Tôi biết bạn có thể rút gọn PHP, nhưng tôi tự hỏi liệu có điểm nào không. PHP là ngôn ngữ thông dịch nên sẽ chạy chậm hơn một chút so với ngôn ngữ biên dịch. Câu hỏi của tôi là: liệu khách hàng có thấy tốc độ tải trang được cải thiện rõ rệt và như vậy nếu tôi giảm thiểu PHP của mình?

Ngoài ra, có cách nào để biên dịch PHP hoặc thứ gì đó tương tự không?


Một điểm rõ ràng là sự xáo trộn, để làm cho mã của bạn ít di động hơn, đây có thể là một mục tiêu hợp lệ.
John

Câu trả lời:


161

PHP được biên dịch thành bytecode, sau đó được diễn giải trên một thứ gì đó giống như một máy ảo. Nhiều ngôn ngữ kịch bản khác cũng tuân theo cùng một quy trình chung, bao gồm Perl và Ruby. Nó không thực sự là một ngôn ngữ thông dịch truyền thống, chẳng hạn như BASIC.

Sẽ không có hiệu quả tăng tốc độ nếu bạn cố gắng "giảm thiểu" nguồn. Bạn sẽ nhận được một sự gia tăng đáng kể bằng cách sử dụng bộ nhớ cache bytecode như APC .

Facebook đã giới thiệu một trình biên dịch tên là HipHop có thể chuyển đổi mã nguồn PHP thành mã C ++. Rasmus Lerdorf, một trong những ông lớn PHP đã làm một bài thuyết trình cho Digg vào đầu năm nay , đề cập đến những cải tiến về hiệu suất do HipHop đưa ra. Tóm lại, nó không nhanh hơn quá nhiều so với việc tối ưu hóa mã và sử dụng bộ đệm bytecode. HipHop là quá mức cần thiết đối với đa số người dùng.

Facebook gần đây cũng đã tiết lộ HHVM , một máy ảo mới dựa trên công việc của họ là tạo ra HipHop. Nó vẫn còn khá mới và không rõ liệu nó có cung cấp một sự thúc đẩy hiệu suất lớn cho công chúng hay không.

Để đảm bảo rằng nó được trình bày rõ ràng, vui lòng đọc đầy đủ bản trình bày đó . Nó chỉ ra rất nhiều cách để chuẩn và hồ sơ mã và xác định tắc nghẽn sử dụng các công cụ như Xdebugxhprof , cũng từ Facebook.


2
Lưu ý rằng toàn bộ bytecode / vm không thực sự mua cho bạn bất cứ thứ gì nếu không có bộ đệm bytecode bên ngoài (!). Tôi không hiểu tại sao PHP giữ ném bytecode đi theo mặc định ...

Tôi tưởng tượng rằng đó là một vấn đề lưu trữ được chia sẻ. APC được bao gồm trong PHP theo mặc định của thân cây dựa trên 6.0 cũ. Tôi không chắc liệu chúng ta sẽ thấy nó theo mặc định trong 5.4 hay bất cứ điều gì mà thân cây mới kết thúc được gọi ...
Charles

Cảm ơn rất nhiều vì thông tin. Rất tiếc, tôi không có quyền kiểm soát sâu máy chủ của mình (nó được thuê). Có khả năng máy chủ web sử dụng APC không?
Bojangle

3
Hầu hết các nhà cung cấp dịch vụ lưu trữ chia sẻ không sử dụng APC. Bạn nên xem xét Máy chủ riêng ảo để có thể kiểm soát cấu hình. VPS thường đắt hơn so với chia sẻ lưu trữ thông thường, nhưng ít tốn kém hơn nhiều so với một máy chủ chuyên dụng thực sự. Các nhà cung cấp VPS phổ biến bao gồm Slicehost và Linode. Đừng quên rằng bạn nên đo điểm chuẩn và lập hồ sơ cho mã của mình trước !
Charles

15

Bỏ qua ý tưởng giảm thiểu PHP để chuyển sang sử dụng bộ nhớ cache opcode, chẳng hạn như PHP Acceleratorhoặc APC.

Hoặc một cái gì đó khác như memcached


18
Tôi đã nói "một cái gì đó khác."
Stephen

3
không rõ ý bạn là gì khác ngoài bộ nhớ cache opcode.
Treffynnon

5
memcached là một cách hoàn hảo để cải thiện hiệu suất ... sau khi thực hiện đo điểm chuẩn và cấu hình và thiết lập bản thân bộ nhớ đệm đó sẽ là cách đạt được hiệu suất tốt nhất có thể.
Charles

1
nếu bạn đang sử dụng PHP 5.5, bạn không cần cài đặt bất kỳ bộ đệm opcode nào vì nó hiện đi kèm với nó theo mặc định.
tường lửa

1
Tôi thực sự nhìn lên cromulent :( Tôi đồng ý với những người khác, sử dụng memcached trong bối cảnh này là sai lệch dữ liệu Caching như là một phần của quá trình biên soạn không giống như mã op kết quả...
Mike Purcell

3

Với một số cách viết lại (tên biến ngắn hơn), bạn có thể tiết kiệm một vài byte bộ nhớ, nhưng điều đó cũng hiếm khi đáng kể.

Tuy nhiên, tôi thiết kế một số ứng dụng của mình theo cách cho phép ghép các tập lệnh bao gồm lại với nhau. Với php -wnó có thể được thu gọn đáng kể, tăng thêm một chút tốc độ để khởi động tập lệnh. Tuy nhiên, trên máy chủ hỗ trợ opcode, điều này chỉ lưu một vài lần kiểm tra mtime tệp.


3

Đây không phải là một câu trả lời hơn là một quảng cáo. Tôi đang làm việc trên một tiện ích mở rộng PHP có thể dịch các mã Zend để chạy trên máy ảo với tính năng nhập tĩnh. Nó không tăng tốc mã PHP tùy ý. Nó cho phép bạn viết mã chạy nhanh hơn những gì PHP thông thường cho phép. Chìa khóa ở đây là gõ tĩnh. Trên một CPU hiện đại, một ngôn ngữ động thực hiện hình phạt sai lệch nhánh trái và phải. Sự thật rằng mảng PHP là bảng băm cũng có chi phí cao: nhiều sai lệch nhánh, sử dụng bộ nhớ đệm kém hiệu quả, tìm nạp trước bộ nhớ kém và không có tối ưu hóa SIMD nào. Đặc biệt, lỗi chi nhánh và lỗi bộ nhớ cache là gót chân của các bộ vi xử lý ngày nay. Máy ảo nhỏ của tôi giải quyết vấn đề đó bằng cách sử dụng các kiểu tĩnh và mảng C thay vì bảng băm. Kết quả là chạy nhanh hơn khoảng mười lần. Điều này đang sử dụng diễn giải bytecode. Phần mở rộng có thể tùy chọn biên dịch một hàm thông qua gcc. Trong trường hợp đó, bạn nhận được tốc độ gấp hai đến năm lần.

Đây là liên kết cho bất kỳ ai quan tâm:

https://github.com/chung-leong/qb/wiki

Một lần nữa, phần mở rộng không phải là một trình tăng tốc PHP chung. Bạn phải viết mã cụ thể cho nó.


2

Có, có một điểm (phi kỹ thuật).

Máy chủ của bạn có thể theo dõi mã của bạn trên máy chủ của họ. Nếu bạn giảm thiểu và làm sai lệch nó, thì việc đánh cắp ý tưởng của bạn sẽ khó hơn.

Một lý do để giảm thiểu và làm xấu php có thể là khả năng chống gián điệp. Tôi nghĩ rằng mã xấu xí nên một bước trong triển khai tự động.


1

Có trình biên dịch PHP ... hãy xem câu hỏi trước này để biết danh sách; nhưng (trừ khi bạn có quy mô của Facebook hoặc đang nhắm mục tiêu ứng dụng của bạn để chạy phía máy khách), chúng thường gặp nhiều rắc rối hơn nhiều so với giá trị của chúng

Bộ nhớ đệm opcode đơn giản sẽ mang lại cho bạn nhiều lợi ích hơn cho những nỗ lực liên quan. Hoặc lập hồ sơ mã của bạn để xác định các điểm nghẽn và sau đó tối ưu hóa nó.


1

Bạn không cần phải rút gọn PHP. Để có được hiệu suất tốt hơn, hãy cài đặt bộ đệm Opcode; nhưng giải pháp lý tưởng sẽ là nâng cấp PHP của bạn lên phiên bản 5.5 trở lên vì các phiên bản mới hơn có bộ đệm opcode theo mặc định được gọi là Zend Optimiser đang hoạt động tốt hơn các phiên bản khác http://massivescale.blogspot.com/2013/06 /php-55-zend-optimiser-opcache-vs-xcache.html .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.