IOS设计无线webapp安装更新机制仓酷云
继承自相应的不可变类比如NSMutableArray继承自NSArray他们都添加了可以改变对象内容的方法比如-(void)addObject:(id)anObject添加对象-(void)removeObject:(id)anObject删除对象上面只是一个大概的总结择要为了满意挪动终端:节俭流量、削减哀求、进步客户端功能的需求,我们计划了webapp安装更新程序,把js、css、html和图片这些资本,序列化为字符串存进客户端当地存储,并带上版本号来完成资本细粒度更新。
TAG
webapp安装启动功能优化
1、概述
我们以为webapp是一站式的使用,在一个页面里能完成整站的功效。以是,之前经由过程页面全刷的跳转,如今酿成了经由过程底层框架来撑持的局刷和切换动画。为了撑持这些功效,会多出很多的代码,再加上app里的功效代码,我们统称为资本,包含底层库js(zepto、iscroll、baiduTemplate等),通用ui组件和app功效性的js、css、html和图片。
怎样处置一个页面里的这么多资本,才干下降对功能的影响呢?为此,我们计划了webapp安装更新程序,能够做到削减资本哀求,节俭流量,提拔客户端功能。
2、扫瞄器缓存计划
利用扫瞄器对资本缓存,这是一般的做法,能疾速加载页面,只需设置资本一个较长的过时工夫便可,当服务器端资本有更新时,改动资本路径就可以使客户端实时猎取更新。
但弱点是,在webapp使用场景中,有大批的资本必要被下载,资本哀求数大概过量,今朝正在开辟的贴吧webapp宙斯版,已有60个哀求了,估计会过百,固然我们能够把资本文件兼并,但又带来了别的一个成绩,下载粒度较年夜。当更新了一个较小部分,会招致年夜粒度资本被从头下载。因为手机硬件和手机收集的限定,每多一个毗连哀求的工夫损耗和资本下载招致的流量泯灭,都是无线webapp要思索的主要要素。
别的一个弱点就是只能缓存文件,不克不及缓存一些常量,好比前端模板html片断。
为此,我们计划的webapp安装更新程序,可以只在一个哀求中下载一切资本文件内容。当资本有更新的时分,也是在一个哀求中只猎取有更新的小粒度文件,而且能在客户端缓存常量,如html片断等。
3、自界说安装更新程序
我们想把资本细粒度的存储在客户端,当资本有更新的时分,客户端能实时同步更新。要办理两个次要成绩:1、怎样在客户端存储资本;2、怎样实时猎取更新关照,并实行资本更新。
1)客户端资本存储
我们把资本序列化为字符串,以键值对的体例存进客户端当地存储(localstorage)。好比基本库zepto.js文件,在当地存储中的key为zglobal/js/base/zepto.js,value就是zepto.js的被紧缩后的字符串内容了。同理,css文件,html前端模板都是一样,合适做成base64编码的图片会以base64字符串的情势存在css文件。
在资本被援用的中央,假如是js文件,我们会从当地存储中掏出js字符串内容,实行eval函数;假如是css文件,我们会静态创立style元素,包括css内容,追加到HTMLDocument的head部分;假如是html前端模板,就在用到的中央,从当地存储猎取前端模板字符串,然后挪用模板办法举行衬着。
资本当地存储示例片断:
图一
资本的援用体例samplecode:
图二
2)猎取资本更新关照
完成资本更新要依附于资本版本号。我们把每一个资本缓存项都对应一个版本号(文件的md5值的前8位),整站一切资本缓存项对应一个总的版本号(一切资本缓存项的版本号的md5值)。
详细流程是:我们把总版本号存进cookie,在一些出口url的服务器处置程序中,判别客户端cookie是不是和以后服务器资本总版本号是不是不异,假如不异,则跳过资本更新处置,间接启动app,假如分歧,申明有资本更新,此时,客户端发送一个ajax哀求,带受骗前客户端每一个缓存项的版本号,向服务器猎取更新项,服务器对照客户端每一个缓存项的版本号,就晓得客户端哪些资本是必要更新的,哪些资本是被删除的,因而,服务端就可以只前往被更新了的资本。那末,客户端是怎样拿到以后客户端每一个缓存项的版本号呢?实际上是依附于服务器呼应客户端ajax资本更新哀求时,会包括每一个更新了的资本缓存项的称号、版本号和资本内容字符串,客户端拿到这个了局,会更新当地存储中专门用来纪录更新后每一个资本项的版本号的一个当地存储项,以一个json对象序列化后的字符串情势存在,因而客户端发送的ajax哀求,就是间接带上这个json字符串便可。
程序流程:
图三
图三中的totalItemVersions就是一切细粒度资本缓存项的版本号纪录。在客户端当地存储中的key为totalItemVersions,value是{“zglobal/html/frsMostTemplate.html”:”d6670285″,”zglobal/js/base/ajaxStore.js”:”68ce034f”,”zglobal/js/base/appBaseController.js”:”4083dd27″,”zglobal/js/base/appBaseModel.js”:”f1f806f1″,”zglobal/css/common/app.css”:”66153242″,”zglobal/css/common/base.css”:”2731733d”……….}
经由过程以上,我们能发明,当服务器端无资本更新时,启动的webapp将不会有收集资本哀求,间接加载当地资本,然后启动app,后续只是app静态的json数据交互;当服务器有资本更新时,不论被更新的资本的几,客户端都是经由过程一个哀求猎取仅更新的资本,然后加载资本,并启动app。
4、当地build
懂得了后面全部客户端和服务器的交互以后,我们大概会体贴,这些资本在服务器端是怎样天生并存储的?这依附于一个当地build历程。
在贴吧的前端开辟中,是按分歧模块来开辟的,分歧模块包括分歧的功效,如许能削减人人同时修正带来的抵触。最初的上线,也是按修正的哪些模块,只上线响应的模块修正便可。
每一个模块下城市有当地build剧本,只卖力本模块的build事情。关于安装更新这块来说,当地build输入两个文件,moduleVersion.php和cache.php。
cache.php就是以后模块下一切的资本缓存项,每一个项的version就是资本文件的md5值的前8位,cache.php文件以下:
图四
moduleVersion.php暗示以后模块的版本号,文件以下:
图五
模块版本号的盘算办法是以后模块下一切缓存项的版本号的总毗连字符串的md5的前八位。如许当任何一个资本文件有修正的话,资本文件的version将会改动,moduleVersion的值也会改动。
在“猎取资本更新关照”一节中,提到了整站一切资本缓存项的总版本号,这个版本号的盘算办法是,一切模块的版本号的总的毗连字符串的md5。
图六
5、利用倡议
假如人人也在做无线webapp,倡议无妨尝尝这类资本处置体例,将会有更少的资本哀求,而且让资本更快加载,给用户带来更好的体验。
如果你对iPhoneDevelopment有兴趣,以下是入门门槛供参考:首先你要有一台Mac电脑(因为iPhoneApp使用Mac平台内建的Xcode开发工具),网上也有在Windows下搭设开发环境的教程,请大家自行谷歌一下, 其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。 从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以, 因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。 学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 边吃零食边看Stanford的视频教程 要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。 到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了 好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。 学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。 好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。 其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。 从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以, 到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了 特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地 还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。 看完这个你就可以有多种选择来踏入做应用的阶段 看完这个你就可以有多种选择来踏入做应用的阶段 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。
页:
[1]