{"action":"opened","issue":{"url":"https://api.github.com/repos/smallnewer/bugs/issues/65","labels_url":"https://api.github.com/repos/smallnewer/bugs/issues/65/labels{/name}","comments_url":"https://api.github.com/repos/smallnewer/bugs/issues/65/comments","events_url":"https://api.github.com/repos/smallnewer/bugs/issues/65/events","html_url":"https://github.com/smallnewer/bugs/issues/65","id":88356919,"number":65,"title":"前端静态资源缓存与持久化","user":{"login":"zhkuang","id":6211614,"avatar_url":"https://avatars.githubusercontent.com/u/6211614?v=3","gravatar_id":"","url":"https://api.github.com/users/zhkuang","html_url":"https://github.com/zhkuang","followers_url":"https://api.github.com/users/zhkuang/followers","following_url":"https://api.github.com/users/zhkuang/following{/other_user}","gists_url":"https://api.github.com/users/zhkuang/gists{/gist_id}","starred_url":"https://api.github.com/users/zhkuang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhkuang/subscriptions","organizations_url":"https://api.github.com/users/zhkuang/orgs","repos_url":"https://api.github.com/users/zhkuang/repos","events_url":"https://api.github.com/users/zhkuang/events{/privacy}","received_events_url":"https://api.github.com/users/zhkuang/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-06-15T08:31:39Z","updated_at":"2015-06-15T08:31:39Z","closed_at":null,"body":"与资源缓存更新有关系的文件有：\r\n* resource json(配置了每个模块需要哪些资源，原始资源名未经过md5修改的)\r\n* map (一个原始资源路径以新路径的映射表，加载所用路径要用这里面的)\r\n* manifest (主要是持久化缓存image资源)\r\n\r\n前端资源分为两种类型，第一种是文本文件，游戏文案、配置文件、技能脚本等。 第二种是图片文件，json hash、spine（json+atlas+png）、png等。\r\n\r\n起初第一种资源外面都是包了一层全局函数名，通过ajax请求，然后执行，一部分放到localstorage，一部分放到全局作用域下。放到localstorage中的资源，直接通过setItem || getItem 等方法直接读取和修改，每次还都要进行字符串的转换，效率很低，管理的非常混乱。想到分账号的分服务器的不同资源管理以及不同版本的更新，让我真是蛋疼菊紧。\r\n\r\n所以，对于文本资源以及玩家数据的持久化缓存，采用以下方案：\r\n * 每个账号为一个db\r\n * 每个角色由若干table组成，基本两个（玩家数据以及静态文本）\r\n * 登陆游戏后取出该账号数据（暂挂到一个全局对象下），需要提交到localstorage中时commit一下。\r\n * 静态文本表中需要有url (md5 相对路径)字段，kk.loader中在请求文本资源前先去看一下缓存。\r\n * 静态文本表中需要有key (标示文件内容)字段，主要用于文件更新时，清除老得缓存。\r\n\r\n 第二种资源的持久化是通过manifest（在android中还不知道怎么样呢）做本地缓存。在kk.loader中加载图片资源会过滤掉已经加载的。\r\n\r\n目前还存在的问题：\r\n 1. 按照目前的方式，切换不同账号情况下需要加载所有文本资源\r\n 2. 图片资源虽然已经下载到本地了，但是请求还是发出去了，想想能不能不发请求。\r\n\r\n"}}