2013-09-06 1 views
0

672 개 요소의 로컬 웹 페이지에서 서버로 다시 가져 오는 배열을 게시하려고합니다. 이를 위해 나는이 같은 자바 스크립트, 쉼표의로 구분, 문자열에 넣어 :JavaScript의 문자열 concat에 대한 성능이 좋지 않습니까?

alert("begin"); 
    var sBsbData="" 
    for (var x=0;x<24*4*7;x++) 
     sBsbData = sBsbData + BsbData[x] + ','; 

    alert(sBsbData); 

BsbData가 INT의 배열이다; 값은 10을 초과하지 않습니다.

이것은 눈 깜짝 할 사이에 프로세서에 의해 처리되는 코드입니다. 그러나 두 개의 경고 사이에는 약 10 초가 걸립니다! 나는 여기서 무엇을 잘못하고 있니? 이 목적을 위해 특별히 잘못된 연결 방법을 선택 했습니까?

+1

당신이'BsbData.join (',') '사용하지 않는 특별한 이유가를 사용해야합니까? 그러나 그것과는 별도로 루프는 측정 가능한 시간을 소비하지 않는 것 같습니다 : http://jsfiddle.net/AUCWS/. –

+0

왜'var sBsbData = BsbData.join (',');'을 사용하지 않는 것이 좋을까요? – h2ooooooo

+0

배열을 문자열로 직렬화하려고 시도 했습니까? 'var sBsbData = BsbData.toString()'을 쓰면 형식이 동일하게됩니다 (쉼표로 구분 된 값). –

답변

3

천천히 - alert입니다. (다소 이상한 이유로) 생성되는 데 다소 시간이 걸립니다. 개념의

증명 : 말했다

var BsbData = []; 
for (var i = 0; i < 24 * 4 * 7; i++) { 
    BsbData[i] = Math.round(Math.random() * 10); 
} 

console.log("begin"); 
alert("begin"); 

var sBsbData="" 
for (var x=0;x<24*4*7;x++) 
    sBsbData = sBsbData + BsbData[x] + ','; 

console.log(sBsbData); 
// !!! This is where the code will halt for a bit (the string has already been created) !!! 
alert(sBsbData); 

- 당신은 그냥 var sBsbData = BsbData.join(',');

+0

','join()에','를 건네 주면 배열에서'toString()'을 호출하는 것과 똑같은 결과를 얻고 실제로 더 느릴 수 있습니다. –

+0

@ FrédéricHamidi JS 표준은'toString'을 호출 할 때 배열을 반환하는 방법을 지정합니까, 아니면 다른 브라우저에서 다른 결과를 낼 수 있습니까? (예 : Chrome의 '1,2,3', IE의 '1, 2, 3') – h2ooooooo

+0

이것은 사양의 일부이므로 브라우저간에 일관된 결과가 나타납니다. 나는 링크를 찾으려고 노력할 것이다. –

관련 문제