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