javascript에 appendchild 행이있는 Chrome에서 속도 문제가 있습니다. 이것은 파이어 폭스와 크롬에서 잘 돌아가고있는 것처럼 보이지만 크롬은 매우 느리지 않습니다. 버튼 클릭에 하나의 요소 만 추가하려고합니다. 페이지에는 이미 10,000 개가 넘는 요소가 있지만 문제의 일부인지 확실하지 않습니다.크롬에 appendChild 성능 문제가 발생했습니다.
내가 살펴 봤던 것들을 그냥 지나치는 것. 나는 documentfragment를 찾아보고 구현하려고 시도했지만 동일한 결과를 얻고있었습니다. 그리고 내가 모은 것에서 documentfragment는 대개 DOM에 많은 요소를 추가 할 때 성능을 향상시킵니다. (이 가정에 내가 틀렸다면 나를 바로 잡으십시오.) 또한 Chrome에서 타임 라인을 실행하여 '레이아웃'이 11.91 초를로드하고 appendchild 행에 걸려있는 것으로 나타났습니다. 나는 그 문제의 라인을 다음과 같이 주석 처리했다.
이전에 언급했듯이 개선이없는 documentfragment를 시도 했으므로 이것이 원래 코드입니다.
function addYr() {
divArray = document.getElementById('acct_sect').getElementsByTagName("div");
divRow = document.createElement("div");
divRow.id = "acct_row_" + (divArray.length);
var yr = document.createElement("input");
yr.type= "text";
yr.id= "yr_" + divArray.length;
yr.name= "yr_" + divArray.length;
yr.setAttribute("onkeydown", "TabNext(this,'down',2); return justNums(event);");
yr.setAttribute("onkeyup", "TabNext(this,'up',2,this.form.fnd_)");
yr.maxLength = 2;
yr.className = "c1";
yr.setAttribute("onchange", "buildAccountMultiRow(this)");
yr.value = "";
divRow.appendChild(yr);
//line that is taking a while
document.getElementById('acct_sect').appendChild(divRow);
}
그것은 아마도 훨씬 빠른 것입니다 ..) 모든 요소에 동일한 기능을 사용하는 것이 더 낫습니다. –
@dystoy, 귀하의 의견에 감사드립니다. 나는 이것을 시도 할 것이다. 이것은 아마 내 멍청한 독해력이지만, "모든 요소에 동일한 기능을 사용하라"는 말은 무엇을 의미합니까? – chuckw87
당신의 문자열이 같음을 의미합니다. 그래서 단순히 루프 밖에서 함수를 정의하면됩니다. function myFunction() {TabNext (this, 'down', 2); return justNums (event)}'를 추가하고 추가 할 때'yr.onkeydown = myFunction'을 수행하십시오. –