如何在不'in view'时卸载图像以节省内存?



我有一个图片库,我希望能够在移动设备上显示,而不会使浏览器崩溃或导致滚动生涩。周围有很多插件可以延迟加载图像,但是当不在视图中时,有什么东西可以卸载图像以节省内存吗?

这是 LinkedIn 工程团队博客文章 iPad LinkedIn:与此问题相关的 HTML5 平滑无限滚动的 5 种技术:

UIWebView/Mobile Safari对图像有严格的限制。我们的直播充满了大图像,所以我们很快就达到了极限。一种选择是使用 HTML5 Canvas 元素绘制图像,而不会遇到内存问题。但是,我们发现在画布上绘制非常大的图像很慢,因此我们必须采取另一种方法:每当图像从屏幕上充分滑动时,我们就将img标签的"src"属性替换为非常小的图像。这确保了用于渲染大图像的内存定期释放。此外,我们确保不会引入空图像 src 属性错误。

我认为

没有任何方法可以做到这一点。JavaScript 只保存对 DOM 对象的引用,而 DOM 对象又由浏览器管理。因此,完全由浏览器缓存引擎来确定何时解除分配资源。这些决策不是基于对此对象的 JavaScript 引用是否存在,而是基于为其加载资源的页面是否仍处于活动状态。在任何情况下,浏览器都会自动进行缓存管理,您不能通过 JavaScript 影响它,因为这意味着与用户文件系统进行某种交互,在 JavaScript 中,出于安全考虑,仅在极少数情况下允许显式授权。

这是一篇较旧的文章,但仍然有帮助: http://www.vargatron.com/2010/08/ipad-html5-js-memory-management/

为了附加事件处理程序,以便在进入和离开视口的图像元素上收到通知,以便将其src属性替换为实际的 img url(在视口中(或占位符 url(在视口外(,有以下插件:

http://static.pixeltango.com/jQuery/Bullseye/http://imakewebthings.com/jquery-waypoints/

替换 src 属性值仍然不能保证浏览器会释放内存,但它对垃圾回收器来说是一个强烈的提示。无论如何,如果图像没有立即释放,那么如果用户决定滚动回它,它仍然在缓存中。

最新更新