来源于 技术疑问 分类和大家探讨一下更新和io效率和存放lua在zip包里的几个疑问

今天无意间看到刀塔传奇这个游戏在第一次下载后可以秒进游戏 基本上没有解压资源和加载资源两个步骤
所以我很好奇 一开始我是这样猜测的:
1:不需要解压文件 那可能游戏内的整套资源是存放在一个大的资源包内 这样第一次下载后会把整个资源包拷贝到可写目录 通过合适的包管理算法 就可以做到即可以享受一次io的高效 也可以做到文件内部自动更新和读取的便利
2:不需要预加载资源 那基本上肯定是通过延时(用时)加载策略和适当的缓存机制实现

对于第二点应该没什么疑问 但是对于第一点 在我打开apk观察后就有了巨大的疑问!

刀塔传奇所有资源全部存放在assets目录下 那就产生了两个问题:一个是读取大量小文件的效率问题 二是如何做到增量更新?

对于第一点 因为apk本来就是一个zip压缩包 在zip压缩包内部读取大量小文件的性能应该很低才对 那刀塔传奇是如何处理的?是否是有更加高效的方式从apk中进行io读操作么??【1:求高人指点一下】
对于第二点 apk下文件应该完全不可写(难道我的认知是错误的??【2:求高人指点一下】) 如果完全不可写 那是如何做到资源热更新的? 难道是更新的时候在可写目录下映射出一样的目录结构 在读取的时候选择性的加载文件? 这样无疑会浪费大量的存储空间 【3:求高人指点一下】

最后还有一点是技术问题 我以前没有研究过 如下 【有研究过的稍微提一下吧 我没有看源码 因为平时是在太忙 所以想做伸手党向有经验的同学咨询一下 喷子勿喷】

quick中的lua整的zip包是如何实现的
【【【我的猜测:两种方式:

  1. 直接压缩所有的lua文本文件(可能会加密) 然后在存放在zip包中
  2. 直接把所有的lua文件编译成字节码,然后在存放在zip包中】】】

这两种我个人猜测的方式 个人觉得第一种会产生更小的zip包(因为字节码文件在zip包中的压缩很有限) 但是会有比较差的lua解释效率(运行效率)(因为是对对纯lua代码进行解释)
第二种则是一个稍大的zip包 但是lua的执行效率会更高(无论是lua还是luajit 字节码已经省去了大量先前工作)

但是 以上两点只是猜测 具体是怎么样的呢【4:求高人指点一下】

对于lua的zip包 如果是通过以上两种方式 个人认为都可以做到热更新 只是对zip包中的小文件进行覆盖写而已 如果不是上面两种思路 是不是可以做到热更新呢 或者说quick现在的那个lua整zip包文件能否以及如何做到热更新单个文件【5:求高人指点一下】

最后关于lua的zip包一样有一点疑问 【6:如果是通过重写loader的读方法 这样一样会有对zip包小文件频繁读取的性能问题 求高人指点一下怎么解决】

6点疑问 夹杂一系列小问题 有兴趣的朋友来共同探讨一下吧!

楼主是不是想多了,quick的加密用的是xxtea算法,有两种加密法,一种是加密lua文件,一种是加密lua文件后大包zip再加密,你可以网上找下相关文章