Apakah ada gunanya meminimalkan PHP?

101

Saya tahu Anda bisa mengecilkan PHP, tapi saya bertanya-tanya apakah ada gunanya. PHP adalah bahasa yang ditafsirkan sehingga akan berjalan sedikit lebih lambat daripada bahasa yang dikompilasi. Pertanyaan saya adalah: akankah klien melihat peningkatan kecepatan yang terlihat dalam pemuatan halaman dan semacamnya jika saya mengecilkan PHP saya?

Juga, apakah ada cara untuk mengkompilasi PHP atau yang serupa?

Bojangles
sumber
Satu hal yang jelas adalah kebingungan, untuk membuat kode Anda kurang portabel yang dapat menjadi tujuan yang valid.
Yohanes

Jawaban:

161

PHP dikompilasi menjadi bytecode, yang kemudian diinterpretasikan di atas sesuatu yang menyerupai VM. Banyak bahasa skrip lainnya mengikuti proses umum yang sama, termasuk Perl dan Ruby. Ini bukan bahasa interpretasi tradisional seperti, katakanlah, BASIC.

Tidak akan ada peningkatan kecepatan yang efektif jika Anda mencoba "memperkecil" sumbernya. Anda akan mendapatkan peningkatan besar dengan menggunakan cache bytecode seperti APC .

Facebook memperkenalkan kompiler bernama HipHop yang mengubah sumber PHP menjadi kode C ++. Rasmus Lerdorf, salah satu orang PHP besar melakukan presentasi untuk Digg awal tahun ini yang membahas peningkatan kinerja yang diberikan oleh HipHop. Singkatnya, ini tidak terlalu cepat daripada mengoptimalkan kode dan menggunakan cache bytecode. HipHop berlebihan untuk sebagian besar pengguna.

Facebook juga baru-baru ini meluncurkan HHVM , mesin virtual baru berdasarkan pekerjaan mereka membuat HipHop. Ini masih agak baru dan tidak jelas apakah itu akan memberikan peningkatan kinerja yang besar kepada masyarakat umum.

Hanya untuk memastikannya dinyatakan dengan jelas, silahkan baca presentasi itu secara lengkap. Ini menunjukkan banyak cara untuk benchmark dan profil kode dan mengidentifikasi hambatan menggunakan alat-alat seperti Xdebug dan xhprof , juga dari Facebook.

Charles
sumber
2
Perhatikan bahwa keseluruhan bytecode / vm tidak benar-benar membeli apa pun tanpa cache bytecode eksternal (!). Saya tidak mengerti mengapa PHP terus membuang bytecode secara default ...
Saya membayangkan bahwa ini adalah masalah hosting bersama. APC disertakan dalam PHP secara default pada trunk lama berbasis 6.0. Saya tidak yakin apakah kita akan melihatnya secara default di 5.4 atau apa pun yang akhirnya disebut trunk baru ...
Charles
Terima kasih banyak untuk informasinya. Sayangnya saya tidak memiliki kontrol yang dalam atas server saya (itu disewa). Apakah mungkin web host menggunakan APC?
Bojangles
3
Sebagian besar penyedia hosting bersama tidak menggunakan APC. Anda harus melihat ke dalam Virtual Private Server sehingga Anda dapat mengontrol konfigurasinya. VPS sering kali lebih mahal daripada hosting bersama biasa, tetapi jauh lebih murah daripada server khusus yang sebenarnya. Penyedia VPS populer termasuk Slicehost dan Linode. Jangan lupa bahwa Anda harus melakukan benchmarking dan membuat profil kode Anda terlebih dahulu !
Charles
15

Lupakan gagasan untuk mengecilkan PHP demi penggunaan cache opcode, seperti PHP Accelerator, atau APC.

Atau sesuatu seperti itu memcached

Stephen
sumber
18
Saya mengatakan "sesuatu yang lain."
Stephen
3
tidak jelas dari apa yang Anda maksud selain cache opcode.
Treffynnon
5
memcached adalah cara yang sangat tepat untuk meningkatkan kinerja ... setelah melakukan pembandingan dan pembuatan profil dan menetapkan bahwa caching itu sendiri akan menjadi perolehan kinerja terbaik.
Charles
1
jika Anda menggunakan PHP 5.5, Anda tidak perlu menginstal opcode cache apa pun karena sudah tersedia secara default.
firewall
1
Saya benar-benar mencari cromulent :(. Saya setuju dengan yang lain, menggunakan memcache dalam konteks ini menyesatkan. Data cache sebagai bagian dari proses kompilasi tidak sama dengan kode op yang dihasilkan.
Mike Purcell
3

Dengan beberapa penulisan ulang (nama variabel yang lebih pendek) Anda dapat menghemat beberapa byte memori, tetapi itu juga jarang signifikan.

Namun saya mendesain beberapa aplikasi saya dengan cara yang memungkinkan untuk menggabungkan skrip termasuk bersama-sama. Dengan php -witu dapat dipadatkan secara signifikan, menambahkan sedikit peningkatan kecepatan untuk startup skrip. Pada server yang mendukung opcode, ini hanya menyimpan beberapa pemeriksaan mtime file.

mario
sumber
3

Ini bukan jawaban daripada iklan. Saya sedang mengerjakan ekstensi PHP yang menerjemahkan opcode Zend untuk dijalankan pada VM dengan pengetikan statis. Itu tidak mempercepat kode PHP sewenang-wenang. Itu memungkinkan Anda untuk menulis kode yang berjalan lebih cepat dari yang diizinkan PHP biasa. Kuncinya di sini adalah pengetikan statis. Pada CPU modern, bahasa dinamis memakan penalti kesalahan prediksi cabang kiri dan kanan. Fakta bahwa array PHP adalah tabel hash juga membebankan biaya tinggi: banyak kesalahan prediksi cabang, penggunaan cache yang tidak efisien, prefetching memori yang buruk, dan tidak ada optimasi SIMD sama sekali. Kesalahan prediksi cabang dan cache miss khususnya adalah kelemahan utama bagi prosesor masa kini. VM kecil saya menghindari masalah itu dengan menggunakan tipe statis dan array C, bukan tabel hash. Hasilnya akhirnya berjalan kira-kira sepuluh kali lebih cepat. Ini menggunakan interpretasi bytecode. Ekstensi opsional dapat mengkompilasi fungsi melalui gcc. Dalam hal ini, Anda mendapatkan kecepatan dua hingga lima kali lebih cepat.

Berikut tautan untuk siapa pun yang tertarik:

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

Sekali lagi, ekstensi ini bukan akselerator PHP umum. Anda harus menulis kode khusus untuk itu.

cleong
sumber
2

Ya, ada satu poin (non-teknis).

Penghosting Anda dapat memata-matai kode Anda di servernya. Jika Anda memperkecil dan memperburuknya, maka mata-mata akan lebih sulit mencuri ide Anda.

Salah satu alasan untuk memperkecil dan memperburuk php mungkin karena perlindungan mata-mata. Saya pikir kode uglyfing harus selangkah dalam penerapan otomatis.

Dieter Porth
sumber
1

Ada kompiler PHP ... lihat pertanyaan sebelumnya ini untuk daftarnya; tetapi (kecuali Anda seukuran Facebook atau menargetkan aplikasi Anda untuk menjalankan sisi klien) biasanya masalah itu jauh lebih banyak daripada nilainya.

Caching opcode sederhana akan memberi Anda lebih banyak manfaat untuk usaha yang terlibat. Atau buat profil kode Anda untuk mengidentifikasi kemacetan, lalu optimalkan.

Mark Baker
sumber