- Dinamik ve reaktif web arayüzleri oluşturmak için HTML sözdizimini genişleten bildirimsel bir dildir ve mevcut HTML kullanıcıları için tanıdık bir geliştirme ortamı sunar
- Streaming rendering sayesinde içerik sunucudan anında gönderilir ve istemci JavaScript bundle'ı yüklenmeden önce de ekran gösterilebilir
- İnce taneli bundle'lama (fine-grained bundling) ile gereksiz kod aktarımı en aza indirilerek performans ve yükleme hızı artırılır
- Hedefe yönelik derleme (targeted compilation) ile tarayıcı ve sunucu için ayrı ayrı verimli çıktı üretilir
- TypeScript entegrasyonu desteği ve zengin editör özellikleriyle geliştirme verimliliği ve kod kalitesi artırılır
Marko'ya genel bakış
- Marko, HTML'in yeniden tasarlanmış hali olan bildirimsel bir dildir ve dinamik, reaktif kullanıcı arayüzleri oluşturmayı hedefler
- Geçerli HTML'in büyük bölümü Marko'da da aynen kullanılabilir
- HTML sözdizimi genişletilerek modern uygulamalar bildirimsel şekilde yazılabilir
- eBay.com gibi yüksek trafikli büyük ölçekli sitelerde gerçek servis operasyonlarında kullanılmaktadır
- HTML, CSS ve JavaScript biliyorsanız ek bir öğrenme eğrisi olmadan hemen kullanılabilir
Başlıca özellikler
- Streaming rendering özelliğiyle sunucu, hazır olan içeriği anında gönderir
- İstemci tarafındaki JavaScript bundle'ı yüklenmeden önce de ilk ekran gösterilebilir
- HTML, görseller ve varlıklar eşzamansız olarak yüklenir ve hızlı bir ilk ekran render'ı sağlar
- İnce taneli bundle'lama (Fine-Grained Bundling) ile yalnızca gereken kod gönderilir
- Kullanılmayan kod kaldırılır ve alt şablon düzeyinde gereksiz hydration atlanır
- “Lean by default, Fast by design” felsefesiyle tasarlanmıştır
- Hedefe yönelik derleme (Targeted Compilation) desteği sunar
- Tarayıcı ve sunucu arasındaki farklar dikkate alınarak her ortam için optimize edilmiş çıktı üretilir
- Daha hızlı yükleme, daha küçük bundle'lar ve tek bir birleşik dille sağlanır
Kod örnekleri ve sözdizimi
Performans ve ölçeklenebilirlik
- Daha hızlı ilk render (Faster First Paint) desteğiyle kullanıcı deneyimini iyileştirir
- Ölçeklenebilir: basit HTML şablonlarından karmaşık component yapılarına kadar esnek biçimde genişleyebilir
- Küçük runtime ve optimize edilmiş derleyici sayesinde farklı ağ koşullarında da yüksek performans korunur
TypeScript ve geliştirme araçları entegrasyonu
- Yerleşik TypeScript desteği ile güçlü tip çıkarımı sunar
- Şablonlar ve component'ler arasında tip tutarlılığı korunur
- Editörde otomatik tamamlama, tanıma gitme, sözdizimi vurgulama, biçimlendirme gibi özellikler desteklenir
- Hataların erken tespiti ve kod kalitesinin artırılmasıyla kararlı bir geliştirme ortamı sunar
Sonuç
- Marko, HTML dostu sözdizimi, yüksek performanslı rendering, gelişmiş bundle'lama, TypeScript entegrasyonunu bir araya getiren modern bir web geliştirme dilidir
- Hem sunucuda hem istemcide verimli çalışır ve büyük ölçekli servis işletimine uygun ölçeklenebilirlik ve performans sunar
2 yorum
Şimdilik galiba Svelte.
Hacker News görüşleri
İleride HTML’nin kendisinin JavaScript olmadan da tüm HTTP verb’lerini (
put,deletevb.) desteklemesini, açılır menü, çoklu seçim, tarih ve saat gibi giriş kontrollerini yerleşik olarak sunmasını ve formların sayfanın tamamını yeniden yüklemeden gönderilebilmesini isterimhtmxadını ilk duyduğumda böyle bir şey beklemiştim ama gerçekte daha çokintercoolerseviyesindeydiBunun gibi özellikler tarayıcı üreticilerinin geniş çaplı desteğini gerektiriyor
htmx’in bazı fikirlerini doğrudan HTML spesifikasyonuna entegre etmeye yönelik bir çalışma yürütülüyorİlgili içerik Triptych projesinde görülebilir
Kendi JavaScript framework’ümü yapmış biri olarak Marko’nun hak ettiği değeri görmediğini düşünüyorum
Derleme zamanı optimizasyonları çok etkileyici ve ince taneli bundling açıklaması dokümanı da harika
Nitekim Kanban panosu performans karşılaştırmasında da iyi sonuçlar göstermişti
React, Next.js ile birleşirken platformun özüne ihanet etti ve artık onu seçmek için neredeyse hiçbir sebep kalmadı
React’in statik olarak hydrate edilip CDN üzerinde çalıştığı dönem çok daha iyiydi
Yine de Marko’ya da bakmam gerektiğini düşündürüyor
Electron gibi masaüstü framework’leri tarafında da böyle derinlemesine analizler olsa keşke
React’i sevmemin nedeni basitçe “sadece JavaScript” olması
<let>ya da<for>gibi sözdizimlerini görmek istemiyorumSadece ona fazla alıştığımız için yeni bir framework’e bakarken bunu hatırlamak gerekiyor
{% for user in users %}ya da{#each users as user}gibi yapılar çok daha açıkJSX de kusursuz değil —
{users.map(...)}sözdizimi hâlâ gereksiz derecede uzunVue ve Svelte’in popüler olmasının nedeni de bu
Bu arada Vue, istersen yalnızca JSX ile de yazılabiliyor
DSL giderek şişti ve useFormStatus ile useActionState gibi hook’lar arttıkça daha karmaşık hale geldi
Buna karşılık Marko’nun sözdizimi sezgisel; fonksiyonlar fonksiyon gibi, değişkenler değişken gibi görünüyor ve bu yüzden anlaması kolay
HTML içine JS koyma yaklaşımı oldukça taze hissettiriyor
Ryan Carniato bu projede yer aldıktan sonra daha sonra SolidJS’ye liderlik etti; neden yeniden HTML-in-JS tarzına döndüğünü merak ediyorum
İki proje birbirinin fikirlerini paylaşarak gelişti ve bugün de etkileşim hâlindeler
Pek çok geliştirici buna alışık ve editörlerle TypeScript desteği zaten oldukça iyi
20 yılı aşkın süredir frontend’in dönüp dolaşıp sonunda JSP dönemi paradigmasına geri dönmüş gibi hissettiriyor
O zamanlar “demode” diye küçümseniyordu ama sonunda doğru olanın bu olduğu ortaya çıktı sanki
Bazı şeyler kaybolur ama sonraki neslin yaratıcılığı yeni şeyler üretir
Yalnız büyük ölçekte ölçeklenebilirlik konusunda dikkatli olmak gerekiyordu
Duruma göre başka yaklaşımlar daha uygun olabilir
O dönemde mobil uygulamalar ve API merkezli mimariler gerekliydi, SPA da bu ihtiyaca uyuyordu
Şimdi yaşanan şey JSP’ye dönüş değil, iki taraf arasındaki denge noktasını bulma süreci
Marko zaten eBay’de kanıtlanmış bir teknoloji
Yıllardır kullanıyorum ve hiç sorun yaşamadım
Buna karşılık React tabanlı Facebook, Instagram ve Messenger’da UI hataları hiç eksik olmuyor
Gerçek büyük ölçekli servislerdeki sonuçlara bakınca Marko’nun kararlılığı öne çıkıyor
Marko daha önce de HN’de birkaç kez gündeme gelmişti
Ocak 2023, Ağustos 2017, Şubat 2015 tarihlerinde de ilgili başlıklar vardı
JSX’e kıyasla çok daha gelişmiş bir sözdizimi gibi görünüyor
Özellikle Pug tarzı kısa sözdizimini beğendim ama neden dokümantasyonun derinliklerine gizlemişler anlamadım
Concise Syntax dokümanı
Ama dokümandaki highlighting hataları ya da özelliklerin ayrılma biçimi hoşuma gitmedi
Son zamanlarda daha çok Svelte kullanıyorum ama hâlâ daha zarif bir sözdizimi bekliyorum
Boşluk tabanlı sözdizimi fena değil ama
--gibi gösterimler ve parse etme zorluğu hayal kırıklığı yaratıyorMarko ekibi, Marko 6’yı tanıtmak için doğrudan bir Hacker News klonu yapıp yayımladı
GitHub örneğine bakın
Demo amaçlı yapılmış bir dil olmasına rağmen “HTML-based”, “building web apps” gibi gradyan metinlerin görünmemesi biraz komik