Node.js vs. PHP: Pertempuran epik untuk mindshare pemaju

Ini plot klasik Hollywood: pertempuran antara dua rakan lama yang berpisah. Selalunya geseran bermula apabila seseorang rakan memancing minat terhadap apa yang selalu menjadi domain teman yang lain. Dalam versi bahasa pengaturcaraan filem ini, ini adalah pengenalan Node.js yang mengubah teman menjadi perlawanan dendam: PHP dan JavaScript, dua rakan kongsi yang pernah memerintah internet bersama-sama tetapi kini mengetepikannya untuk bahagian pemikiran pemaju.

Dahulu, perkongsian itu sederhana. JavaScript menangani sedikit perincian pada penyemak imbas, sementara PHP menguruskan semua tugas sisi pelayan antara port 80 dan MySQL. Itu adalah kesatuan gembira yang terus menyokong banyak bahagian penting dalam internet. Di antara WordPress, Drupal, dan Facebook, orang hampir tidak dapat meluangkan masa seminit di web tanpa mengalami PHP.

Kemudian beberapa kanak-kanak pintar mendapati dia dapat menjalankan JavaScript di pelayan. Tiba-tiba, tidak perlu menggunakan PHP untuk membina generasi pelayan generasi berikutnya. Satu bahasa adalah semua yang diperlukan untuk membina Node.js dan kerangka kerja yang dijalankan pada klien. "JavaScript di mana-mana" menjadi mantera bagi beberapa orang.

Sejak penemuan itu, JavaScript telah meletup. Pembangun Node.js kini boleh memilih antara koleksi kerangka kerja dan perancah yang sentiasa berkembang: React, Vue, Express, Angular, Meteor, dan banyak lagi. Senarai itu panjang dan masalah terbesar adalah memilih antara pilihan yang sangat baik.

Ada yang melihat ledakan di Node.js sebagai bukti bahawa JavaScript berjaya menang, dan ada banyak data mentah untuk meningkatkan pandangan itu. GitHub melaporkan bahawa JavaScript adalah bahasa yang paling popular dalam koleksi repositorinya, dan sepupu ciuman JavaScript, TypeScript, juga berkembang pesat. Banyak projek paling menarik ditulis dalam JavaScript dan banyak hashtag yang paling popular merujuknya. Sementara itu, PHP telah merosot dari tempat ketiga ke tempat keempat dalam ranking ini dan ia mungkin merosot lebih banyak lagi dalam jumlah siaran akhbar, pelancaran produk, dan momen lain yang sangat dipasarkan.

Tetapi hype pudar dan perisian dapat hidup selama beberapa dekad. Sebilangan besar pangkalan kod PHP tidak akan berpindah dan terus melayani sebahagian besar teks yang kita baca setiap hari. Dengan beberapa anggaran, 40 peratus halaman yang kami lihat bermula, dalam beberapa bentuk, dengan PHP. Sebahagiannya adalah kerana PHP terus dilahirkan semula. Dalam beberapa tahun kebelakangan ini, sistem yang menjalankan PHP ditulis semula. Bukan kod PHP yang sama yang melayari laman web datuk dan nenek anda.

Penyusun PHP yang ringkas dan tepat pada masanya memberikan jawapan lebih pantas daripada sebelumnya berkat teknik pintar yang sama yang mendorong revolusi Node.js. Kini PHP 7.2 dan HHVM menawarkan banyak pengoptimuman on-the-fly yang sama pintar yang dibawa oleh V8 ke Chrome dan Node.js. Bukan hanya itu, tetapi HHVM mempunyai Hack, dialek PHP pintar yang menawarkan sokongan penuh untuk ciri pengaturcaraan canggih seperti lambdas, generik, dan koleksi. Oleh itu, jika anda memerlukan ciri-ciri ini, anda tidak perlu mencari timbunan yang lebih lengkap.

Sudah tentu, pengakhirannya belum ditulis. Bagi setiap pengekod yang berminat tentang kesucian dan keremajaan Node.js dan kesederhanaan JavaScript di mana sahaja, ada orang lain yang gembira dengan asas kod yang mendalam dan kestabilan PHP yang telah lama difahami. Adakah pengkod lama akan mengalahkan pelayan dari awal? Adakah JavaScript akan menjatuhkan rakan lamanya untuk mencapai penguasaan dunia? Masukkan kumpulan popcorn yang lain ke dalam ketuhar gelombang mikro dan duduk kembali.

Di mana PHP menang: Mencampurkan kod dengan kandungan

Anda sedang menaip, mencurahkan pemikiran ke dalam teks untuk laman web anda, dan anda ingin menambahkan cabang ke prosesnya, sedikit pernyataan if-then untuk membuatnya kelihatan cantik, katakanlah, bergantung pada beberapa parameter dalam URL. Atau mungkin anda ingin mencampurkan teks atau data dari pangkalan data. Dengan PHP, anda membuka tag PHP yang ajaib dan mula menulis kod dalam beberapa saat. Tidak perlu templat — semuanya adalah templat! Tidak memerlukan fail tambahan atau seni bina yang rumit, hanya kekuatan logistik yang dapat diprogramkan di hujung jari anda.

Di mana Node menang: Memisahkan kebimbangan

Mencampurkan kod dengan kandungan adalah penopang yang boleh melumpuhkan anda. Pasti, seronok mencampurkan kod dengan HTML pada dua atau tiga kali pertama anda melakukannya. Tetapi tidak lama kemudian, pangkalan kod anda menjadi logik. Pengaturcara sebenar menambah struktur dan memisahkan lapisan kosmetik dari lapisan logik. Lebih mudah difahami oleh pengaturcara baru dan senang dijaga. Kerangka kerja yang berjalan di Node.js dibina oleh pengaturcara yang mengetahui bahawa kehidupan lebih baik apabila model, pandangan, dan pengawal terpisah.

Di mana PHP menang: Pangkalan kod mendalam

Web diisi dengan kod PHP. Platform yang paling popular untuk membina laman web (WordPress, Drupal, Joomla) ditulis dalam PHP. Platform bukan sahaja sumber terbuka, tetapi juga kebanyakan plugin mereka. Terdapat kod PHP di mana-mana, dan menunggu anda memuat turun, mengubah suai dan menggunakan untuk keperluan anda.

Di mana Node menang: Ciri lebih moden

Pasti, terdapat beribu-ribu fail PHP sumber terbuka yang hebat, tetapi ada juga yang menggunakan pemalam WordPress berusia 12 tahun dengan harapan dan berdoa agar seseorang memuat turunnya. Untuk setiap versi moden Symfony, terdapat perpustakaan berdebu dan terlupa yang tidak dikemas kini oleh siapa pun.

Siapa yang mahu menghabiskan berjam-jam, hari, atau berminggu-minggu dengan menggunakan kod yang tidak dikemas kini selama bertahun-tahun? Pemalam Node.js bukan sahaja lebih baru, ia juga dibina dengan pengetahuan penuh mengenai pendekatan seni bina terkini. Mereka dibina oleh pengaturcara yang memahami bahawa aplikasi web moden harus mendorong sebahagian besar kecerdasan kepada pelanggan.

Walaupun JavaScript mempunyai banyak keistimewaan kecil yang menimbulkan kegilaan, sebahagian besarnya adalah bahasa moden yang menggunakan sintaks moden dan beberapa ciri berguna seperti penutupan. Anda boleh mengkonfigurasi semula dan memperluasnya dengan mudah, menjadikan perpustakaan yang kuat seperti jQuery mungkin. Anda boleh meneruskan fungsi seperti objek. Mengapa menghadkan diri?

Tempat PHP menang: Kesederhanaan (semacam)

PHP tidak banyak: beberapa pemboleh ubah dan fungsi asas untuk juggling rentetan dan nombor. Ini adalah lapisan tipis yang tidak banyak berlaku kecuali memindahkan data dari port 80 ke pangkalan data dan kembali. Itulah yang sepatutnya dilakukan. Pangkalan data moden adalah alat ajaib, dan masuk akal untuk meninggalkan alat berat itu. PHP adalah jumlah kerumitan yang tepat untuk pekerjaan yang tidak semestinya kompleks.

Sekali lagi, jika anda seorang pengaturcara yang ingin melakukan lebih daripada berinteraksi dengan pangkalan data dan memformat hasilnya, kini anda boleh melakukan lebih banyak perkara dengan PHP tanpa memegang hidung anda. HHVM Facebook menambah sokongan untuk Hack, bahasa lengkap yang dipenuhi dengan ciri moden seperti anotasi jenis, generik, dan ungkapan lambda. Menggunakan ini menghadkan kod anda untuk berjalan hanya di HHVM, tetapi itu bukan perkara terburuk di dunia. Ia sangat pantas.

Di mana Node menang: Puluhan pilihan bahasa

Sekiranya pengguna PHP senang mendapatkan akses ke Hack, mereka harus mempertimbangkan untuk berpindah ke dunia Node.js kerana banyak bahasa utama dapat disusun silang untuk dijalankan dalam JavaScript. Terdapat pilihan terkenal seperti Java, C #, atau Lisp dan puluhan yang lain seperti Scala, OCaml, dan Haskell. Malah ada hadiah untuk pencinta nostalgia BASIC atau Pascal. Senarai bahasa yang menyusun JavaScript dari Jeremy Ashkenas cukup lengkap. Plus sepupu JavaScript seperti TypeScript dan CoffeeScript menawarkan pendekatan yang sedikit berbeza dan lebih baik untuk permainan yang sama.

Di mana PHP menang: Tidak memerlukan aplikasi pelanggan

Semua pembicaraan mengenai penggunaan bahasa yang sama di penyemak imbas dan pelayan itu bagus, tetapi bagaimana jika anda tidak perlu menggunakan bahasa apa pun di penyemak imbas? Bagaimana jika anda menghantar data dalam bentuk HTML? Bagaimana jika anda membina laman web yang sederhana dan statik untuk menyampaikan apa yang diperlukan tanpa interaktif? Penyemak imbas memunculkannya, dan tidak ada rasa sakit kepala atau gangguan yang disebabkan oleh jurang JavaScript yang salah yang cuba membuat halaman di penyemak imbas dari dua lusin panggilan perkhidmatan web. HTML tulen berfungsi lebih kerap daripada yang lain, dan PHP dioptimumkan untuk membuatnya. Mengapa bersusah payah dengan JavaScript di penyemak imbas? Bangun semua yang ada di pelayan dan elakkan memuatkan penyemak imbas kecil itu di telefon kecil itu.

Di mana Node menang: Panggilan perkhidmatan lebih tipis daripada panggilan PHP berlemak HTML

Walaupun aplikasi web HTML5 yang gila AJAX boleh mempunyai terlalu banyak bahagian yang bergerak, ia sangat menarik — dan sangat efisien. Setelah kod JavaScript berada di cache penyemak imbas, satu-satunya perkara yang bergerak di sepanjang wayar adalah data baru. Tidak ada banyak tanda HTML, dan tidak ada perjalanan berulang untuk memuat turun keseluruhan halaman. Hanya data yang berubah. Sekiranya anda bersedia meluangkan masa untuk membuat aplikasi web di sisi penyemak imbas yang licin, ada hasil yang besar. Node.js dioptimumkan untuk menyampaikan data dan hanya data melalui perkhidmatan web. Sekiranya aplikasi anda kompleks dan kaya data, ini adalah asas yang baik untuk penyampaian yang cekap.

Di mana PHP menang: SQL

PHP dibina untuk wujud bersama MySQL dan banyak variannya, seperti MariaDB. Sekiranya MySQL tidak betul, terdapat pangkalan data SQL hebat lain dari Oracle dan Microsoft. Kod anda boleh bertukar dengan beberapa perubahan pada pertanyaan anda. Dunia SQL yang luas tidak berakhir di sempadannya. Beberapa kod yang paling stabil dan dikembangkan dengan baik akan dihubungkan dengan pangkalan data SQL, yang bermaksud semua kekuatan itu juga dapat disatukan dengan mudah ke dalam projek PHP. Mungkin bukan satu keluarga yang sempurna dan bahagia, tetapi keluarga besar. Bukan hanya itu, tetapi dunia pangkalan data perlahan-lahan menjadi lebih baik kerana pembangun mencari cara untuk menambahkan lebih banyak kepintaran ke pangkalan data sehingga anda tidak perlu bekerja keras.

Tempat Node.js menang: JSON

Sekiranya anda mesti mempunyai akses ke SQL, Node.js mempunyai perpustakaan untuk melakukannya. Tetapi Node.js juga menggunakan JSON, bahasa utama untuk berinteraksi dengan banyak pangkalan data NoSQL terkini. Itu tidak bermaksud anda tidak boleh mendapatkan perpustakaan JSON untuk timbunan PHP anda, tetapi ada sesuatu yang mudah mengenai kesederhanaan bekerja dengan JSON ketika menggunakan JavaScript. Ini satu sintaks dari penyemak imbas ke pelayan web ke pangkalan data. Kolon dan kurungan keriting berfungsi dengan cara yang sama di mana sahaja. Itu sahaja akan menyelamatkan anda dari kekecewaan berjam-jam.

Di mana PHP menang: Kelajuan pengekodan

Bagi kebanyakan pembangun, menulis PHP untuk aplikasi web terasa lebih pantas: tidak ada penyusun, tidak ada penyebaran, tidak ada fail JAR atau preprocessor — hanya editor kegemaran anda dan beberapa fail PHP dalam direktori. Jarak tempuh anda akan berbeza-beza, tetapi ketika hendak membenturkan projek dengan cepat, PHP adalah alat yang baik untuk digunakan.

Di mana Node.js menang: Kelajuan aplikasi

Menulis kod JavaScript agak sukar apabila anda mengira tanda kurung dan tanda kurung, tetapi apabila selesai, kod Node.js anda boleh terbang. Mekanisme panggilan balik sangat baik kerana ia dapat menyelamatkan anda daripada menyusun utas. Inti dibina dengan baik dan dirancang untuk melakukan semua itu untuk anda. Bukankah itu yang semua orang mahukan?

Di mana PHP menang: Persaingan

Pertempuran untuk hati dan minda pemaju PHP masih berlangsung. Pasukan HHVM dan pasukan Zend bekerja keras untuk memberikan kod pantas untuk semua orang. Tanda aras bebas muncul, dan semua orang mendorong asas kod ke had. Ini hanya bermaksud prestasi yang lebih baik.

Di mana Node.js menang: Solidariti

Adakah anda benar-benar mahukan dua asas kod yang berbeza? Pasti, persaingan membantu, tetapi pemecahan tidak lama lagi. Apa yang berlaku apabila kod anda hanya menggunakan salah satu dari dua? Persaingan tidak ada gunanya jika anda perlu menghabiskan minggu atau bulan untuk menulis semula kod anda. Walaupun Node.js mengalami pecahannya sendiri beberapa tahun yang lalu, dengan pelancaran io.js, semesta Node.js sejak itu bersatu semula, memberikan semacam perpaduan bahasa yang mungkin lama dimahukan oleh pembangun PHP.

Tempat PHP menang: Aplikasi asas

Dalam beberapa tahun kebelakangan ini, sebilangan pembangun telah memulakan aplikasi web dan merasa kecewa dengan kelakuan perlahan. JavaScript yang mendorong semua bahagian bergerak boleh berpuluh-puluh ribu bait, kadang-kadang beratus-ratus ribu. Apabila semua paket tiba, mereka mesti diuraikan, disusun, dan akhirnya dilaksanakan — semuanya untuk menyampaikan beberapa bait seperti suhu dan ramalan.

Tindak balas terhadap kegilaan rococco ini boleh didapati di pasukan yang membina penjana laman web statik (463 pada penulisan ini) dan laman web yang dilucutkan dalam format AMP. PHP adalah pilihan semula jadi bagi mana-mana pasukan yang ingin menumpukan kepintaran pada pelayan supaya klien tidak terbeban.

Di mana Node.js menang: Kekayaan

Ludwig Mies van der Rohe, arkitek bangunan, pernah berkata, "Kurang lebih." Robert Venturi, seorang arkitek lain, datang dan menjawab, "Kurang adalah bosan." Telefon pintar mempunyai lebih banyak kuasa daripada bilik yang penuh dengan komputer Cray. Desktop mempunyai kad video dengan banyak peminat agar sentiasa sejuk sepanjang proses dijalankan. Mengapa kita mesti melucutkan kod kita dan hidup seperti mangsa era Depresi dalam novel Steinbeck? Hiduplah. Laman web besar dan licin yang penuh dengan kod JavaScript menarik, dramatik, dan paling menyeronokkan. Pasti agak tidak senonoh membuang banyak lebar jalur pada beberapa bit data, tetapi lebar jalur tidak pernah lebih murah. Hidup sedikit!

Di mana kedua-duanya menang: Tanpa Kepala

Kata "tanpa kepala" merujuk kepada kod PHP yang berjalan di pelayan. Baru-baru ini beberapa aplikasi PHP teratas seperti Drupal telah mengintip ke seberang lorong dan kagum dengan antara muka pengguna yang canggih yang dibina oleh kerangka kerja JavaScript seperti React, Angular, atau Vue. Alih-alih berusaha bersaing dengan mereka, mereka memberikan kawalan pelanggan dan menumpukan perhatian untuk melakukan pekerjaan yang baik dengan bahagian belakang pelayan.

Sekiranya anda telah melabur sedikit dalam kod PHP yang dijalankan di pelayan, ini mungkin cara untuk menikmati yang terbaik dari kedua-dua pendekatan tersebut. Kod PHP yang lama dan mapan bertindak sebagai pintu depan pangkalan data, memeriksa semula permintaan, membersihkan data, dan secara umum memberikan semua logik perniagaan. Bahagian pelanggan adalah aplikasi web progresif yang ditulis dengan kerangka JavaScript terkini. Apabila memerlukan maklumat, ia menghantar permintaan AJAX ke kod PHP.

Ini mungkin tidak masuk akal bagi seseorang bermula dari awal, tetapi jika anda telah bergantung pada PHP selama bertahun-tahun dan anda ingin maju secara beransur-ansur, ini boleh menjadi kompromi yang senang.

Di mana keduanya menang: Perkhidmatan Mikro dan tanpa pelayan

Paradigma perkhidmatan mikro atau pelayan yang semakin meningkat menawarkan kaedah untuk kod JavaScript dan PHP untuk menyatukan pelayan dan bergaul. Kedua-dua penyelesaian itu membelah kerja menjadi puluhan perkhidmatan atau fungsi yang lebih kecil dan ini dapat berjalan secara bebas dan tetap berada di lorong mereka. Beberapa bahagian, biasanya bahagian aplikasi yang lebih tua dan paling stabil, boleh menjalankan PHP. Bahagian lain, selalunya yang lebih baru, akan ditulis dalam Node.js. Bahasa POSTatau GETboleh menjadi lingua franca yang menyatukan mereka semua.