Transparent ZIP support for skin storage can be implemented by using a wrapper function that is called instead of reading directly from the skin directory. I.e. an "fopen('./skins/bw2/back.jpg')" would be "skinwrapper('bw2', 'back.jpg')".
This approach has been proven effective by endless other projects. And it doesn't consume much CPU as it only reads the zip file index and then gets that specific file, without reading the whole ZIP file into RAM. As for a slowdown in access times, it is negligible and ultimately unnoticeable since it is possible to perform decompression transparently if you're using a good implementation.
This feature has many benefits, from leveraging file system abuse (each skin houses about 750 files), to bringing down the whole skin size by 10-80%.
This approach has been proven effective by endless other projects. And it doesn't consume much CPU as it only reads the zip file index and then gets that specific file, without reading the whole ZIP file into RAM. As for a slowdown in access times, it is negligible and ultimately unnoticeable since it is possible to perform decompression transparently if you're using a good implementation.
This feature has many benefits, from leveraging file system abuse (each skin houses about 750 files), to bringing down the whole skin size by 10-80%.