계산 작업이 많은 작업의 경우 각도 응용 프로그램에 패턴이 있습니까? (단지 $ 지연 시간을 0으로 설정하여 호출 스택에서 빠져 나갈 수 있습니다.) $ timeout을 사용하더라도 처리 자체가 시작될 때 UI가 응답하지 않는 것처럼 보입니다. 웹 워커 (Web Workers) 또는 그와 비슷한 것을보아야합니까? 그것, 또는 거기에 "각도 방법?"AngularJS - 계산 무거운 작업
2
A
답변
2
JavaScript가 단일 스레드이기 때문에 계산을 서버 측에서 수행하거나 처리 사이에 시간 초과를 수행해야합니다 (밑줄 defer()
, http://underscorejs.org/#defer 참조). 그렇지 않으면 UI가 필연적으로 차단됩니다.
2
루프를 통과 할 때마다 각도 $timeout
을 사용하는 특수 루프 함수를 만들어 UI 응답 성 문제를 해결할 수있는 방법을 찾았습니다.
app.service('responsivenessService', function($q, $timeout) {
var self = this;
// Works like Underscore's map() except it uses setTimeout between each loop iteration
// to try to keep the UI as responsive as possible
self.responsiveMap = function(collection, evalFn)
{
var deferred = $q.defer();
// Closures to track the resulting collection as it's built and the iteration index
var resultCollection = [], index = 0;
function enQueueNext() {
$timeout(function() {
// Process the element at "index"
resultCollection.push(evalFn(collection[index]));
index++;
if (index < collection.length)
enQueueNext();
else
{
// We're done; resolve the promise
deferred.resolve(resultCollection);
}
}, 0);
}
// Start off the process
enQueueNext();
return deferred.promise;
}
return self;
});
이 매핑 함수는 $scope
에 할당 할 수있는 약속을 반환합니다. 사용법은 새로운 브라우저에서 밑줄 또는 기본 자바 스크립트 배열에서 map()
기능과 유사합니다 원래 (전체 UI 이제 백그라운드에서 실행 표시를 차단 한 것
$scope.results = responsivenessService.responsiveMap(initialdata, function() {
// Long-running or computationally intense code here
return result;
});
코드는 응용 프로그램을 호출 같은 환상은의 본질적 있지만, . 이전 응용 프로그램에서 주기적으로 .DoEvents). 장시간 실행되는 코드가 루핑 map() 스타일 연산에 도움이되는 한 멋지고 일반적인 코드입니다.
관련 문제
- 1. Django에서 무거운 계산
- 2. mysql에서 무거운 계산
- 3. PHP 백그라운드에서 무거운 작업
- 4. 무거운 CRON 작업
- 5. 별도의 스레드에서 신발과 무거운 작업
- 6. 기존 jQuery 무거운 응용 프로그램에 AngularJS 뿌리기
- 7. 계산 상 무거운 프로그램을위한 GUI 인터페이스
- 8. 무거운 js 계산 중 CSS 애니메이션
- 9. AngularJS 서식있는 숫자 계산
- 10. angularjs 수학 계산
- 11. angularjs 오브젝트 길이 계산
- 12. 카산드라는 무거운 인서트 작업 부하에서 연결을 재설정합니다.
- 13. 무거운 MySQL 작업 및 시간 제한
- 14. Node.js 무거운 CPU 바운드 작업 이동
- 15. AngularJS 및 비동기 작업
- 16. promise로 작업 - angularjs
- 17. angularjs ng-grid 계산 열
- 18. AngularJS - 지시문의 반환 값 계산
- 19. 계산 작업 (X, X)
- 20. MySQL 논리 계산 작업
- 21. 완료된 작업 비율 계산
- 22. 크론 작업 계산
- 23. 레일 : 계산 값 작업
- 24. 배열로 계산 변경 작업
- 25. 중첩 된 계산 작업
- 26. 무거운 하중에 대한 노출 수/클릭 수 계산
- 27. Python에서 병렬로 공유 데이터에 대한 무거운 계산 수행
- 28. 무거운 계산 함수가 루프의 조건부에있는 경우 런타임에 차이가 있습니까?
- 29. 안드로이드에서 그 외에 무엇이 무거운 작업으로 간주됩니까?
- 30. AngularJS $ 리소스 업데이트/PUT 작업?
각도가 없습니다. 웹 작업자를 지원하는 브라우저 만 타겟팅하는 경우에는 옵션이지만 도움이되는 각도는 없습니다. –
감사합니다. 루프를 통해 매번 각도 $ 타임 아웃을 사용하는 특수 루프 함수를 만들어 UI 응답 성 문제를 해결하는 방법을 생각해 냈습니다. – blaster