随着画布上形状数量的增加,我在使用 kineticjs 时遇到了一些严重的性能问题。我有两个函数,一个初始化路径、一个文本并将它们呈现在舞台上。第二个函数每 5 秒调用一次,它会更新之前绘制的路径和文本的任何更改。这是我正在尝试的示例片段,
/**
* Function that inits the shapes
*/
init = function(params) {
//Create the path object
var path = new Kinetic.Path({
data : params.geom,
fill : params.fill,
stroke : params.stroke.fill,
strokeEnabled : false,
scale : 1
});
path.setId(params.id + '.path');
var simpleText = new Kinetic.Text({
x : params.x,
y : params.y + (params.height /2),
text : params.displayText,
fontSize : 12,
fontFamily : params.family,
fontStyle : params.style,
fill : params.fill
});
simpleText.setId(params.id + '.text');
var layer = new Kinetic.Layer();
layer.setId(params.id);
layer.add(path);
layer.add(simpleText);
stage.add(layer);
}
/**
* Update every 5 seconds based on new data
*/
update = function(params) {
var layer = null;
if (Kinetic.Global.ids[params.id] != undefined) {
layer = Kinetic.Global.ids[params.id];
//Set text
var textItem = Kinetic.Global.ids[params.id + '.text'];
textItem.setText(params.displayText);
//center the text
textItem.setAttr('x', params.x + (params.width / 2) - (textItem.textWidth / 2));
textItem.setAttr('y', params.y + (params.height / 2) - textItem.getAttr('fontSize'));
// set center style
textItem.setAlign('center');
//Set path color
var pathItem = Kinetic.Global.ids[params.id + '.path'];
pathItem.setFill(params.fill);
pathItem.setOpacity(params.alpha);
layer.clear();
layer.draw();
}
}
随着要绘制的形状数量的增加,此代码将变得缓慢并消耗大量内存。上面的代码中可能有很多地方需要改进,我正在寻找那些指针。具体来说,我不相信 Id 查找和更新是否是更新现有形状的最佳方式。