Özel bir kafa, bir görseli değil, base64 JSON'a sarılı bir URL'yi depolar
Profil bileşeni, {textures:{SKIN:{url:…}}} yapısının base64 kodunu tutar. Bu yüzden bir kafanın görünümü oluşturulduğu anda sabitlenir ve veritabanı on binlerce girdi içerebilir.
Özel bir Oyuncu Kafası resim içermez. Öğenin profil bileşeninin içinde yer alan, JSON'a sarılı ve base64 ile kodlanmış bir doku karması içerir.
Katmanlar
Bir karmadan başlayarak komut şu şekilde oluşturulur:
1. hash e3b0c44298fc1c149afbf4c8996fb924…
2. JSON {"textures":{"SKIN":{"url":"http://textures.minecraft.net/texture/<hash>"}}}
3. base64 eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6…
4. component /give @p player_head[profile={properties:[{name:"textures",value:"<base64>"}]}]
"Bu kafa o resme benziyor" demek için dört katman. Özellik her zaman textures olarak adlandırılır ve değer her zaman o JSON yapısının base64 kodudur.
İki şey doğrudan buradan çıkar:
Bir kafa bir anlık görüntüdür, bir kişiye bağlantı değildir. URL, bir hesaba değil, değişmez bir doku dosyasına işaret eder. Kafa oluşturulduğunda o karma neye çözümlendiyse, her zaman onu gösterecektir.
Veri çok küçüktür. Bir kafa girişi bir isim, bir karma ve bazı etiketlerden oluşur; hiç resim baytı içermez. Bu nedenle bir katalog, on binlerce kafayı düz statik JSON olarak tutabilir ve yine de hızlı yüklenir.
Kataloğun neden kategoriye göre yüklendiği
Buradaki veritabanı TheSilentPro'nun CC0 kafa koleksiyonudur ve hepsi birden değil, her seferinde bir kategori halinde getirilir. Bir dizin kategorileri ve sayılarını listeler; birini seçmek yalnızca o dosyayı getirir.
Bu tembel mühendislik değil, bu boyutta çalışan tek şekildir. Tüm koleksiyonun tek bir JSON olarak indirilmesi, tek bir kategoriden üç kafa isteyen biri için büyük bir indirme olurdu.
300 öğe işleme sınırı bir DOM sınırlamasıdır, arama sınırlaması değil
Sonuçlar en fazla 300 adet olacak şekilde aynı anda boyanır. Arama, yüklü kategorideki her şeyi kapsayacak şekilde çalışmaya devam eder; sınır, kaç tanesinin DOM düğümüne dönüştürüldüğüne uygulanır, kaç tanesinin dikkate alındığına değil.
Bu ayrım, bir arama ilk 300'ü gösterdiğini söylediğinde önemlidir: eksik girişler bulundu ve sayfadan gizleniyor, sorgudan hariç tutulmuyor. Aramayı daraltmak, daha sıkı arama yapmak yerine onları aralık içine getirir.
On binlerce öğeyi aynı anda boyamak, bu sınırın var olma nedenidir ve bu, savunmacı bir yuvarlak sayıdan ziyade gerçek bir sınırdır; bu kadar büyük bir ızgara, işlenebilir olmaktan çıkmadan çok önce kaydırılamaz hale gelir.
Burada hiçbir şey yüklenmez
Kafa verileri aynı kaynaklı statik JSON'dur. Tek üçüncü taraf isteği, bir karmayı görüntülemek için bir resme dönüştüren mc-heads.net'ten gelen <img> önizlemesidir. /give komutu karmadan yerel olarak birleştirilir, bu nedenle komut, önizleme yüklenmiş olsun ya da olmasın çalışır.