나의 제안
작은 PNG가 너무 많으면 HTTP 요청의 크기뿐만 아니라 PNG 헤더 및 더 중요한 것은 효율적으로 압축 할 수 없기 때문에 네트워크 오버 헤드가 많이 발생합니다. 반면에 매우 큰 PNG 하나는로드하는 데 시간이 걸리고 지속적인 메모리 청크의 메모리 (1 만 타일의 경우 40MB)에 영구적으로 남아 있어야하는 단점이 있습니다.
중간 크기 : 여러 가지 합리적인 크기의 PNG (예 : 32 × 32 크기의 1024 타일)를 권장 합니다 . 어쩌면 테마별로 그룹화되어있을 수 있습니다 (예 : 산림 타일이있는 PNG, 산 타일이 있거나 다른 하나는 도시 타일이 있음-게임의 테마를 모르지만 아이디어는 얻음).
캐시 효율성에 대한 참고 사항
때문에 메모리 액세스 효율, 당신이해야 결코 너무 넓 당신의 spritesheets하지 않습니다. 128 × 8192 이미지의 타일 블리 팅은 8192 × 128 이미지의 블리 팅보다 항상 빠릅니다.
8192 × 128 이미지에서 첫 번째 타일을 블리 팅한다고 가정합니다. 간단하게하기 위해 1 픽셀이 1 바이트라고 가정합니다. 픽셀의 처음 두 줄은 이런 식으로 배치됩니다 (셀은 메모리에 바이트 번호를 포함합니다).
┌────┬────┬───┬────┬──────────┬─────┐
│ 0 │ 1 │...│ 31 │ .... │ 8191│ 1st line of pixels: bytes 0 to 8191
├────┼────┼───┼────┼──────────┼─────┤
│8192│8193│...│8223│ .... │16383│ 2nd line of pixels: bytes 8192 to 16383
├────┼────┼───┼────┼──────────┼─────┤
│ .. │ .. │...│ .. │ .... │ ... │
따라서 첫 번째 제목의 첫 번째 줄 을 지우 려면 브라우저 엔진이에서 바이트 0
를31
검색 합니다 . 두 번째 줄 을 지우려면 바이트 8192
를8223
검색 하고 32 번째 줄 253952
을253983
검색 할 때까지 계속합니다 .
처리 된 총 바이트 수는 32 × 32입니다. 그러나 총 메모리 범위는 253984 바이트 이상입니다. 최신 CPU에서 이는 32 또는 33 캐시 중단을 의미 합니다 . 반대로 이미지가 128 × 8192 인 경우 메모리 범위는 4000 바이트에 불과하므로 캐시가 두 번 이상 정지되지 않습니다.
오늘날의 CPU는 매우 빠르기 때문에 캐시 스톨은 매우 비싸고 계산이 중단됩니다. 따라서 8192 × 128 이미지 대신 128 × 8192 이미지를 사용하는 것은 이론상 적어도 8 배 빠릅니다. 실제로 이것은 블리 팅이 어떻게 구현되는지에 달려 있습니다. 기본 엔진 자체가 이미지를 타일로 분할하여 문제를 줄일 수 있습니다.
이것은 올바르게 설명하기 쉽지 않으며 자세히 설명하지는 않았습니다. 나는 그것이 의미가 있기를 바랍니다!