智能手机上的 JavaScript 内存和 HTML5 LocalStorage 限制
我将开发应在移动设备(智能手机)上运行的网络应用程序。在应用程序中,操作员将输入一些业务数据,并且操作员还将在网络信号可能不可用的封闭空间中输入这些数据。
因此,需要离线模式。在这种模式下,操作员可以输入数据,这些数据将存储在浏览器端,当网络可用时,数据将发送到服务器并保存在数据库中。
我找到了 2 个可能的解决方案:
- 将值存储在 JavaScript 内存中。无法在浏览器崩溃或页面重新加载中幸存。
- 将值存储在 HTML5 LocalStorage 中。需要支持 HTML5 的浏览器并保证此存储将是持久的(关闭浏览器应用程序后不会刷新)。
因为我还没有为智能手机开发 Web 应用程序,而且我对它们的经验很少,所以我有一个问题:
特定智能手机(Android、Windows Mobile、 Windows Phone、iPhone)?
我知道理论上 HTML5 LocalStorage 应该是 5MB,JavaScript 内存应该依赖于设备资源,至少应该是 5MB,但是对于智能手机来说又如何呢? Fg 我注意到在 Windows Phone 6.5 上,jStorage 页面使用 userData 对于较旧的 IE,不会在此设备上保留数据(可能在每次页面刷新后,在资源有限的情况下,它都会被刷新)。
更新 在本地存储值最大大小问题的答案中有链接到测试本地存储限制的简单应用程序,根据我所做的测试,可以在 Opera Mobile 11 上增加本地存储,而不受浏览器的限制,用户必须简单地接受要求更多空间。限制就是设备的限制。
这是应用程序的二维码:
以及应用程序本身: http://arty.name/localstorage.html
I'm going to develop web application which should work on mobile devices (smartphones). In the application the operator will input some business data, and the operator will type this data also in closed spaces, where network signal can be unavailable.
So, there is a need for offline mode. In such mode operator can input data, which will be stored on browser side, and after the network becomes available, the data will be send to the server and persisted in database.
I've found out 2 possible solutions:
- Store the values in JavaScript memory. Will not survive browser crash or page reload.
- Store the values in HTML5 LocalStorage. Requires browser with HTML5 support and guarantee that this storage will be persistent (no flush after closing the browser app).
Because I've not developed the web application for smartphones yet, and I have little experience with them, I have the question:
What are the JavaScript memory and HTML5 LocalStorage limitations for particular browsers on particular smartphones (Android, Windows Mobile, Windows Phone, iPhone)?
I know that theoretically HTML5 LocalStorage should be 5MB, and JavaScript memory should depend on device resources, which should be at least 5MB, but how it is for Smartphones? F.g. I've noticed on Windows Phone 6.5, that the jStorage page, using userData for older IE, is not persisting data on this device (maybe it got flushed after each page refresh, during to limited resources).
update
In the answer to the question of max size of local storage values there's great link to the simple application which tests local storage limitations, and according to the test I've made, the local storage can be increased on Opera Mobile 11 without browser's limitation, the user must simply accept the request for more space. The limits are there the device's limits.
Here's the QR code to the app:
And the app itself:
http://arty.name/localstorage.html
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据我的经验,对于上述平台,您可以可靠地押注至少 5MB。将您的数据保持在该水平以下,您应该非常安全。
阅读这篇文章。 http://diveintohtml5.info/storage.html 它有一些不错的信息,但还不是全部准确,尤其是说你不能超过限制的部分。
我知道,在 iPhone 上,一旦达到限制,手机就会询问用户是否要留出更多空间。 (有点准确,但不完全)
在 Android 平台上,堆内存限制设置为 12MB。不知道其他平台怎么样。由于您将在某种网络容器(Webkit 或其他)中运行,所以我不会太担心它。容器本身非常擅长管理内存和实现文件缓存以最大限度地减少其占用空间。
我建议您将内存优化等留在最后。谁知道呢,你可能甚至不需要它。不要过早优化。
PS:
查看 Phonegap:http://phonegap.com/
In my experience you can reliably bet on 5MB minimum for the platforms you mention above. Keep your data below that level and you should be pretty safe.
Read this article. http://diveintohtml5.info/storage.html it has some nice nuggets of info, but it's not all accurate, especially the part that says you cant up the limit.
I know for a fact that on iPhone once you reach the limit the phone will ask the user if they want to allow more space. (Sort of accurate, but not entirely)
On Android platforms the heap memory limit is set at 12MB. Not sure about the other platforms. Since you are going to be running in some kind of webcontainer (Webkit or other) I wouldn't worry too much about it. The containers themselves are pretty good at managing memory and implementing file caches to minimize their footprint.
I recommend you leave the memory optimizations and such for last. Who knows, you might not even need it. Dont optimize prematurely.
PS:
Look at Phonegap: http://phonegap.com/
刚刚测试了您的链接:检查本地存储
全部运行到 2.600 .000 个字符。由于 UTF-8 有 4 个字节,只需将其乘以 4 即可得到总字节数。
10400000 字节 = 9,918 兆字节
just tested out your link: check localstorage
all go until 2.600.000 characters. Since UTF-8 has 4 bytes just multiply it by four and you get the total bytes.
10400000 bytes = 9,918 MegaBytes
在我使用 Android 2.3.5 的低端 HTC Wildfire S 上,您的页面停在 2,600,000。我对它达到如此高的水平印象深刻。
在 Firefox 16.0.1 桌面上,它停在 5,200,000,这与 about:config 配额的定义一致。
On my lowly HTC Wildfire S using Android 2.3.5 your page stopped at 2,600,000. I'm impressed it got that high.
On Firefox 16.0.1 desktop it stopped at 5,200,000 which is consistent with what about:config quota is defined at.