หัวผู้เล่นแบบกำหนดเองจัดเก็บ URL ที่อยู่ใน JSON แบบ base64 ไม่ใช่รูปภาพ
คอมโพเนนต์โปรไฟล์จะเก็บ base64 ของ {textures:{SKIN:{url:…}}} นี่คือเหตุผลที่รูปลักษณ์ของหัวผู้เล่นจะถูกกำหนดตายตัว ณ เวลาที่สร้าง และเป็นเหตุผลที่ฐานข้อมูลสามารถมีรายการได้หลายหมื่นรายการ
หัวผู้เล่นแบบกำหนดเองไม่ได้มีรูปภาพอยู่ภายใน แต่มี แฮชของพื้นผิว (texture hash) ที่อยู่ในรูปแบบ JSON ซึ่งถูกห่อหุ้มด้วย base64 และอยู่ในคอมโพเนนต์โปรไฟล์ของไอเทม
เลเยอร์ต่างๆ
เริ่มต้นจากแฮช คำสั่งจะถูกสร้างขึ้นดังนี้:
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>"}]}]
มีสี่เลเยอร์เพื่อบอกว่า "หัวผู้เล่นนี้มีลักษณะเหมือนรูปภาพนั้น" คุณสมบัติจะถูกตั้งชื่อว่า textures เสมอ และค่าจะเป็น base64 ของโครงสร้าง JSON นั้นเสมอ
มีสองสิ่งที่เป็นผลโดยตรง:
หัวผู้เล่นคือภาพถ่าย ณ ขณะนั้น ไม่ใช่ลิงก์ไปยังบุคคล URL ชี้ไปยังไฟล์พื้นผิวที่ไม่สามารถเปลี่ยนแปลงได้ ไม่ใช่บัญชีผู้ใช้ สิ่งที่แฮชนั้นถูกแปลงเป็นเมื่อหัวผู้เล่นถูกสร้างขึ้น จะเป็นสิ่งที่มันจะแสดงให้เห็นเสมอ
ข้อมูลมีขนาดเล็กมาก รายการหัวผู้เล่นประกอบด้วยชื่อ, แฮช และแท็กบางอย่าง — ไม่มีไบต์ของรูปภาพเลย นี่คือเหตุผลที่แคตตาล็อกสามารถเก็บหัวผู้เล่นได้หลายหมื่นรายการในรูปแบบ JSON แบบคงที่ และยังคงโหลดได้อย่างรวดเร็ว
ทำไมแคตตาล็อกถึงโหลดตามหมวดหมู่
ฐานข้อมูลในที่นี้คือคอลเลกชันหัวผู้เล่น CC0 ของ TheSilentPro และจะถูกดึงมา ทีละหมวดหมู่ แทนที่จะดึงมาทั้งหมดในครั้งเดียว ดัชนีจะแสดงรายการหมวดหมู่และจำนวนรายการในแต่ละหมวดหมู่ การเลือกหมวดหมู่หนึ่งจะดึงเฉพาะไฟล์นั้นมาเท่านั้น
นี่ไม่ใช่การออกแบบที่ขี้เกียจ แต่เป็นรูปแบบเดียวที่ใช้งานได้กับขนาดข้อมูลระดับนี้ หากคอลเลกชันทั้งหมดเป็น JSON ไฟล์เดียว จะเป็นการดาวน์โหลดขนาดใหญ่สำหรับผู้ที่ต้องการหัวผู้เล่นเพียงสามชิ้นจากหมวดหมู่เดียว
ข้อจำกัดการแสดงผล 300 รายการคือข้อจำกัดของ DOM ไม่ใช่ข้อจำกัดการค้นหา
ผลลัพธ์จะถูกแสดงผลสูงสุด 300 รายการต่อครั้ง การค้นหายังคงทำงานกับทุกสิ่งในหมวดหมู่ที่โหลด — ข้อจำกัดนี้ใช้กับจำนวนรายการที่จะถูกแปลงเป็นโหนด DOM ไม่ใช่จำนวนรายการที่ถูกพิจารณา
ความแตกต่างนี้มีความสำคัญเมื่อการค้นหาบอกว่ากำลังแสดง 300 รายการแรก: รายการที่หายไปถูกพบแล้วและถูกระงับไม่ให้แสดงบนหน้าเว็บ ไม่ได้ถูกยกเว้นจากการค้นหา การจำกัดการค้นหาให้แคบลงจะทำให้รายการเหล่านั้นอยู่ในช่วงที่แสดงได้ แทนที่จะเป็นการค้นหาที่ยากขึ้น
การแสดงผลองค์ประกอบหลายหมื่นรายการพร้อมกันคือสิ่งที่ข้อจำกัดนี้มีอยู่เพื่อป้องกัน และเป็นข้อจำกัดที่แท้จริงมากกว่าตัวเลขกลมๆ เพื่อป้องกัน — ตารางขนาดใหญ่นั้นจะหยุดเลื่อนได้นานก่อนที่จะหยุดแสดงผลได้
ไม่มีอะไรในที่นี้อัปโหลดอะไรเลย
ข้อมูลหัวผู้เล่นเป็น JSON แบบคงที่ที่มาจากต้นทางเดียวกัน คำขอจากบุคคลที่สามเพียงอย่างเดียวคือการแสดงตัวอย่าง <img> จาก mc-heads.net ซึ่งจะแปลงแฮชเป็นรูปภาพเพื่อแสดงผล คำสั่ง /give ถูกสร้างขึ้นในเครื่องจากแฮช ดังนั้นคำสั่งจะทำงานได้ไม่ว่าการแสดงตัวอย่างนั้นจะโหลดหรือไม่ก็ตาม