1. PHP 개발에는 1700개 이상의 xml 파일 데이터를 읽어서 데이터베이스에 저장해야 합니다. 내 방법은 프런트 엔드에서 js 함수 재귀를 사용하고 AJAX를 통해 한 번에 하나씩 제출하는 것입니다. 현재 문제는 js의 재귀 함수가 500번 정도 실행되고, 브라우저가 스택 오버플로 오류를 보고하고 실행을 중지한다는 것입니다.
2. 프론트엔드 재귀 함수:
update_hotelInfo_queue(data,i)
<code> { if(i==(data.length-1)) { return; } $("#processInfo").html("正在处理第"+(i+1)+"个城市数据<br>"); var url="__CONTROLLER__/updateHotelInfo"; var cityID=data[i]; console.log(i+"==>"+cityID); $.ajax({ url:url, cache:false, async:false, dataType:"json", type:"POST", data:{cityID:cityID}, success:function() { update_hotelInfo_queue(data,i+1) } }) } </code>
3. 브라우저가 현재 재귀를 무한 루프로 판단하여 발생하는 오류인가요?
4. 보충 오류 정보
JS초보자 조언 부탁드려요~~
1. PHP 개발에는 1700개 이상의 xml 파일 데이터를 읽어서 데이터베이스에 저장해야 합니다. 내 방법은 프런트 엔드에서 js 함수 재귀를 사용하고 AJAX를 통해 한 번에 하나씩 제출하는 것입니다. 현재 문제는 js의 재귀 함수가 500번 정도 실행되고, 브라우저가 스택 오버플로 오류를 보고하고 실행을 중지한다는 것입니다.
2. 프론트엔드 재귀 함수:
update_hotelInfo_queue(data,i)
<code> { if(i==(data.length-1)) { return; } $("#processInfo").html("正在处理第"+(i+1)+"个城市数据<br>"); var url="__CONTROLLER__/updateHotelInfo"; var cityID=data[i]; console.log(i+"==>"+cityID); $.ajax({ url:url, cache:false, async:false, dataType:"json", type:"POST", data:{cityID:cityID}, success:function() { update_hotelInfo_queue(data,i+1) } }) } </code>
3. 브라우저가 현재 재귀를 무한 루프로 판단하여 발생하는 오류인가요?
4. 보충 오류 정보
JS초보자 조언 부탁드려요~~
"테일콜 최적화" http://www.ruanyifeng.com/blo...
재귀 함수의 장점은 코드를 간결하게 만들고 더 적은 코드로 더 많은 일을 할 수 있다는 점입니다.
그러나 한 가지 큰 단점은 함수가 호출될 때마다 进栈
이라고 하는 메모리의 일부가 소비된다는 것을 알고 있습니다. >.出栈
따라서 오류 보고는 타당합니다. 스택 오버플로는 스택 오버플로로 해석됩니다.
해결 방법은 간단합니다. 루프를 사용하는 것이 좋습니다. 그러면 루프가 실행될 때마다 누구에게도 의존하지 않고 메모리가 자동으로 해제됩니다.
재귀 꼬리 호출을 구현하기 위해 재귀 알고리즘을 조정
재귀가 전혀 필요하지 않습니다. 루프를 사용하세요. 꼬리 재귀는 js에 쓸모가 없으며 최적화되지 않은 것 같습니다.
Ajax의 종속성 콜백은 promise-deferd를 사용해야 하는데, 데이터가 1,700개가 넘습니다. 이 방법을 사용하시겠습니까?
재귀라는 이전 방법을 사용하는 경우 일괄적으로 수행할 수 있는지 확인하세요.
루프를 사용할 수 있는 곳에 재귀를 사용하지 마세요. 재귀는 하노이탑과 같은 문제를 해결하기 위해 루프 알고리즘을 사용하는 경우를 해결하는 데 사용됩니다. 재귀의 가격은 stackoverflow입니다.