最近在使用 jQuery Circle 插件時,發現了卡頓現象。經過分析,發現是插件代碼的問題。
// 代碼片段一 function drawArcs() { var endangle = 0; var endcolor = 0; for (var i = 0; i< complete.length; i++) { endangle = startangle + (complete[i] / 100) * (Math.PI * 2); ctx.beginPath(); ctx.strokeStyle = (colors[i]) ? colors[i] : defaultcolor; ctx.arc(centerx, centery, radius, startangle, endangle, false); ctx.stroke(); startangle = endangle; } }
在代碼片段中,每次循環都會重新生成一個路徑,并繪制弧形。這樣即使是繪制相同的弧形,也會重復創建路徑、執行繪制動作,導致性能損失。
// 代碼片段二 function drawArcs() { var endangle = 0; var endcolor = 0; ctx.beginPath(); for (var i = 0; i< complete.length; i++) { endangle = startangle + (complete[i] / 100) * (Math.PI * 2); ctx.strokeStyle = (colors[i]) ? colors[i] : defaultcolor; ctx.arc(centerx, centery, radius, startangle, endangle, false); startangle = endangle; } ctx.stroke(); }
修改后的代碼片段,使用 beginPath() 只創建一次路徑,并在最后一次循環后執行 stroke() 動作,降低了 CPU 負載,提高了性能。
因此,在使用 jQuery Circle 插件時,建議修改代碼,避免卡頓問題的出現。
上一篇半圓形css3