Il mio consiglio
Troppi piccoli PNG aggiungeranno un sacco di sovraccarico di rete (a causa delle dimensioni delle richieste HTTP, ma anche dell'intestazione PNG e, probabilmente ancora più importante, dell'incapacità di comprimere in modo efficace). D'altra parte, un PNG molto grande ha gli svantaggi che richiede un po 'di tempo per caricarsi e deve rimanere permanentemente in memoria (40 megabyte per 10.000 tessere) in un blocco continuo di memoria.
Raccomando la via di mezzo: diversi PNG di dimensioni ragionevoli, ad esempio 1024 tessere di dimensioni 32 × 32 . Forse raggruppati per tema (ad esempio, un PNG con tessere foresta, uno con tessere montagna, un altro con tessere città - non conosco il tema del tuo gioco, ma hai l'idea).
Nota sull'efficienza della cache
A causa dell'efficienza dell'accesso alla memoria, non dovresti mai allargare troppo i tuoi fogli di calcolo. La fusione di tessere da un'immagine di 128 × 8192 sarà sempre più veloce della fusione di un'immagine di 8192 × 128.
Immagina di voler blitare la prima tessera in un'immagine 8192 × 128. Per semplicità, supponiamo che 1 pixel sia 1 byte. Le prime due righe di pixel sono disposte in questo modo (le celle contengono il loro numero di byte in memoria):
┌────┬────┬───┬────┬──────────┬─────┐
│ 0 │ 1 │...│ 31 │ .... │ 8191│ 1st line of pixels: bytes 0 to 8191
├────┼────┼───┼────┼──────────┼─────┤
│8192│8193│...│8223│ .... │16383│ 2nd line of pixels: bytes 8192 to 16383
├────┼────┼───┼────┼──────────┼─────┤
│ .. │ .. │...│ .. │ .... │ ... │
Quindi, per blitare la prima riga del primo titolo, il motore del browser recupererà i byte 0
in31
. Per i riferimenti nella seconda riga , esso recupererà byte 8192
a8223
, e così via fino alla linea 32a dove byte 253952
a253983
vengono recuperate.
Il numero totale di byte elaborati sarà 32 × 32. Tuttavia, l'intervallo di memoria totale è superiore a 253984 byte. Su una CPU moderna, ciò significa 32 o 33 bancarelle di cache . Al contrario, se l'immagine fosse 128 × 8192, l'intervallo di memoria sarebbe solo di 4000 byte, il che significa che non più di due blocchi di cache.
Poiché le CPU di oggi sono molto veloci, le bancarelle di cache sono molto costose e bloccano i calcoli. Quindi usare un'immagine 128 × 8192 invece di un'immagine 8192 × 128 è potenzialmente 8 volte più veloce, almeno in teoria. In pratica ciò dipenderà dall'implementazione del blitting: è possibile che lo stesso motore sottostante divida le immagini in riquadri per ridurre il problema.
Questo non è facile da spiegare correttamente e non mi aspettavo di elaborare molto. Spero abbia senso!