sencha Touch 缓存问题解析
来源:互联网 发布:unity3d 4.5破解版 编辑:程序博客网 时间:2024/06/05 17:16
这个问题困扰了我好几个月,每次使用sencha app build production后,版本的改动无法自动更新,每次都需要手动清理浏览器缓存。
终于下决心研究下这个问题的解决,费了劲终于搞定。
1. 研读源代码
senche的好处是开源。针对缓存这块重要的代码是
touch\microloader\production.js
里面是所有关于缓存的代码
2. 介绍下sencha的缓存机制
在非production build的模式下是没有缓存的,所以大家会明显感觉加载速度较慢。
而production编译后,我曾经以为sencha使用了html5的manifest缓存技术,后来发现不是的。
sencha讲app.js app.css app.json三个文件缓存在localstorage里,这样比manifest速度更快些。
而其他的代码则设定在app.json
"appCache":{ "cache":[ "index.html", "classno.json", "resources/img/ic_contact.png" ], "network":[ "*" ], "fallback":[] },这段设置生成后会成为cache.appcache文件
CACHE MANIFEST# cc7fa32bbb0e9829f296000d831ab8f1359d47fcindex.html# ee58408c17123a1f0168c3dbb9544a91b0f1531fclassno.json# 7af74f4459b0bbc0b284f8772279e902f7cc1967resources/img/ic_contact.pngFALLBACK:NETWORK:*
而默认的设置app.js app.css app.json的部分是
"js":[ { "path":"touch/sencha-touch.js", "x-bootstrap":true }, { "path":"app.js", "bundle":true, "update":"full" } ], "css":[ { "path":"resources/css/app.css", "update":"delta" } ],
编译后生成的代码在app.json中
{"id":"3bc243a7-beaf-4ea0-be2c-71f3ea413779","js":[{"path":"app.js","bundle":true,"update":"full","type":"js","version":"65ce2ec123ac31df09ec97165c6fe3221640ddbb"}],"css":[{"path":"resources/css/app.css","update":"delta","type":"css","version":"8ff7300b1d251658a81f9785c4565285d668500a"}]}
大家使用chrome浏览器可以在console的Resoures->Local Storage看到这种缓存方式,讲整个app.js app.css文件存在里面
而其他文件则可以在Application Cache中找到了
3. 缓存设置
production默认缓存了么?是的,也不是。原因在于他默认缓存了localstorage的,而没有manifest。所以你在console里看不到他缓存的log输出。
只有你在index.html设置了缓存项才会有。这块sencha2.2默认的index.html已经做了修改,而2.1版本之前都需要你手动设定(坑爹把,让老子读了代码才发现的)
<!DOCTYPE HTML><html manifest="" lang="en-US"><head>
这样production编译后sencha会默认使用cache.appcache作为html5 manifest的配置文件。
4. sencha localstorage的更新
manifest的文件需要设定后才能更新,而默认的三个app文件是不可以自动更新的,具体可以看production.js的源代码。
他与manifest的更新触发绑定。。。坑爹吧!所以你必须要设定了manifest,sencha的production才会检测更新。
5. 超级大bug~~~
这里但是就是折腾了很久的问题
默认的app.js app.css的 配置在app.json里大家可以看到有一个配置叫做
"update":"delta"
知道这个是啥东东么?
这个是增量修改,也就是production会判断缓存的app.js和新的app.js有多大的区别,然后记录在deltas/app.js/的目录下,然后根据这个修改一下下localstorage里的代码。
然后呢?
然后这里存在巨大的bug!!!
你随便该点代码,他的增量改后你的代码是没有变化的,比如你把1.0.0该成1.0.1,再进去看还是1.0.0.。。哈哈哈
这个就是折腾我几个月的东西,Scheiße!
So ,你只需要把这块设置写成
"update":"full"
搞定。虽然传说的性能有所降低,因为一次要读取整个app.js重新写入localstorage,但是,正确的更重要吧。
不知道这个bug什么时候能够纠正过来。
6. 关于OnUpdatedh函数
在app.js默认有个函数
onUpdated: function() { Ext.Msg.confirm( "Application Update", "This application has just successfully been updated to the latest version. Reload now?", function(buttonId) { if (buttonId === 'yes') { window.location.reload(); } } ); }
大家根据自己需要修改下,我一般会把这个提示无视掉。
最后,大家感谢我吧~
sencha应该把这块好好写个文档,害死人啊~
- sencha Touch 缓存问题解析
- sencha touch 问题集锦
- Sencha Touch问题
- sencha touch 问题汇总
- 解析Sencha Touch中Ext常用函数
- 解析Sencha 函数Touch中Ext常用
- [Phonegap+Sencha Touch] 移动开发12 Sencha Touch打包发布网站的离线缓存版本
- [Phonegap+Sencha Touch] 移动开发12 Sencha Touch打包发布网站的离线缓存版本
- sencha touch NavigationView 嵌套 TabPanel 的问题
- sencha touch 的list滚动式注意问题
- 解决Sencha Touch tabpanel滚动条问题
- sencha touch下拉刷新传参数问题
- sencha touch打包成apk的问题
- Sencha Touch
- sencha touch
- sencha touch
- sencha touch 入门系列 (四)sencha touch 新建项目目录结构解析
- sencha touch 入门系列 (五)sencha touch运行及代码解析(上)
- STM32学习笔记(3):系统时钟和SysTick定时器
- Sql Server 2008 登录解决
- 如何在Excel中仅复制可见单元格
- LightOj 1054 Efficient Pseudo Code
- uva_10125_Sumsets( 二分 )
- sencha Touch 缓存问题解析
- 625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?
- 构造函数+析构函数
- 上传图片漏洞
- mysql笔记(一)
- iOS中如何避免图像解压缩的时间开销
- Asterisk专题之:DAHDI与Zaptel
- PureMvc学习(一)
- MFC框架类、文档类、视图类相互访问的方法