3 puan yazan GN⁺ 2024-03-22 | 3 yorum | WhatsApp'ta paylaş

Dropflow Tanıtımı

  • Dropflow, temel CSS standartlarının (inline, block, float, positioning, table vb.) kapsamını keşfetmek için oluşturulmuş bir CSS yerleşim motorudur.
  • Yüksek kaliteli metin yerleşimi uygulamasını destekler ve dünyanın birçok dilini görüntüleyebilir.
  • Arka uçta Node ve node-canvas kullanarak PDF veya görsel üretmek ya da tarayıcıda canvas üzerinde zengin ve satır kaydırmalı metinler render etmek için kullanılabilir.

Başlıca özellikler

  • float gibi karmaşık olanlar dahil 30'dan fazla özelliği destekler
  • Çift yönlü ve RTL metin desteği
  • HTML ve CSS kabul etmenin yanı sıra, stilleri nesne olarak tanımlayan Hyperscript(h()) API desteği
  • Tüm OpenType/TrueType buffer'larının kaydedilmesi gerekir
  • Grapheme düzeyinde font fallback
  • Renkli telaffuz işaretleri desteği
  • Tercih edilen satır sonları desteği (ör. başlangıç padding'inin bir sonraki satıra taşınması)
  • Optimize edilmiş shaping
  • Kalıtım ve cascading stiller iki kez hesaplanmaz
  • Mümkün olduğunca çok CSS yerleşim edge case'ini ele alır
  • Tam typing
  • Çok sayıda test
  • Hızlı

Desteklenen CSS kuralları

  • Inline formatting: color, direction, font-family, font-size, font-stretch, font-style, font-weight, line-height, text-align, vertical-align, white-space gibi özellikler çalışır durumdadır.
  • Block formatting: clear, float özellikleri çalışır durumdadır.
  • Kutu ve konumlandırma: background-clip, background-color, border-color, border-style, border-width, top, right, bottom, left, box-sizing, display, height, margin, padding, position, width, z-index gibi özellikler çalışır durumdadır.

Kullanım şekli

  • Dropflow, kalıtılmış ve hesaplanmış stillere sahip bir DOM üzerinde çalışır.
  • h() fonksiyonu kullanılarak DOM oluşturulur ve stiller sıradan nesneler olarak tanımlanır.
  • Yerleşimden önce fontları kaydetmek zorunlu bir adımdır.
  • Canvas'ın tam boyutunda yerleşim yapıp çizim gerçekleştirebilir.

Performans özellikleri

  • Performanstan daha önemli olan hedef doğruluktur.
  • Performans çeşitli örnekler üzerinden doğrulanabilir.
  • 2019 model MacBook Pro'da HTML'yi görsele dönüştürmek 9 ms, 2012 model MacBook Pro'da ise 13 ms sürer.
  • 'The Little Prince' metnini HTML'den görsele dönüştürmek 2019 model MacBook Pro'da 160 ms'den az, 2012 model MacBook Pro'da ise 250 ms'den az sürer.
  • 10 harfli bir kelimeyi üretip yerleştirmek (çizim hariç), 2019 model MacBook Pro'da 25µs'den az, 2012 model MacBook Pro'da ise 50µs'den az sürer.
  • Hyperscript API kullanılırsa HTML ve CSS parsing aşamaları atlanıp DOM doğrudan oluşturularak en yüksek performans elde edilebilir.

API

  • İlk iki adım font kaydı ve DOM oluşturmadır.
  • DOM, canvas'a render edilebilir; yerleşimi korumak isteniyorsa daha düşük seviyeli fonksiyonlar kullanılabilir.

HarfBuzz

  • Glyph yerleşimi, WebAssembly'ye derlenmiş HarfBuzz tarafından gerçekleştirilir.
  • Bu sayede measureText API kullanılırken mümkün olmayan bir doğruluk seviyesi elde edilebilir.

Teşekkürler

  • dropflow'un package.json bağımlılığı yoktur, ancak birçok başka proje sayesinde mümkün olmuştur.
  • Javascript bağımlılıkları projeye uyarlanarak depoya dahil edilmiştir.

GN⁺ Görüşü

  • Dropflow, web geliştiricilerine CSS yerleşiminin karmaşıklığını yönetmek ve hem tarayıcıda hem de arka uçta tutarlı metin yerleşimi sunmak için yeni bir araçtır.
  • Bu tür araçlar, özellikle çeşitli dilleri ve fontları desteklemesi gereken uluslararasılaştırılmış web uygulamaları geliştirmede faydalı olabilir.
  • HarfBuzz kullanımı, metin render etme doğruluğunu büyük ölçüde artırabilir; ancak WebAssembly teknolojisine aşina olmayan geliştiriciler için giriş engeli oluşturabilir.
  • Benzer işlevler sunan diğer projeler arasında CSS Grid ve Flexbox kullanan yerleşim kütüphaneleri bulunur; ancak Dropflow daha geleneksel CSS yerleşim yaklaşımına odaklanır.
  • Dropflow'u benimsemeden önce, performans ve uyumluluğu dikkate alarak proje gereksinimlerine ne kadar uygun olduğunu değerlendirmek gerekir.

3 yorum

 
winterjung 2024-03-23

Orijinal başlık meğerse "Show HN: Dropflow, a CSS layout engine for node or <canvas>" imiş. Şu anda ise "GN⁺: HN Tanıtımı: node veya <canvas> için bir CSS yerleşim motoru, Dropflow</canvas>" olarak girilmiş görünüyor.

 
dlehals2 2024-03-22

Başlıkta etiket olduğu için detay sayfasındaki başlık kısmı bozuluyor sanırım.. haha escape lazım..

 
GN⁺ 2024-03-22
Hacker News yorumu
  • Tarayıcı render motorunun “sihirli kutusunu” açıkça anlatan kaynakların önemini vurguluyor. HTML ve CSS render etme için makinenin okuyabileceği eksiksiz bir spesifikasyon oluşturulabilirse, bir renderer üretilebileceği; tarayıcıya özgü tuhaflıkların ise bunun bir uzantısı olabileceği belirtiliyor.
  • Açık kaynak olarak sunulan bu çalışma için teşekkür ediliyor. Arka uçta güzel PDF’ler üretmenin mevcut yolunun headless bir tarayıcı çalıştırıp tarayıcı API’sini kullanarak HTML/CSS’yi PDF’ye dönüştürmek olduğu, ancak sunucuda tarayıcı instance’ları çalıştırmanın ve bunu büyük iş yüklerinde uygun şekilde ölçeklendirmenin maliyetli olduğu söyleniyor. Artık tarayıcı overhead’i olmadan HTML/CSS kullanarak PDF tasarlayıp üretmek mümkün.
  • CSS ve SVG’nin grafik ve UI kütüphaneleri için bir soyutlama olarak kullanılıp kullanılamayacağına dair merakla bağlantı kuruluyor. node-canvas’ın çizim kısmını karşıladığı görülüyor; bunun da bir UI kütüphanesinde gereken layout kısmını yapabileceği düşünülüyor. CSS uygulamasının neden bu kadar zor olduğu sorgulanıyor.
  • Kendi projesi için buna benzer bir şey arandığı ve SVG ya da canvas kullanan diğer projeler için de faydalı olacağı belirtilerek teşekkür ediliyor.
  • Çoğu insanın HTML’yi programatik olarak PNG’ye dönüştürmenin ne kadar zor olduğunu fark etmeyeceği söyleniyor. Node ile tarayıcı arasındaki farklar ya da HTML ile canvas arasındaki farklarla ilgili sayısız küçük sorunla karşılaşıldığı ifade ediliyor.
  • CSS’yi anlayıp onun etrafında bir layout motoru inşa etmek için gereken iş miktarının hayal bile edilemeyeceği yorumu yapılıyor.
  • Flexbox’ta zorlananlar için, farklı özelliklere tek tek odaklanma ihtiyacını azaltarak responsive layout oluşturma sürecini basitleştirebilen bir araç tanıtılıyor.
  • Bunun büyük bir başarı olduğu söylenerek tebrik ediliyor. Çok fazla zaman harcanmış olduğundan emin olunduğu, ayrıca spreadsheet ürünü ve PDF (önizleme?) ürünü de yapılıp yapılmadığı ve bunların nasıl birleştirildiği merak ediliyor.
  • Yapılan iş övülüyor ve chearon’a teşekkür ediliyor.
  • Bunun NativeScript ya da Node.js gibi şeylerin temel bileşeni olarak kullanılıp kullanılamayacağının inceleneceği paylaşılıyor. Metnin, UI framework’lerinin sağladığı en karmaşık UI öğelerinden biri olduğu ve Flow Layout çalışıyorsa bunun çok cesaret verici olduğu belirtiliyor. Gesture’lar (özellikle metin vurgulama) ve IME entegrasyonu gibi özelliklerde ne kadar ilerleme kaydedildiği merak ediliyor. Her durumda, bunu açık kaynak olarak sundukları için övgü dile getiriliyor.