2017-06-27 25 views
4

我有一個使用的角度4的最新版本和離子3.離子 - 大圖像的滾動列表 - 內存使用

該應用程序包含了許多蠻大的圖像的滾動列表的離子應用。

我在IOS上出現了內存崩潰,因爲那些巨大的紋理都堆積在內存中。

現在我使用VirtualScroll和ion-image來嘗試解決這個問題。

我也計劃使用wkwebview。

當它們不在視口內時,是否有任何這些處理從內存中卸載紋理?

如果不是 - 我該如何手動做到這一點?

+0

出於性能的原因,不能在列表中的每個記錄一次呈現;相反,一小部分記錄(足以填充視口)在用戶滾動時被渲染和重用。 https://ionicframework.com/docs/api/components/virtual-scroll/VirtualScroll/ – Akis

+0

感謝您的回覆。是的,我在文檔中閱讀的內容很多,但是隻填充視口的記錄子集佔用內存嗎? 例如 - 圖像1-4在視口內,因此被渲染。我向下滾動。現在圖像5-8在視口內並被渲染。 圖像1-4的紋理是從GPU中銷燬還是卸載的?或者即使它們不再被渲染,它們是否仍然佔用內存? 如果它們仍然佔用內存,那麼無論一切是否一次呈現,我越滾動越接近內存崩潰。 –

+0

問題是我已經處理了內存崩潰,主要是過去的GPU內存崩潰以及'VirtualScroll'或'VirtualRepeat'以及類似的技術總是解決了這個問題。圖像保存在緩存不在內存中,這就是我的想法。 – Akis

回答

2

什麼VirtualScroll是所有關於:

的基本想法是,我們只在DOM來顯示當前屏幕上的列表數據創造足夠的元素,我們回收的DOM元素,以顯示新的數據當他們從屏幕上滾動時。

使用VirtualScroll的好處在性能方面是巨大的。 當你有1000件物品時,DOM可能真的很沉重,不會提及可能的內存崩潰的危險。

ion-img作用:

離子IMG組分是類似於標準img元素,但它也增加了,以提供改進的性能特徵。其功能包括只加載可見的圖像,使用網絡工作人員進行HTTP請求,防止在滾動和內存緩存時出現亂碼。

另外:

離子-IMG的應用程序能夠將資源集中用於只是可視圖像

從這種方法的好處也對,因爲圖像具有更好的性能巨大那些看不見的東西不會被渲染。

而且最後:

ion-img有一個名爲cache

的圖像已成功下載後,它可以被緩存在內存中 財產。這是VirtualScroll有用允許圖像 迴應被緩存,而不是渲染,直到後滾動已 完成,它允許平滑scrolling.`

您可以相應地設置該屬性。

我會盡力豐富我的回答,請給我建議任何我錯過的或任何不清楚的東西。

來源:

https://ionicframework.com/docs/api/components/img/Img/https://ionicframework.com/docs/api/components/virtual-scroll/VirtualScroll/https://www.joshmorony.com/boosting-scroll-performance-in-ionic-2/

+0

感謝您的詳細答案:) –