Node.js ve PHP: Geliştirici mindshare için destansı bir savaş

Klasik bir Hollywood komplosu: Ayrı yollara giden iki eski arkadaş arasındaki savaş. Çoğunlukla sürtüşme, bir arkadaş diğerinin her zaman konuşulmayan alanına ilgi duyduğunda başlar. Bu filmin programlama dili sürümünde, arkadaş hareketini bir kin eşleşmesine dönüştüren Node.js'nin tanıtımı: PHP ve JavaScript, bir zamanlar interneti birlikte yöneten ama şimdi geliştiricilerin akıl payına düşen iki ortak.

Eski günlerde ortaklık basitti. PHP, 80 numaralı bağlantı noktası ile MySQL arasındaki tüm sunucu tarafı görevleri yönetirken, JavaScript tarayıcıdaki küçük ayrıntıları ele aldı. İnternetin birçok önemli bölümünü desteklemeye devam eden mutlu bir birlik oldu. WordPress, Drupal ve Facebook arasında, insanlar PHP'ye girmeden web'de bir dakika bile geçiremezler.

Sonra zeki bir çocuk, sunucuda JavaScript çalıştırabileceğini keşfetti. Birdenbire, yeni nesil sunucu yığınlarını oluşturmak için PHP kullanmaya gerek kalmadı. Node.js ve istemcide çalışan çerçeveler oluşturmak için gereken tek dildi. "Her yerde JavaScript" bazıları için mantra haline geldi.

O keşiften bu yana JavaScript patladı. Node.js geliştiricileri artık mükemmel çerçevelerden ve yapı iskelesinden oluşan sürekli genişleyen bir koleksiyon arasından seçim yapabilirler: React, Vue, Express, Angular, Meteor ve daha fazlası. Liste uzun ve en büyük sorun mükemmel seçenekler arasında seçim yapmak.

Bazıları Node.js'deki patlamayı JavaScript'in kesin olarak kazandığının kanıtı olarak görüyor ve bu görünümü desteklemek için bol miktarda ham veri var. GitHub, JavaScript'in depo koleksiyonundaki en popüler dil olduğunu ve JavaScript'in öpüşen kuzeni TypeScript'in de hızla büyüdüğünü bildirdi. En havalı projelerin çoğu JavaScript ile yazılmıştır ve en popüler hashtaglerin çoğu buna atıfta bulunur. Bu arada PHP, bu sıralamada üçüncü sıradan dördüncü sıraya düştü ve muhtemelen basın bültenleri, ürün tanıtımları ve diğer yoğun pazarlanan anların sayısında daha da fazla düştü.

Ancak yutturmaca azalır ve yazılım onlarca yıl yaşayabilir. PHP kod tabanının çoğu taşınmayacak ve her gün okuduğumuz metnin büyük bölümünü sunmaya devam edecek. Bazı tahminlere göre, görüntülediğimiz sayfaların yüzde 40'ı bir şekilde PHP ile başlıyor. Bunun bir kısmı PHP'nin yeniden doğmaya devam etmesidir. Son birkaç yılda, PHP çalıştıran sistemlerin cesareti tamamen yeniden yazıldı. Büyükanne veya büyükbabanızın web sitesini çalıştıran aynı PHP kodu değil.

PHP'nin hızlı, tam zamanında derleyicisi, Node.js devrimini destekleyen aynı akıllı teknikler sayesinde yanıtları her zamankinden daha hızlı veriyor. Artık PHP 7.2 ve HHVM, V8'in Chrome ve Node.js'ye getirdiği aynı akıllı on-the-fly optimizasyonların çoğunu sunuyor. Sadece bu da değil, HHVM'de lambdalar, jenerikler ve koleksiyonlar gibi karmaşık programlama özellikleri için tam destek sunan akıllı bir PHP lehçesi olan Hack vardır. Dolayısıyla, bu özelliklere ihtiyacınız varsa, daha tam özellikli bir yığın aramanıza gerek yoktur.

Tabii ki son henüz yazılmadı. Node.js'nin saflığı ve gençliği ve her yerde JavaScript'in basitliği hakkında övünen her kodlayıcı için, PHP'nin derin kod tabanından ve uzun zamandır anlaşılan kararlılığından memnun olan bir başkası var. Eski kodlayıcı, sunucu tarafını yeniden başlatacak mı? JavaScript, dünyaya hakim olmak için eski dostunu devirecek mi? Mikrodalgaya bir miktar patlamış mısır koyun ve arkanıza yaslanın.

PHP'nin kazandığı yer: Kodu içerikle karıştırma

Yazarken, web siteniz için metne düşünceler döküyorsunuz ve sürece bir dal eklemek istiyorsunuz, örneğin URL'deki bazı parametrelere bağlı olarak güzel görünmesini sağlamak için küçük bir eğer-ise ifadesi. Ya da belki bir veritabanındaki metin veya verileri karıştırmak istersiniz. PHP ile sihirli PHP etiketlerini açarsınız ve saniyeler içinde kod yazmaya başlarsınız. Şablonlara gerek yok - her şey bir şablondur! Ekstra dosyalara veya ayrıntılı mimarilere gerek yok, yalnızca programlanabilir lojistik güç parmaklarınızın ucunda.

Düğümün kazandığı yer: Endişeleri ayırmak

Kodu içerikle karıştırmak, sizi sakat bırakabilecek bir koltuk değneğidir. Elbette, yaptığınız ilk iki veya üç seferde HTML ile kodu karıştırmak eğlencelidir. Ancak çok geçmeden kod tabanınız karışık bir mantık karmaşasına dönüşür. Gerçek programcılar yapı ekler ve kozmetik katmanı mantıksal katmandan ayırır. Yeni programcıların anlaması daha temiz ve bakımı daha kolay. Node.js üzerinde çalışan çerçeveler, model, görünüm ve denetleyici ayrı olduğunda hayatın daha iyi olduğunu bilen programcılar tarafından oluşturulmuştur.

PHP'nin kazandığı yer: Derin kod tabanı

Web, PHP koduyla doludur. Web siteleri oluşturmak için en popüler platformlar (WordPress, Drupal, Joomla) PHP ile yazılmıştır. Platformlar yalnızca açık kaynak değil, eklentilerinin çoğu da öyle. Her yerde PHP kodu var ve ihtiyaçlarınız için indirmenizi, değiştirmenizi ve kullanmanızı bekliyor.

Düğümün kazandığı yer: Daha modern özellikler

Elbette, binlerce harika açık kaynaklı PHP dosyası var, ancak bazıları 12 yıllık WordPress eklentileri ve birinin bunları indirmesini ümit ediyor. Symfony'nin her modern sürümü için, kimsenin güncellemediği tozlu, uzun zamandır unutulmuş bir kitaplık var.

Yıllardır güncellenmemiş bir kodla kim saatler, günler veya haftalar harcamak ister? Node.js eklentileri sadece daha yeni değil, aynı zamanda en son mimari yaklaşımların tam bilgisi ile oluşturulmuşlardır. Modern web uygulamalarının zekanın çoğunu müşteriye aktarması gerektiğini anlayan programcılar tarafından oluşturuldu.

Ve JavaScript'in bazılarını çılgına çeviren pek çok küçük özelliği olsa da, çoğunlukla modern bir sözdizimi ve kapanışlar gibi birkaç kullanışlı özellik barındıran modern bir dildir. JQuery gibi güçlü kitaplıkları mümkün kılarak, kolayca yeniden yapılandırabilir ve genişletebilirsiniz. İşlevleri nesneler gibi geçirebilirsiniz. Neden kendinizi sınırlayasınız?

PHP'nin kazandığı yer: Basitlik (tür)

PHP'de pek bir şey yok: dizeler ve sayılarla hokkabazlık yapmak için birkaç değişken ve temel işlev. Verileri 80 numaralı bağlantı noktasından veritabanına ve geriye taşımak dışında pek bir şey yapmayan ince bir katmandır. Yapması gereken bu. Modern bir veri tabanı büyülü bir araçtır ve işin zor kısmını ona bırakmak mantıklıdır. PHP, karmaşık olmaması gereken bir iş için doğru karmaşıklık miktarıdır.

Daha sonra, bir veritabanıyla etkileşime girmekten daha fazlasını yapmak ve sonuçları biçimlendirmek isteyen bir programcıysanız, artık burnunuzu tutmadan PHP ile daha fazlasını yapabilirsiniz. Facebook'un HHVM'si, tür ek açıklamaları, jenerikler ve lambda ifadeleri gibi modern özelliklerle dolu eksiksiz bir dil olan Hack için destek ekler. Bunu kullanmak, kodunuzu yalnızca HHVM'de çalışmakla sınırlar, ancak bu dünyadaki en kötü şey değildir. Çok hızlı.

Düğümün kazandığı yer: Düzinelerce dil seçeneği

PHP kullanıcıları Hack'e erişim elde etmekten memnunsa, Node.js dünyasına geçmeyi düşünmelidir çünkü birçok ana dil JavaScript'te çalışmak üzere çapraz derlenebilir. Java, C # veya Lisp gibi iyi bilinen seçenekler ve Scala, OCaml ve Haskell gibi düzinelerce seçenek vardır. BASIC veya Pascal'ın nostaljik sevenler için bile hediyeler var. Jeremy Ashkenas'tan JavaScript'e derleyen bu diller listesi oldukça kapsamlıdır. Ayrıca TypeScript ve CoffeeScript gibi JavaScript kuzenleri, aynı oyuna biraz farklı ve geliştirilmiş yaklaşımlar sunar.

PHP'nin kazandığı yer: İstemci uygulamasına gerek yok

Tarayıcıda ve sunucuda aynı dili kullanmakla ilgili tüm konuşma güzel, ama ya tarayıcıda herhangi bir dil kullanmanız gerekmiyorsa? Verileri HTML biçiminde gönderirseniz ne olur? İnteraktif bling olmadan kesinlikle ihtiyaç duyulan şeyleri sunmak için sade, statik bir web sitesi oluşturuyorsanız ne olur? Tarayıcı açılır ve iki düzine web hizmeti çağrısından tarayıcıda bir sayfa oluşturmaya çalışan hatalı JavaScript dizilerinin neden olduğu herhangi bir baş ağrısı veya aksaklık yoktur. Saf HTML her şeyden daha sık çalışır ve PHP bunu oluşturmak için optimize edilmiştir. Neden tarayıcıda JavaScript ile uğraşıyorsunuz? Sunucudaki her şeyi oluşturun ve o küçük tarayıcıyı küçük telefonda aşırı yüklemekten kaçının.

Düğüm nerede kazanır: Servis çağrıları HTML-fat PHP çağrılarından daha incedir

AJAX çılgın HTML5 web uygulamaları çok fazla hareketli parçaya sahip olsalar da, harika ve çok verimlidirler. JavaScript kodu tarayıcı önbelleğine girdiğinde, kablolar boyunca hareket eden tek şey yeni verilerdir. Çok fazla HTML işaretlemesi yok ve sayfanın tamamını indirmek için tekrarlanan yolculuklar yok. Yalnızca veriler değişti. Şık bir tarayıcı tarafı web uygulaması oluşturmak için zaman ayırmaya istekliysen, büyük bir kazanç var. Node.js, verileri ve yalnızca verileri web hizmetleri aracılığıyla sunmak için optimize edilmiştir. Uygulamanız karmaşık ve veri açısından zenginse, verimli teslimat için iyi bir temeldir.

PHP'nin kazandığı yer: SQL

PHP, MySQL ve MariaDB gibi birçok çeşidi ile birlikte var olacak şekilde oluşturulmuştur. MySQL tam olarak doğru değilse, Oracle ve Microsoft'tan başka harika SQL veritabanları vardır. Kodunuz, sorgularınızda birkaç değişiklikle geçiş yapabilir. Geniş SQL dünyası sınırlarında bitmiyor. En kararlı, en iyi geliştirilmiş kodlardan bazıları bir SQL veritabanı ile arayüz oluşturacaktır, yani tüm bu güç bir PHP projesine kolayca entegre edilebilir. Kusursuz ve mutlu bir aile olmayabilir, ama büyük bir aile. Sadece bu da değil, geliştiriciler veritabanına daha fazla zeka eklemenin yollarını buldukça veritabanı dünyası yavaş yavaş daha iyi hale geliyor, böylece çok çalışmanıza gerek kalmıyor.

Node.js'nin kazandığı yer: JSON

SQL'e erişiminiz olması gerekiyorsa, Node.js bunu yapmak için kitaplıklara sahiptir. Ancak Node.js, en son NoSQL veritabanlarının çoğuyla etkileşim için kullanılan ortak dil olan JSON'u da konuşuyor. Bu, PHP yığınınız için JSON kitaplıkları alamayacağınız anlamına gelmez, ancak JavaScript kullanırken JSON ile çalışmanın basitliği konusunda akıcı bir şey vardır. Tarayıcıdan web sunucusuna ve veritabanına tek bir sözdizimi. İki nokta üst üste ve küme parantezleri her yerde aynı şekilde çalışır. Tek başına bu sizi saatlerce süren hayal kırıklığından kurtaracaktır.

PHP'nin kazandığı yer: Kodlama hızı

Çoğu geliştirici için, web uygulamaları için PHP yazmak daha hızlıdır: derleyici yok, dağıtım yok, JAR dosyaları veya ön işlemciler yok - yalnızca en sevdiğiniz düzenleyiciniz ve bir dizindeki bazı PHP dosyaları. Yolculuğunuz değişebilir, ancak bir projeyi hızlı bir şekilde bir araya getirmeye gelince, PHP kullanmak için iyi bir araçtır.

Node.js'nin kazandığı yer: Uygulama hızı

Küme parantezlerini ve parantezleri sayarken JavaScript kodu yazmak biraz daha zordur, ancak bittiğinde Node.js kodunuz uçabilir. Geri arama mekanizması mükemmeldir çünkü sizi iş parçacıklarıyla uğraşmaktan kurtarır. Çekirdek iyi inşa edilmiştir ve bunların hepsini sizin için yapacak şekilde tasarlanmıştır. Herkesin istediği bu değil mi?

PHP'nin kazandığı yer: Rekabet

PHP geliştiricilerinin kalpleri ve zihinleri için verilen savaş hala gelişiyor. HHVM ekibi ve Zend ekibi, herkes için hızlı kod sunmak için çok çalışıyor. Bağımsız ölçütler ortaya çıkıyor ve herkes kod tabanlarını sınıra kadar zorluyor. Bu yalnızca daha iyi performans anlamına gelir.

Node.js'nin kazandığı yer: Dayanışma

Gerçekten iki farklı kod tabanı istiyor musunuz? Elbette, rekabet yardımcı olur, ancak kısa süre sonra parçalanma gelir. Kodunuz ikisinden yalnızca birinde çalıştığında ne olur? Kodunuzu yeniden yazmak için haftalarca ya da aylarca harcamanız gerekiyorsa rekabet hiçbir işe yaramaz. Node.js, birkaç yıl önce io.js'nin piyasaya sürülmesiyle kendi parçalanmasını yaşarken, Node.js evreni o zamandan beri yeniden birleşti ve PHP geliştiricilerinin yakında özleyeceği türden bir dil dayanışmasını sağladı.

PHP'nin kazandığı yer: Temel uygulamalar

Son birkaç yılda, birkaç geliştirici web uygulamalarını başlattı ve yavaş davranıştan kendilerini hayal kırıklığına uğrattı. Tüm bu hareketli parçaları harekete geçiren JavaScript, on binlerce bayt, bazen yüz binlerce olabilir. Tüm paketler geldiğinde, sıcaklık ve tahmin gibi birkaç bayt sağlamak için ayrıştırılmalı, derlenmeli ve son olarak yürütülmelidir.

Bu rokoko çılgınlığına karşı tepki, statik site oluşturucuları (bu yazıda 463) ve AMP formatında çıkarılmış web sayfaları oluşturan ekiplerde görülebilir. PHP, zekayı sunucuya yoğunlaştırmak isteyen herhangi bir ekip için doğal bir seçimdir, böylece istemciye aşırı yük binmez.

Node.js'nin kazandığı yer: Zenginlik

Binaların mimarı Ludwig Mies van der Rohe bir keresinde "Az daha çoktur" demişti. Başka bir mimar olan Robert Venturi ortaya çıktı ve "Daha az sıkıcıdır" diye karşılık verdi. Akıllı telefonlar, Cray bilgisayarlarla dolu bir odadan daha fazla güce sahip. Masaüstü bilgisayarlarda, tüm işlemler sırasında onları serin tutmak için birden fazla fan içeren ekran kartları bulunur. Neden kurallarımızı kaldırıp Steinbeck romanında Depresyon dönemi kurbanı gibi yaşamalıyız? Gününü gün et. JavaScript koduyla dolu büyük, şık web siteleri göz alıcı, dramatik ve en önemlisi eğlencelidir. Elbette bu kadar çok bant genişliğini birkaç bitlik veriye harcamak biraz müstehcen, ancak bant genişliği hiç bu kadar ucuz olmamıştı. Biraz yaşa!

İkisinin de kazandığı yerde: Başsız

"Başsız" kelimesi, sunucuda çalışan PHP kodunu ifade eder. Son zamanlarda, Drupal gibi en iyi PHP uygulamalarından bazıları koridor boyunca baktı ve React, Angular veya Vue gibi JavaScript çerçeveleri tarafından oluşturulan sofistike kullanıcı arayüzlerine hayran kaldı. Onlarla rekabet etmeye çalışmak yerine, istemcinin kontrolünü bırakıyorlar ve sunucudaki arka uç ile iyi bir iş çıkarmaya odaklanıyorlar.

Sunucuda çalışan PHP koduna biraz yatırım yaptıysanız, bu her iki yaklaşımın da en iyisinden yararlanmanın bir yolu olabilir. Eski, yerleşik PHP kodu, veri tabanına ön kapı görevi görür, istekleri iki kez kontrol eder, verileri temizler ve genel olarak tüm iş mantığını sağlar. İstemci tarafı, en son JavaScript çerçevesi ile yazılmış ilerici bir web uygulamasıdır. Bilgiye ihtiyaç duyduğunda, PHP koduna bir AJAX isteği gönderir.

Bu, sıfırdan başlayan biri için mantıklı gelmeyebilir, ancak PHP'ye yıllarca güveniyorsanız ve yavaş yavaş ilerlemek istiyorsanız, bu mutlu bir uzlaşma olabilir.

İkisinin de kazandığı yerde: Mikro hizmetler ve sunucusuz

Yükselen mikro hizmet veya sunucusuz paradigmalar, JavaScript ve PHP kodunun sunucuyu birlikte yaşaması ve anlaşması için bir yol sunar. Her iki çözüm de işi düzinelerce daha küçük hizmet veya işleve böler ve bunlar bağımsız olarak çalışabilir ve şeritlerinde kalabilir. Genellikle uygulamanın eski ve en kararlı bölümleri olan bazı bölümler PHP'yi çalıştırabilir. Diğer kısımlar, genellikle daha yeniler, Node.js'de yazılacaktır. Dil POSTveya GEThepsini birleştiren lingua franca olabilir.