Vue data对象中的属性对maptalks+cesium三维地图项目的性能影响(vue项目三维地图性能优化)

20 篇文章 3 订阅
6 篇文章 6 订阅

这个思考来自于我们的三维项目中当对三维地图的单体进行颜色等的属性修改时发现整个地图操作变得不流畅:

左侧结果列表点击某一项-》地图跳转到这一项的位置-》该项对应的三维单体高亮-》从跳转开始变得迟缓然后拖拽地图也变得卡顿

最终定位是存放单体属性的变量问题:

在把maptalks+cesium的方法(主要是单体高亮的方法,这些方法需要共同维护几个属性和对象值)在vue项目里实现时我理所当然的把一些公用属性和对象放在data里以便于在不同的方法里使用和更改这些数据——如下图注释的属性

我们来看vue官网对data的说明

也就是说在我调用方法修改单体颜色后因为data里属性的值改变导致视图重新渲染,三维部分本来就耗内存,在数据频繁更改、视图频繁渲染的情况下导致地图卡顿。

解决方法:

就是把这些属性变量提取出来直接放到<script>下面作为全局变量使用

总结:这给我们优化vue+maptalks+cesium或其他类似结构的三维项目性能优化提供了一个思路——三维地图卡顿有可能是需要的全局变量设置不当引起的

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
根据提供的引用内容,Cesium是一个开源的JavaScript库,用于创建WebGL应用程序,可以用于创建三维地球和其他地球空间可视化应用程序。Vue.js是一个流行的JavaScript框架,用于构建用户界面和单页应用程序。在这里,我们可以使用CesiumVue.js来实现三维风场和风速热力图。 以下是实现步骤: 1.安装CesiumVue.js 在终端运行以下命令来安装CesiumVue.js: ```shell npm install cesium vue --save ``` 2.创建Vue.js应用程序 在Vue.js应用程序,我们需要使用Cesium Viewer组件来创建三维地球。在App.vue文件,我们可以使用以下代码来创建Cesium Viewer组件: ```vue <template> <div id="cesiumContainer"></div> </template> <script> import * as Cesium from 'cesium/Cesium' export default { name: 'App', mounted () { const viewer = new Cesium.Viewer('cesiumContainer') } } </script> ``` 3.添加风场数据 我们可以使用Cesium的ParticleSystem组件来添加风场数据。在mounted()方法,我们可以使用以下代码来添加风场数据: ```javascript const particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({ image: 'path/to/particle/image.png', startColor: Cesium.Color.RED, endColor: Cesium.Color.YELLOW, startScale: 1.0, endScale: 0.0, minimumSpeed: 5.0, maximumSpeed: 10.0, lifetime: 10.0, emitter: new Cesium.SphereEmitter(0.5), rate: 1000, bursts: [ new Cesium.ParticleBurst({ time: 0.0, minimum: 100, maximum: 200 }), new Cesium.ParticleBurst({ time: 1.0, minimum: 100, maximum: 200 }) ] })) ``` 4.添加风速热力图 我们可以使用Cesium的HeatmapImageryProvider组件来添加风速热力图。在mounted()方法,我们可以使用以下代码来添加风速热力图: ```javascript const heatmapImageryProvider = new Cesium.HeatmapImageryProvider({ canvasSize: new Cesium.Cartesian2(2048, 2048), data: 'path/to/heatmap/data.json', gradientStops: [ { stop: 0.0, color: Cesium.Color.TRANSPARENT }, { stop: 0.2, color: Cesium.Color.BLUE }, { stop: 0.4, color: Cesium.Color.GREEN }, { stop: 0.6, color: Cesium.Color.YELLOW }, { stop: 0.8, color: Cesium.Color.ORANGE }, { stop: 1.0, color: Cesium.Color.RED } ] }) viewer.imageryLayers.addImageryProvider(heatmapImageryProvider) ``` 5.完整代码 以下是完整的App.vue文件代码: ```vue <template> <div id="cesiumContainer"></div> </template> <script> import * as Cesium from 'cesium/Cesium' export default { name: 'App', mounted () { const viewer = new Cesium.Viewer('cesiumContainer') const particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({ image: 'path/to/particle/image.png', startColor: Cesium.Color.RED, endColor: Cesium.Color.YELLOW, startScale: 1.0, endScale: 0.0, minimumSpeed: 5.0, maximumSpeed: 10.0, lifetime: 10.0, emitter: new Cesium.SphereEmitter(0.5), rate: 1000, bursts: [ new Cesium.ParticleBurst({ time: 0.0, minimum: 100, maximum: 200 }), new Cesium.ParticleBurst({ time: 1.0, minimum: 100, maximum: 200 }) ] })) const heatmapImageryProvider = new Cesium.HeatmapImageryProvider({ canvasSize: new Cesium.Cartesian2(2048, 2048), data: 'path/to/heatmap/data.json', gradientStops: [ { stop: 0.0, color: Cesium.Color.TRANSPARENT }, { stop: 0.2, color: Cesium.Color.BLUE }, { stop: 0.4, color: Cesium.Color.GREEN }, { stop: 0.6, color: Cesium.Color.YELLOW }, { stop: 0.8, color: Cesium.Color.ORANGE }, { stop: 1.0, color: Cesium.Color.RED } ] }) viewer.imageryLayers.addImageryProvider(heatmapImageryProvider) } } </script> ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辣姐什么鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值