Pertanyaan Mana yang lebih cepat? Konstanta, Variabel, atau Array Variabel


Aplikasi web saya saat ini menggunakan sekitar 30 atau lebih Kontes (DEFINE ()). Saya sedang membaca hal-hal yang variabelnya lebih cepat. Asalkan ada konvensi penamaan untuk menghindari overwrite variabel, satu-satunya yang menarik kembali yang saya lihat adalah bahwa variabel-variabel ini harus didefinisikan sebagai variabel global, bagaimana dalam setiap fungsi.

Mana yang lebih cepat? Saya menggunakan konstanta ini secara keseluruhan di seluruh aplikasi saya dan mungkin akan selamanya menambahkan lebih banyak ke daftar dan mereka digunakan di dalam dan di luar fungsi dan kelas.


21
2017-10-14 10:41


asal


Jawaban:


Konstanta didefinisikan menggunakan define() cukup lambat dalam PHP. Orang-orang benar-benar menulis ekstensi (seperti hidef) untuk meningkatkan kinerja.

Tetapi kecuali Anda memiliki banyak konstanta, hal ini seharusnya tidak membuat banyak perbedaan.

Pada PHP 5.3 Anda juga dapat menggunakan konstanta waktu kompilasi menggunakan const NAME = VALUE;. Itu jauh lebih cepat.


23
2017-10-14 10:47



Perbedaannya akan sangat kecil (optimasi mikro). Anda sebaiknya mengenkapsulasi beberapa konstanta Anda di kelas sehingga Anda dapat mengaksesnya Classname::CONSTANT untuk tidak mencemari namespace global aplikasi Anda.


11
2017-10-14 10:44



Tes cepat menunjukkan bahwa mendefinisikan konstanta (define('FOO', 'bar');) sekitar 16 hingga 18 kali lebih lambat daripada mendefinisikan variabel ($foo = 'bar';), tetapi menggunakan nilai (konstan) yang ditentukan adalah sekitar 4 hingga 6 kali lebih cepat.


7
2018-01-24 09:04



Hasil patokan ini masih berlaku; variabel lebih cepat dari keduanya define() dan const: http://planetozh.com/blog/2006/06/php-variables-vs-constants

http://www.joomlaperformance.com/articles/performance/52_php_programming_tips_43_13_2.html


0
2017-07-17 05:32



Saya juga tidak dapat membayangkan bahwa setiap perbedaan kecepatan akan menjadi konsekuensial. Yang pasti benar adalah bahwa variabel lebih mudah digunakan daripada konstanta dalam banyak kasus.

Namun tampaknya masalah Anda yang sebenarnya adalah bahwa Anda memiliki banyak data konfigurasi dan Anda ingin menghindari keharusan memuat banyak variabel ke fungsi, atau harus menjadikannya semua global.

Tidak ada jawaban yang cocok untuk semua orang, tetapi solusi yang populer adalah memanfaatkan kelas registri atau membuat sendiri. Anda dapat melakukan ini dengan mudah dengan mendeklarasikan php array. Kemudian Anda menginisialisasi objek registri, dan fungsi dan kelas Anda mengaksesnya melalui pemanggilan metode statis. Daripada memberikan Anda potongan, saya hanya akan mengarahkan Anda ke zend_config dan zend_registry sebagai contoh. Sementara ZF menyediakan ini, Anda tidak perlu takut untuk menggulung versi Anda sendiri, karena keduanya sangat sulit untuk dibuat ulang dalam bentuk yang lebih sederhana jika Anda ingin menghindari penggunaan ZF dalam proyek Anda.


-1
2017-10-14 10:56