我正在用Vue.js建立一个网站,并使用PixiJS用来自大json文件的数据动态绘制画布。画布将作为组件生成并在视图中使用。
现在,当我第一次使用画布导航到视图时,一切看起来都很好。但是,当我开始在视图之间导航时,所有图纸都被弄乱了,所有的精灵都在那儿,但看起来却错综复杂且杂乱无章。然后,当我刷新页面时,画布再次看起来很好。这是一张图片:
我不确定这是什么问题,但我感觉这是多种因素的结合。也许我正在使用的100k行json文件与它有关(当我与之交互时视图也感觉很慢)
这是我的Vue组件的样子:
export default {
name: 'Tree',
data () {
return {
tree: {},
app: new PIXI.Application()
}
},
beforeMount () {
this.tree = this.treeStateData
PIXI.utils.clearTextureCache()
PIXI.loader.reset()
},
mounted () {
this.loadTree()
},
computed: {
...mapState([
'treeStateData'
])
},
methods: {
loadTree () {
document.getElementById('tree').appendChild(this.app.view)
// Load images
PIXI.loader
.add('background', require('@/assets/Background1.png'))
.add('1', require('@/assets/PSGroupBackground1.png'))
// lots more
.load(this.drawTree)
},
drawTree () {
const treeData = this.tree
// Create viewport
const viewport = new Viewport()
this.app.stage.addChild(viewport)
// Here i create some containers
// Here i work with the data from the json and put stuff in the containers
}
}
}
我的Vue项目的结构是这样的:
查看
views/home.vue
// Just a view with a link to details.vue
views/details.vue
// A view that had <tree> component in it
<template>
<div>
<tree></tree>
</div>
</template>
<script>
import Tree from '@/components/tree'
export default {
name: 'Details',
data () {},
components: {
Tree
}
}
</script>
组件
components/tree.vue
// Here is where the tree canvas is generated
有人对如何取得进展有想法吗?我应该重新考虑我该怎么做吗?
由于所有工作都在第一次加载中进行,因此在路径之间导航时缓存组件可能会有所帮助。它还节省了每次重新计算PixiJS显示的时间。
将包裹router-view
在一个keep-alive
组件中:
<keep-alive>
<router-view></router-view>
</keep-alive>
惊人的!现在可以使用了!性能仍然不是最好的(在视口中进行导航/拖动时),但这是我猜想的另一件事:)如果您有任何想法/建议可以提高性能,那将是不错的,但仍会发挥作用围绕我自己。
我很高兴:)一个建议是在非Vue应用程序中使用相同的PixiJS显示器测试是否存在性能问题。这可以帮助将呆滞现象从浏览器渲染大量信息中分离出来,还是与某种程度上与Vue有关。
谢谢丹。玩了一下,发现了问题。显然,如果您为每条连接线创建一个新的PIXI.Graphics(),只是创建一个新的PIXI.Graphics()并在该连接线上绘制所有线,那将是不一样的。继续下一个挑战!