Mengenai efisiensi eksekusi PHP, ada banyak artikel khusus di Internet, yang sebagian besar merupakan perdebatan antara kubu PHP dan Java. Aspek aplikasi yang berbeda dan lingkungan eksekusi yang berbeda akan menyebabkan perbedaan efisiensi yang lebih besar. Aplikasi "besar" yang disebutkan di sini tidak mengacu pada implementasi spesifik situs web besar seperti Google, eBay, dan Yahoo. Saya hanya berharap sistem Anda dapat berjalan lebih cepat dan lancar, serta dapat menampung lebih banyak pengguna secara online dapat memberikan PHP Sedikit bantuan untuk pemula.
Aplikasi "besar" yang disebutkan di sini tidak mengacu pada implementasi spesifik situs web besar seperti Google, eBay, dan Yahoo. Saya tidak bermaksud membujuk pembaca untuk melepaskan konsep dan keyakinan mereka dan lebih lancar. Ini dapat menampung lebih banyak pengguna online, dan saya berharap ini dapat memberikan bantuan kepada pemula PHP.
Mengenai efisiensi eksekusi PHP, ada banyak artikel khusus di Internet. Kebanyakan dari mereka dimulai dengan perdebatan antara kubu PHP dan Java dan diakhiri dengan ekspektasi yang tidak pasti. Memang benar, efisiensi pelaksanaan suatu program sulit diperoleh dari perbandingan. Aspek aplikasi yang berbeda dan lingkungan eksekusi yang berbeda akan menyebabkan perbedaan efisiensi yang lebih besar. Dan efisiensi juga perlu dipertimbangkan. Semua orang tahu bahwa bahasa assembly adalah bahasa tingkat rendah dan dapat menulis program yang sangat efisien. Namun, saya jarang melihat orang yang menggunakan assembly untuk pengembangan web dan memiliki kemampuan untuk menulis program dalam assembly programmer yang efisien sepertinya layak untuk dihormati semua orang, haha~ Kita tidak perlu membahas perbedaan antara PHP dan assembly, asalkan kita tahu perbedaan antara PHP kita sendiri dan PHP orang lain.
Pertama-tama, mari kita perjelas premis artikel ini: harus ada satu atau lebih server yang dapat Anda kendalikan sendiri, bukan ruang host virtual. Bagaimanapun, sudah banyak karya klasik dan kerangka kerja matang untuk sistem tujuan umum yang dapat berjalan di host virtual. Penambangan efisiensi telah dilakukan dengan sangat baik oleh para pendahulunya. Banyak dari konsep mereka juga telah diwarisi dan dikembangkan oleh banyak pengguna PHP saat ini. Semakin banyak Semakin banyak yang disebut "kerangka", mereka seperti bintang di langit. Saya tidak ingin menulis tentangnya lagi, karena pertama, level saya sendiri tidak terlalu bagus, saya tidak bisa menulis apa pun. baru, dan kalaupun saya menulisnya, akan membuat orang tertawa. Kedua, terlalu banyak artikel yang menulis tentang ini, dan terlalu banyak opini. Kebingungan adalah penyebab terbesar yang menyebabkan kematian banyak programmer jenius di masa depan.
Ada perbedaan besar dalam optimasi efisiensi antara program yang dijalankan pada server khusus dan program yang dapat dijalankan pada host virtual. Tentu saja, Anda dapat menginstal satu set discuz pada satu atau bahkan sekelompok server independen tanpa modifikasi, tetapi apakah itu benar-benar mendapatkan optimasi kinerja yang maksimal? Apakah Anda benar-benar layak untuk sekelompok server ini?
Server independen berarti pengguna memiliki kendali penuh atas mesin, termasuk menginstal dan menghapus perangkat lunak, mengonfigurasi parameter sistem, dan bahkan memodifikasi kode sumber. Berdasarkan platform perangkat keras terbuka, kinerja tidak hanya tercermin dalam kecepatan, tetapi juga mencakup keamanan, stabilitas, dll. Tidak seperti host virtual, pengguna harus mengonfigurasi sendiri parameter server web, menginstal dan mengkonfigurasi PHP, database, dan menginstal segala macam hal yang berantakan (seperti yang ingin saya katakan), dan tentu saja mereka harus bertanggung jawab atasnya.
Pertama, mari kita kemukakan beberapa istilah: waktu eksekusi, template, enkapsulasi database, Cache, Buffer, Hash, daemon, dan crontab.
Semua orang tahu bahwa waktu eksekusi adalah waktu yang diperlukan suatu program untuk dijalankan dari awal hingga akhir. Karena Web bersifat sementara dan tanpa kewarganegaraan, waktu eksekusi merupakan indikator efisiensi eksekusi program Web. Ini tidak cocok untuk mengukur program C/S atau program daemon latar belakang karena banyak di antaranya yang berjalan terus menerus. Contoh umum waktu eksekusi halaman adalah tampilan waktu di bagian bawah halaman forum Discuz. Biasanya Discuz berkisar dari beberapa milidetik hingga puluhan milidetik, bergantung pada platform yang digunakan, jumlah data, dan tekanan sistem saat ini.
Semua orang sudah familiar dengan template. Meskipun banyak orang yang hanya menggunakannya, mereka tidak tahu mengapa mereka menggunakannya. Templat secara tradisional merupakan cara untuk membagi lapisan logis. Dalam struktur atas MVC, ini memisahkan lapisan presentasi dari lapisan bawah. Dalam penggunaan sebenarnya, ini memfasilitasi pembagian kerja antara pemrogram dan perancang antarmuka. Namun, dalam banyak kasus sekarang, karena penggunaan templat yang tidak tepat, alih-alih mendorong pembagian kerja dan kerja sama antara pemrogram dan perancang antarmuka, hal itu malah menjadi penyebab utama kebencian timbal balik antara pemrogram dan seniman (saya rasa saya mengatakan ini di postingan sebelumnya), banyak orang yang mengeluh harus menghabiskan banyak waktu untuk mengatur template.
Enkapsulasi basis data tampaknya lebih terkait dengan Java. Ia menyediakan antarmuka panggilan terpadu untuk berbagai sistem basis data, biasanya beberapa kelas yang dienkapsulasi. Kelas-kelas ini terkadang juga menyelesaikan beberapa tugas seperti pemeriksaan SQL, pemfilteran, dll. Kemasan DB, PEAR DB, Adodb, dll di PHPLIB semuanya terkenal dan digunakan oleh banyak orang.
Cache dan Buffer sepertinya merupakan hal yang sama, Cache disebut cache dan Buffer disebut buffering. Dalam konsep perangkat keras, tujuan Cache adalah untuk menghubungkan dua perangkat dengan kecepatan berbeda, seperti register dan memori, CPU dan PCI-Bus, bus IDE dan hard disk. Arti asli dari Buffer adalah penyangga yang berbentuk pegas, sesuatu yang digunakan untuk meredam atau meredam guncangan akibat benturan. Buffer adalah metode pra-akses data yang digunakan untuk menyimpan data sementara dan mengirimkannya dengan kecepatan yang berbeda dari kecepatan penerimaan. Metode pembaruan Buffer dapat di-refresh secara otomatis sesuai dengan interval waktu, sedangkan Cache lebih memperhatikan "hit rate" dan menempatkan sejumlah kecil data yang sering digunakan dalam periode waktu saat ini ke dalam perangkat berkecepatan tinggi agar mudah dibaca. dan menulis. Dalam pengembangan program, meskipun tidak ada perangkat berkecepatan tinggi atau rendah, sumber data dapat memiliki efisiensi membaca dan menulis yang berbeda. Untuk sejumlah kecil data, membaca dan menulis file teks biasanya lebih efisien daripada akses database, dan efisiensi membaca dan menulis file teks yang sama di tmpfs lebih baik daripada efisiensi IO disk langsung. Buffer lebih tercermin dalam proses komunikasi dan antrian. Dalam banyak kasus, ini bukan karena penerima tidak dapat membaca lebih cepat, tetapi karena tidak perlu membaca lebih cepat.
Proses daemon adalah program yang terus dijalankan di latar belakang. Biasanya berperan dalam memantau, mengendalikan proses, dan menyediakan layanan eksternal. Misalnya Apache sendiri dapat dipahami sebagai proses daemon, meskipun sebenarnya terdiri dari banyak proses yang sering diperbarui (proses utama sudah diperbaiki).
Crontab adalah program terjadwal UNIX/Linux, yang mirip dengan "tugas terjadwal" Windows. Ini menetapkan interval waktu tertentu atau titik waktu tertentu untuk menjalankan program tertentu. Biasanya digunakan untuk menyelesaikan pembaruan otomatis, menghapus data sementara, dan operasi lain yang dilakukan secara otomatis sekali dalam jangka waktu tertentu.
Konsep khusus lainnya (terutama bagi orang yang terbiasa dengan pengembangan sistem secara umum) adalah setelah kita memiliki server independen, kita tidak perlu membatasi diri pada fungsi-fungsi yang dapat disediakan oleh PHP harus bekerja keras untuk mewujudkan hal ini. Ada banyak hal yang bisa kita manfaatkan. PHP tidak mahakuasa (ini pasti), dan kekurangan fungsionalnya dapat sepenuhnya dikompensasi oleh Perl. Sebagai bahasa umum, Perl dapat memberikan lebih banyak opsi fungsional, dan modul-modulnya sepadat pasir energi. Untuk kekurangan kinerja PHP, C dapat digunakan untuk mengatasinya. Fondasi PHP diwarisi dari C. PHP sendiri juga dikembangkan oleh C. Sangat masuk akal untuk menggunakan C untuk memperluas PHP.
Linux sendiri didukung oleh C dan Perl (Saya mengatakan ini bukan untuk melebih-lebihkan status Perl. Anda dapat melihat berapa banyak skrip Perl yang ada di Linux standar dan melihat apakah sistem terasa seperti orang cacat tanpa Perl). PHP mewarisi sebagian besar sintaksisnya dari C, dan mempelajari sebagian besar fitur Web, fungsi, dan simbol "$" yang tampaknya bertentangan dengan open source dari Perl (PHP adalah skrip Perl pada awalnya).
Mari kita menganalisis beberapa kode yang saya gunakan (Catatan: Berlaku untuk server mandiri Linux. Sepertinya saya sudah lama menyerah pada pengembangan skala besar untuk Windows dan host virtual). Ini menggunakan beberapa metode yang mungkin familiar, asing, atau tidak normal. Sistem saya RedHat AS3, tidak ada yang istimewa, versi PHP 4.4.0, MySQL 4.1. Saya tidak pernah dengan sengaja menulis kode yang harus menggunakan fitur-fitur baru PHP5 kecuali benar-benar diperlukan.
Direktori root Web saya berada di bawah /www. Apache dan PHP diinstal di bawah /usr/local/ secara default. MySQL adalah versi biner yang diunduh dan dikompilasi, dan saya juga membiarkannya di sana. Karena ini hanya untuk pengujian, saya tidak ingin terlihat berantakan. Sedangkan untuk proyek sebenarnya, terutama dalam kasus beberapa server, Anda perlu menerapkan sistem Anda dengan baik.
Untuk memperjelas struktur sistem, saya meletakkan semua file yang saya perlukan untuk digunakan di direktori sekunder.
Berikut beberapa cuplikan dari file header umum /includes/kernel/common.inc.php:
﹤?php
jika (!didefinisikan('IN_BSG')) {
KELUAR;
}
?﹥
Kode di atas memastikan bahwa itu hanya dapat dipanggil oleh program legal dan tidak akan disertakan oleh file lain. Jika program yang dijalankan tidak mendefinisikan konstanta 'IN_BSG', program tersebut akan berhenti setelah menyertakan common.inc.php ini.
﹤?php
list($usec, $detik) = meledak(" ", microtime());
$page_time_start = $usec + $detik;
?﹥
Semua orang mungkin familiar dengan dua baris ini, yang digunakan untuk menghitung waktu mulai eksekusi program. Sebelum program berakhir, hal ini dihitung kembali untuk mengetahui waktu yang dibutuhkan dalam mengeksekusi program. Jika Anda tidak peduli dengan hal ini, Anda dapat berkomentar dengan aman.