日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【译】怎样处理 Safari 移动端对图片资源的限制

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】怎样处理 Safari 移动端对图片资源的限制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文作者:Thijs van der Vossen

本文翻譯自《How to work around the Mobile Safari image resource limit》,原文寫于2010年10月25日。可能部分限制已經不再適用。

翻譯本文的目的是作為《讀Zepto源碼之assets模塊》的附文,讀Zepto源碼系列文章已經放到了github上,歡迎star: reading-zepto

正文開始:

受限于 Ipad 和 Iphone 的可用內存,Safari 瀏覽器的移動端會比桌面端有著更嚴格的資源使用限制

其中之一是每個 HTML 頁面的圖片數據總量。當移動端的 Safari 瀏覽器加載了 8 到 10MB 的圖片數據后,就會停止加載其他圖片,甚至瀏覽器還會崩潰。

大多數網站都不會受到這條限制的影響,因為保持頁面合理的大小通常是一種很聰明的做法。

但是,在下面的場景中,你可能會遇到麻煩,如大型的圖片畫廊和幻燈片,或者是異步加載新數據的 web 應用,例如模擬不同版塊切換時的原生動畫(是的,你可以用移動端 Safari 模擬 Flipboard 的切換效果 )。

<img src="https://www.fngtps.com/2010/m... width="340px" /><img src="https://www.fngtps.com/2010/m... width="340px" />

我們有充足的理由相信,只通過刪除不再需要的圖片元素,就可以不受這條限制的影響:

var img = document.getElementById('previous'); img.parentNode.removeChild(img);

但是然并卵,因為某些原因,將圖片從 DOM (或者一個包含圖片的元素)中刪除時,圖片的真實數據并沒有釋放。真是頭大啊!

而將圖片的 src 屬性設置為其他的(更小的)圖片鏈接,卻起到了作用。

var img = document.getElementById('previous'); img.src = 'images/empty.gif';

替換掉 src 屬性后,舊的圖片數據最終得到了釋放。

我已經徹底測試過這種方法,下面幾個方面是需要注意的:

  • 將 src 屬性設置為其他圖片后,圖片數據不會立即釋放,需要一段時間讓垃圾回收器來真正地釋放內存。這意味著,如果你太塊地插入圖片,依舊可能會陷入麻煩中。

  • 在移動端 Safari 觸發限制后,即便刪除一部分或者全部已經加載的數據,Safari 也不會再加載額外的圖片,這種情況即便在切換到其他頁面時也繼續存在。這意味著在測試這項技術時,你需要經常重啟 Safari(這差點把我逼瘋了)。

  • 如果你想將圖片元素從 DOM 中刪除,你還必須確保在更改 src 前,元素不能為垃圾回收掉,否則,舊圖片數據不會被釋放。下面這個是最好的解決方案:

  • var img = document.getElementById('previous'); img.parentNode.removeChild(img); img.src = 'data:image/gif;base64,' + 'R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; window.timeout(function() { img = null; }, 60000);

    你可以看到,我使用了 data URI 作為替換圖片。

    <img src="https://www.fngtps.com/2010/m... width="340px" /><img src="https://www.fngtps.com/2010/m... width="340px" />

    (如果你只是刪除圖片元素, iPad 在加載8張圖片后會停止繼續加載,如果用 Zepto 的 assets 插件,會持續加載。)

    在上周我和 Thomas Fuchs 解釋了這項技術后,他立即將它加入了 Zepto 中。這個周末,我貢獻了一個測試函數,你可以自己用它來測試下。

    最后,所有文章都會同步發送到微信公眾號上,歡迎關注,歡迎提意見:

    譯者:對角另一面

    總結

    以上是生活随笔為你收集整理的【译】怎样处理 Safari 移动端对图片资源的限制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。