Niestandardowa głowa przechowuje URL w formacie base64 JSON, a nie obraz
Komponent profilu zawiera base64 z {textures:{SKIN:{url:…}}}. Dlatego wygląd głowy jest stały od momentu jej stworzenia, a baza danych może zawierać dziesiątki tysięcy wpisów.
Niestandardowa Głowa gracza nie zawiera obrazu. Zawiera skrót tekstury (texture hash), opakowany w JSON, opakowany w base64, znajdujący się w komponencie profilu przedmiotu.
Warstwy
Zaczynając od skrótu, komenda jest budowana w następujący sposób:
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>"}]}]
Cztery warstwy, aby powiedzieć „ta głowa wygląda jak ten obraz”. Właściwość zawsze nazywa się textures, a wartość zawsze jest base64 tego kształtu JSON.
Bezpośrednio wynikają z tego dwie rzeczy:
Głowa to migawka, a nie link do osoby. URL wskazuje na niezmienny plik tekstury, a nie na konto. Cokolwiek ten skrót rozstrzygnął w momencie tworzenia głowy, to właśnie będzie zawsze wyświetlane.
Dane są niewielkie. Wpis głowy to nazwa, skrót i kilka tagów — w ogóle żadnych bajtów obrazu. Dlatego katalog może przechowywać dziesiątki tysięcy głów jako zwykły statyczny JSON i nadal ładować się szybko.
Dlaczego katalog ładuje się według kategorii
Baza danych tutaj to kolekcja głów CC0 TheSilentPro, i jest ona pobierana po jednej kategorii na raz, a nie wszystko naraz. Indeks wyświetla kategorie i ich liczby; wybranie jednej pobiera tylko ten plik.
To nie jest leniwe inżynieria, to jedyny kształt, który działa przy tej wielkości. Cała kolekcja jako pojedynczy JSON byłaby dużym pobieraniem dla kogoś, kto chciał trzy głowy z jednej kategorii.
Limit renderowania 300 elementów to limit DOM, a nie limit wyszukiwania
Wyniki są malowane maksymalnie 300 na raz. Wyszukiwanie nadal działa na wszystkim w załadowanej kategorii — limit dotyczy tego, ile zostanie przekształconych w węzły DOM, a nie ile zostanie wziętych pod uwagę.
To rozróżnienie ma znaczenie, gdy wyszukiwanie mówi, że pokazuje pierwsze 300: brakujące wpisy zostały znalezione i są wstrzymywane przed stroną, a nie wykluczone z zapytania. Zawężenie wyszukiwania wprowadza je w zakres, zamiast intensywniej wyszukiwać.
Malowanie dziesiątek tysięcy elementów naraz jest tym, czemu zapobiega limit, i jest to prawdziwy limit, a nie defensywna liczba zaokrąglona — tak duża siatka przestaje być przewijalna na długo przed tym, zanim przestanie być renderowalna.
Nic tutaj niczego nie przesyła
Dane głowy to statyczny JSON tego samego pochodzenia. Jedynym żądaniem od strony trzeciej jest podgląd <img> z mc-heads.net, który rozstrzyga skrót na obraz do wyświetlenia. Komenda /give jest składana lokalnie ze skrótu, więc komenda działa niezależnie od tego, czy podgląd się załadował.