AngularJS 进阶 (十五)Cookie ‘data‘ possibly not set or overflowed because it was too large
项目开发过程中遇到以上问题,刚开始以为只是个警告,没太在意。后来发现直接影响到了程序的执行效果。果断寻找解决方法。
问题分析
根据 Chrome 浏览器信息定位,显示以下代码存在错误:
由于自己在程序使用 cookieStore 存储了大量所需数据,其数据量超过了 cookie 默认设定的存储值 4K,故会报错。
换用 instance 试试。问题成功解决,实践证明:instance 比 cookieStore 好用。
刨根问底 1.cookieStore 默认存储多少数据?可否更改默认存储数据?
经过网络查询也没能获得明确答案,不过从提示可以看出,其可存储数据空间就是 4K,而且其提供的方法只有 put、get、remove 三种,故得知更改其默认存储数据空间是不现实的事情。
从 cookieStore 获取数据后,系统自己释放存储空间,还是必须得手动释放?是不是类似于 java 的垃圾回收机制?
凭借直觉,cookieStore 应该类似于 java 的垃圾回收机制,就算没有人工编码实现释放 cookieStore 所占用的存储空间,系统也会在其生命周期结束后释放其存储空间。最佳实践是:当从 cookieStore 中取出所需数据,不再需要 cookieStore 时,应收到释放其所占用的内存空间。这样才是合理的设计。
cookieStore 与 instance 的区别?
如上述所分析,从内存占用的角度考虑,cookieStore 中存储的数据置于内存之中,实实际际的占用内存空间。而 instance 类似于指针,只是其指向的是一个对象地址,其对象是可以存储任意内容、格式、大小的数据的,不受内存所限。
使用步骤
AngularJS 提供了很好的 cookieStore API 用来处理 cookies 。
这两个服务都能够很好的发挥 HTML5 cookies,当 HTML5 API 可用时浏览器会选择使用 HTML5 提供的 API,如果不可用则默认选择 document.cookies。无论那种方式,你都可以选择使用相同的 API 来进行工作。
Step 1 - include cookies module 第一步加载 JS 文件,并且依赖 cookie module
创建 angular module
Step 2 - Inject into controller 将 cookie module 注入到 controller 中
Step 3 - Using the
cookieStore 可以直接存储对象到 cookie 中,它会使用 angularjs 的 toJson/fromJson 自动序列化和反序列化
Step 4 - Using the $cookies
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/1eea641f99dc0aaabc8c62c04】。文章转载请联系作者。
评论