成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Cesium的3D在多個(gè)單頁面應(yīng)用中,內(nèi)存只增不減致內(nèi)存溢出問題的解決

zlyBear / 4219人閱讀

摘要:解決思路既然每訪問一次就會(huì)一個(gè),那能不能就創(chuàng)造一個(gè)全局的,讓他一直存在,通過顯示與隱藏去控制在每個(gè)單頁面應(yīng)用中的顯示呢。

1、背景:
項(xiàng)目使用的語言是vue+iview,因?yàn)橛玫搅?D,所以找公司買了3d地圖的產(chǎn)品,但是問題隨之而來。把我們項(xiàng)目需要用到的3d地圖封裝成一個(gè)組件叫3dMap.vue,方便各個(gè)頁面調(diào)用,vue的工作機(jī)制是在離開當(dāng)前頁面的時(shí)候把當(dāng)前頁面進(jìn)行銷毀,但是由于Cesium的特性,他并沒有沒銷毀,每當(dāng)訪問一次,就會(huì)重新new一個(gè)Cesium.

const Viewer = new Cesium.Viewer("newID", {
    navigation: this.navigation,
    infoBox: this.infoBox
});

查看計(jì)算機(jī)進(jìn)程會(huì)發(fā)現(xiàn),chrome瀏覽器會(huì)同事跑6個(gè)以上進(jìn)程,其中一個(gè)是Cesium的,它所占用的內(nèi)存會(huì)隨著訪問次數(shù)的增加不斷上漲。
2、解決思路:
既然每訪問一次3dMap.vue就會(huì)new一個(gè)Cesium,那能不能就創(chuàng)造一個(gè)全局的Cesium,讓他一直存在,通過顯示與隱藏去控制在每個(gè)單頁面應(yīng)用中的顯示呢。
3、動(dòng)手:
·3.1首先創(chuàng)建一個(gè)全局的Cesium,起名global3D.vue,這個(gè)只是用來初始化

3.2在main.js中進(jìn)行掛載

import global_ from "./components/global3D"
Vue.prototype.GLOBAL = global_

3.3 創(chuàng)建一個(gè)3DViewer.vue,用來接收全局的Cesium,這個(gè)文件中可以寫一些設(shè)置相機(jī)視角,獲取經(jīng)緯度啊等等方法,

export default {
    data() {
        return {
            //接收全局的Viewer,這個(gè)Viewer是Cesium new 出來的
            viewer: this.GLOBAL.Viewer,
            scene: this.GLOBAL.Viewer.scene
        };
    },
 }

3.4 單頁面應(yīng)用


3.4 如果你的3d只是應(yīng)用在不同的模塊中,且這些模塊之間沒有共同的組件,如下圖,在demo1模塊中,demo1Page1和demo1Page2共同使用demo1Menu,且只有demo1Page1頁面使用3d組件,demo2同,那么到3.3,就可以完美的解決這個(gè)問題,但是,如果你的3d是應(yīng)該在同一個(gè)模塊,且有共同的組件,那么在不同頁面之間跳轉(zhuǎn)的時(shí)候就會(huì)出現(xiàn)問題。比如,在demo1模塊中,demo1Page1和demo1Page2共同使用demo1Menu,且demo1Page1頁面和demo1Page2頁面都使用了3d組件,demo2同,那么在由demo1里面的頁面跳向demo2里面的頁面的時(shí)候,3d就會(huì)丟失了

demo1                    demo2
    demo1Menu                demo2Menu
    demo1Page1               demo2Page1
    demo1Page2               demo2Page2

3.5 解決
解決這個(gè)問題主要是使用的vue的keep-Alive,
首先,在App.vue中,做判斷,如果使用了keep-Alive,則走第一個(gè),否則的話,走第二個(gè)

  
    
  
  

然后,在router里面,對需要被緩存的模塊進(jìn)行設(shè)置

           {
                path: "homePage",
                component: UMPatrolHomePage,
                name: "UMPatrolHomePage",
                meta: {
                    keepAlive: true //需要被緩存
                }
            }

最后,在單頁面中寫入如下,to是要去的那個(gè)頁面的路徑,from是從哪個(gè)頁面來的那個(gè)路徑,next()必須執(zhí)行,否則跳轉(zhuǎn)會(huì)被攔截,如果要去的頁面或者from的頁面使用了3d,則這個(gè)頁面需要被緩存,即keep.Alive=true,成功緩存后,然后執(zhí)行銷毀操作,這樣在不同頁面之間切換的時(shí)候,就不會(huì)出現(xiàn)3d丟失的情況。原理感興趣的同學(xué)可以自行搜索,網(wǎng)上有很多詳細(xì)解說的文章

beforeRouteLeave(to, from, next) {
    if (
        to.name == "UMPatrolHomePage" ||
        to.name == "UMDetailEquipment" ||
        to.name == "虛擬巡檢" ||
        to.name == "人員定位詳情" ||
        to.name == "管廊安防監(jiān)控列表" ||
        to.name == "管廊環(huán)境監(jiān)控列表" ||
        from.name == "人員定位詳情" ||
        from.name == "虛擬巡檢" ||
        from.name == "UMDetailEquipment" ||
        from.name == "UMPatrolHomePage" ||
        from.name == "管廊安防監(jiān)控列表" ||
        from.name == "管廊環(huán)境監(jiān)控列表"
    ) {
        from.meta.keepAlive = true;
        to.meta.keepAlive = true;
        this.$destroy();
        next();
    } else {
        from.meta.keepAlive = false;
        to.meta.keepAlive = false;
        this.$destroy();
        next();
    }
},

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99990.html

相關(guān)文章

  • 企業(yè)打開Redis正確方式,來自阿里云云數(shù)據(jù)庫團(tuán)隊(duì)解讀

    摘要:未完,待續(xù)阿里云云數(shù)據(jù)庫版兼容協(xié)議標(biāo)準(zhǔn)的提供持久化的內(nèi)存數(shù)據(jù)庫服務(wù),基于高可靠雙機(jī)熱備架構(gòu)可無縫擴(kuò)展的集群架構(gòu)以及讀寫分離架構(gòu),滿足高讀寫性能場景及容量需彈性變配的業(yè)務(wù)需求。 摘要: Redis是開源的基于內(nèi)存且可以持久化的分布式 Key – Value數(shù)據(jù)庫。自2009年發(fā)布最初版本以來,Redis的熱度只增不減,除了經(jīng)常位居DB-Engines的最受歡迎Key-Value數(shù)據(jù)庫榜首...

    sorra 評論0 收藏0
  • 內(nèi)存泄漏

    摘要:假如沒有此時(shí)會(huì)進(jìn)行優(yōu)化把不會(huì)被任何閉包用到的變量從詞法環(huán)境中去掉從而消除內(nèi)存泄漏。良好的編碼方式了解一下常見現(xiàn)象可以減少內(nèi)存泄漏現(xiàn)象產(chǎn)生同時(shí)在由于失誤產(chǎn)生泄漏時(shí)保持清醒的思路借助進(jìn)行分析定位。 引言 內(nèi)存泄漏一般是由于我們編碼缺陷導(dǎo)致的,首先明確一下內(nèi)存泄漏的定義,就是應(yīng)用程序不需要,但是又不能返回給操作系統(tǒng)以供重新分配使用,導(dǎo)致可用內(nèi)存越來越少的現(xiàn)象。下面總結(jié)一下在browser端內(nèi)...

    jeffrey_up 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<