캔버스의 모양 수가 증가함에 따라 kineticjs에 심각한 성능 문제가 있습니다. 두 가지 기능이 있습니다. 하나는 경로와 텍스트를 초기화하고 무대에 렌더링하는 기능입니다. 두 번째 함수는 5 초마다 호출되며 이전에 그려진 경로와 텍스트의 모든 변경 사항을 업데이트합니다. 여기kineticjs의 성능 문제
/**
* 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 룩업 및 업데이트가 기존 모양을 업데이트하는 가장 좋은 방법인지 확신 할 수 없습니다.
이 큰 점이며, 나는 몇 가지를 구현 : get 메소드에 대한 추가 정보를 원하시면 여기를 참조하십시오
을 : 그런데
당신은이 같은
.get()
기능을 사용할 수 있습니다 ! 그러나 성능을 크게 개선 한 변경 사항은 각 그래픽 항목 (경로 및 텍스트 포함)에 대해 레이어 대신 단 하나의 레이어를 사용하는 것이 었습니다. 내 요구 사항은 각각 경로와 텍스트가있는 약 1000 개의 그래픽 항목을 지원하는 것으로, 이제는 제대로 작동하는 것 같습니다.그러나 요구 사항이 더 많이 지원하도록 변경되면 단일 레이어 이상이 필요할 수도 있습니다. – Vik네, 맞습니다! 위의 코드에서 명확한 지 확실하지 않은 각 항목에 대해 레이어를 갖고 싶지는 않습니다. 이렇게하면 성능이 크게 향상됩니다. 각 레이어는 DOM에 2 개의 캔버스 **를 추가합니다. 하나는 노드를 렌더링하고 하나는 히트 캔버스로 사용합니다. 대신 노드를 그룹화해야하는 경우 [Kinetic.Group] (http://kineticjs.com/docs/Kinetic.Group.html)을 사용하십시오. 자세한 내용은 다음 링크를 참조하십시오. http://stackoverflow.com/questions/ 17632068/kineticjs 그룹과 레이어 사이의 차이점 – projeqht
감사합니다. 이제 그룹이 자리를 잡고 성능이 훨씬 향상되었습니다. – Vik