以下d3.js可視化在瀏覽器中打開時滯後。起初它運行平穩但後來的可視化變得滯後。看起來它消耗了大量的內存。另外,當我試圖減少CSV文件中的記錄數量時,它會運行一點平滑。D3.js可視化滯後
d3.csv("csv/EditedCSVFile.csv",function(capitalsArray){
var noOfTweets = capitalsArray.length;
var i = 0;
var intervalId = setInterval(
function() {
if (i == capitalsArray.length) {
clearInterval(intervalId); // stops executing once we've browsed through the array
alert("Simulation Completed...");
} else {
var score = capitalsArray[i].score;
if(score =="1"){
var colCode = "#ff0000";
}
if(score =="2"){
var colCode = "#00ff00";
}
if(score =="3"){
var colCode = "#0000ff";
}
if(score =="4"){
var colCode = "#ff00ff";
}
if(score =="5"){
var colCode = "#00ffff";
}
//console.log(colCode);
// Plotting starts here
canvas.selectAll(".city-marker")
.data(capitalsArray)
.enter().append("circle")
.attr("r",20)
.attr("fill", colCode)
.attr("opacity", 0)
//.attr("stroke-width","1")
.attr("cx",function(d){
var coords = projection([capitalsArray[i].Lat, capitalsArray[i].Long]);
//console.log(coords[0]+", "+coords[1]);
return coords[0];
})
.attr("cy",function(d){
var coords = projection([capitalsArray[i].Lat, capitalsArray[i].Long]);
//console.log(coords[0]);
return coords[1];
})
.transition()
.attr("r",4)
.attr("opacity", 1.0)
.duration(1000);
//Plotting ends here
//console.log("Cordinates: "+capitalsArray[i].Lat+" "+capitalsArray[i].Long);
i++;
}
},
10
);
});
我不能測試你的代碼(無數據),但我看到的第一個(未成年人)的東西是取代'如果(得分...)'與字典。而且,你似乎一遍又一遍地做同樣的事情:用數據'x次'初始化'canvas',其中''x'是數據的長度。你能解釋一下爲什麼?它真的是你想要的結果嗎?最後,我發現過渡往往會降低可視化的速度。 – mkaran
我的意思是,在我看來,你正在嘗試執行一個可視化/轉換,但你每次都在初始化你的數據'canvas.selectAll(「。city-marker」) .data(capitalsArray) .enter()。append (「circle」) .attr(「r」,20) .attr(「fill」,colCode) .attr(「opacity」,0)'。 您可以用數據初始化畫布一次,然後循環x倍您的數據並相應地更改cx/cy以提供視覺效果。 (糾正我,如果我不明白你想要做什麼正確):) – mkaran
你是對的。這正是我想知道的。事情是以前當我嘗試初始化數據一次,並循環可視化它不工作。這正是我在每次迭代中初始化數據的原因。我認爲這就是爲什麼可視化消耗更多內存的原因?那我該怎麼做。我的意思是初始化數據一次併爲CSV文件中的每個元素迭代? – Kalana