Rumah >pembangunan bahagian belakang >tutorial php >PHP dan Pergi sebagai Tindanan Teknologi.
Saya benci trend "Javascript for everything".. Ya.. Javascript boleh melakukan apa sahaja pada ketika ini.. BUTT, adakah ia berkesan untuk melakukannya?
Mari kita ambil contoh tugas terikat CPU yang sangat intensif. Ini ialah sampel kod yang mensimulasikan tugas intensif CPU. Dan mari lihat prestasi Javascript.
setTimeout(function() { console.log("Hello world") }, 1000) const startTime = Date.now(); while (Date.now() - startTime < 3000) {} //Simulating a long CPU intensive main thread task.. console.log("End")
Jadi, apa yang kita ada di sini? Saya, sebagai pengguna JAVASCRIPT menjangkakan untuk melihat "hello world" dicetak selepas 1 saat.. Dan rasa apa. Ia tidak. Ia memuntahkan "hello world" selepas 3 saat..
Mengapa ini berlaku? Untuk memahami perkara ini, kita perlu memahami cara gelung peristiwa dalam penyemak imbas dan nod js berfungsi. Secara ringkas, gelung acara menyemak timbunan panggilan dan baris gilir panggilan balik pada masa yang sama. Fungsi panggil balik yang kita hantar dalam setTimeout() akan masuk ke dalam baris gilir panggil balik setelah pemasa selesai dengan 1000ms.
Tetapi rasa apa... Callstack tidak kosong apabila pemasa selesai dengan kerjanya.. Ia masih sibuk melaksanakan tugas intensif CPU selama 3 saat yang kami tulis(Ya.. Ini simulasi.. Bukan a program bodoh dunia sebenar yang mengambil masa 3 saat untuk melakukan apa sahaja yang ingin dilakukannya).
Jadi, fungsi panggil balik dalam baris gilir panggil balik dan baris gilir microtask akan kebuluran.. Fungsi panggil balik yang lemah. Mereka hanya mendapat peluang untuk masuk ke dalam timbunan panggilan selepas 3 saat.. Dan itulah sebab mengapa kita melihat "hello world" dicetak selepas 3 saat walaupun saya menetapkan 1000ms.
Ya. Ini ialah imej rawak gelung acara yang saya muat turun dari web.. Imej Sejuk.
Mari kita ambil kod Go yang melakukan excat yang sama..
package main import ( "fmt" "time" ) func main() { time.AfterFunc(1*time.Second, func() { fmt.Println("Hello world") }) // Simulating a long CPU-intensive main thread task startTime := time.Now() for time.Since(startTime) < 3*time.Second { } print("End") }
Di sini, "hello world" akan dicetak selepas 1 saat.. Bagaimana? Kerana AfterFunc() berjalan pada GoRoutine sendiri yang tidak mempunyai urusan untuk mengganggu GoRoutine utama..
Mari bincang tentang reactJS. Ia menolak komponen javascript kepada pelanggan dan mendorong tekak pelanggan dengan begitu banyak perkara yang pelanggan mula pendikit..
Bayangkan PC kelas rendah membuat permintaan untuk beberapa fail HTML statik, dan anda mendapat banyak beban komponen tindak balas.. Apakah perasaan pelanggan? Ia menjadi perlahan.. Penyemak imbas perlu menghuraikan javascript, melaksanakan DOM maya, menjana HTML daripadanya.. Dan apa yang tidak..
Pelayar sedang melakukan semua kerja yang perlu dilakukan oleh pelayan..
Ingat ALIRAN SEMULAJADI WEB?
Mula-mula muatkan HTML, baru muatkan javascript? kenapa? Untuk membuat cat awal secepat mungkin.. Ingat hari-hari ketika kita memuatkan javascript dalam pengaki dokumen HTML?
React hanya membuat keseluruhan aliran terbalik.
Dan akibatnya, pelanggan perlu merenung skrin putih kosong untuk tempoh masa yang kukuh..
Perkara yang langsung menarik perhatian saya ialah Go ialah bahasa yang disusun dan ditaip secara statik.. Anda boleh mengatakan secara membuta tuli, Go sangat pantas dan jauh lebih pantas daripada javascript..
Ia mempunyai utas ringan terbina dalam dipanggil "GoRoutines" yang jauh lebih pantas daripada utas OS sebenar kerana utas Go adalah ringan.
Go boleh digunakan untuk membina titik akhir RESTful atau boleh digunakan untuk sebarang perkhidmatan hujung belakang..
BUTT, saya tidak boleh menggunakan Go untuk SSR.. PHP bersinar dalam hal itu.. Dalam tindanan saya, Go akan banyak digunakan untuk API intensif CPU atau mana-mana perkhidmatan hujung belakang.
PHP adalah perkara terbaik yang pernah saya gunakan untuk SSR. Mudah dan sangat lurus ke hadapan. Mencipta proses untuk setiap pelanggan.. Menjadikannya agak perlahan. Tetapi proses ini masih bebas antara satu sama lain tidak seperti benang yang akan berkongsi ruang memori proses yang sama dan tidak baik untuk keadaan perlumbaan dan banyak isu berkaitan benang lain..
PHP juga digandingkan rapat dengan web pada pendapat saya.. Pembolehubah superGlobal langsung dari kotak seperti $_GET, $_SERVER, dll.. yang menjadikannya lebih mudah untuk bekerja dengan web secara umum..
Pengurusan sesi dalam PHP terlalu bagus.. Didatangkan dengan bahasa itu sendiri.. Dan terlalu mudah untuk mengurus sesi..
PHP boleh digunakan semata-mata untuk SSR. Dan pengurusan sesi. Saya tidak boleh mempercayai PHP untuk melakukan tugas intensif CPU kerana ia menyebalkan. kenapa? Ia adalah bahasa yang ditafsirkan dan juga bukan berbilang benang..
Jadi, saya melepaskan semua panggilan intensif CPU kepada Go.
Terbaik dari dua dunia.. PHP untuk SSR, supaya pelanggan tidak menderita dan Pergi untuk tugas intensif CPU kerana ia boleh melakukan konkurensi dengan baik...
Atas ialah kandungan terperinci PHP dan Pergi sebagai Tindanan Teknologi.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!