由于iOS内存不足,我的网站在浏览器中崩溃。我正在重复一些消耗记忆的动作。经过多次尝试,浏览器崩溃了。但是,当我使用开发人员工具中的timelime使用Chrome在我的桌面上测试同一个网站时:
如果没有内存泄漏,为什么浏览器会崩溃?有没有办法强制垃圾收集?
答案 0 :(得分:24)
您的网页在桌面上运行良好并不能保证它在iOS上运行良好。
1.请记住iOS使用
- EDGE(带宽更低,延迟更高)
- 3G(更高带宽,更高延迟)
- Wi-Fi(更高带宽,更低延迟)
连接到互联网。
2.您需要最小化网页的大小。 包括
- 未使用或不必要的图片
- CSS
- 的JavaScript
会对您网站在iOS上的效果产生负面影响。
3.由于iOS上可用的内存,它可以处理的资源数量有限制:
解码的 GIF,PNG和TIFF 图像的最大尺寸
- 3百万像素适用于 256 MB RAM的设备
对于大于或等于 256 MB RAM的设备- 5百万像素
对于小于 256 MB RAM的设备,确保宽度*高度≤3* 1024 * 1024
注意:解码后的尺寸远远大于图像的编码尺寸。
JPEG的最大解码图像大小 32百万像素使用 二次抽样。因为,JPEG图像最高可达<3200万像素 子采样,允许JPEG图像解码为 1的大小 十六分之一像素数。 JPEG图像大于2百万像素 被二次采样 - 即,解码为缩小的尺寸。 JPEG子采样 允许用户查看最新数码相机的图像。
4.
对于RAM小于256 MB的设备,
- 3百万像素
- 5百万像素适用于RAM大于或等于256 MB的设备。 如果未指定,画布对象的高度和宽度为150 x 300像素。
5. JavaScript执行时间
每个顶级入口点的限制为 10秒。如果你的脚本 执行超过10秒,iOS 上的Safari停止执行 脚本在代码中的随机位置,因此意外后果 可能会导致。
6.可以一次打开的<em>最大文档数
iPhone上的
- iPad上的
八
九。
请参阅Developing Web Content for Safari-Apple Documentation了解详情。
移动safari javascript实现没有任何命令,如Internet Explorer中的 CollectGarbage()用于垃圾回收。
有三个事件将触发垃圾回收 移动野生动物园(Reference)。
- 专用垃圾收集计时器到期
- 当所有堆的CollectorBlocks都已满时发生分配。
- 分配了具有足够大的关联存储空间的对象。
触发垃圾收集真的是一种不好的做法。我们应该做的是编写不泄漏内存的代码。
答案 1 :(得分:5)
以下是我遇到过的最好的资源(带基准),它解释了: http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
几周后我遇到了那些性能障碍,请注意iOS没有任何默认垃圾收集(文章解释了原因)。它是应用程序的责任(在这种情况下,是浏览器应用程序)。您无法通过您的网络应用收集垃圾。为iOS优化您的网站(防止崩溃)的一个小小提示:避免CSS转换。
虽然我建议你喝一杯咖啡并阅读完整的文章,但我会在下面粘贴摘要:
- Javascript对于2013年的移动应用程序使用来说太慢了(例如,用于照片编辑等)
- 它比本机代码慢了大约5
- 可与IE8相媲美
- 比x86 C / C ++慢约50
- 如果你的程序适合35MB,那么它比服务器端Java / Ruby / Python / C#慢了大约10倍,并且从那里开始呈指数级下降
- 提高速度的最可行途径是将硬件推向桌面级别的性能。这可能是长期可行的,但看起来似乎是漫长的等待。
- 这些天语言本身似乎并没有变得更快,正在研究它的人说,使用当前的语言和API,它永远不会像本机代码那么快
- 在内存受限的环境中,垃圾收集呈指数级恶化。它比桌面级或服务器级环境更糟糕。
- 每个有能力的移动开发人员,无论他们是否使用GCed环境,都会花费大量时间考虑目标设备的内存性能。
- 目前存在的JavaScript基本上反对甚至允许开发人员考虑目标设备的内存性能
- 如果他们确实改变了主意并允许开发人员考虑内存,那么经验表明这是一个技术难题。