2016-08-08 4 views
0

다음과 같은 상황이 있습니다 : 저는 86 개의 차트 (ChartsJS)를 3 가지 범주로 나누었습니다. JQueryUI 탭을 사용하여 각 탭을 개별 탭에 표시합니다. 문제는 페이지에 삽입 된 자바 스크립트가 많아 페이지로드 시간이 JS 구문 분석 및 실행 시간이 (Google 크롬을 사용하여 측정 된) 5.2 초를 넘는 7 초를 초과한다는 것입니다.게으른 평가 및 자바 스크립트를 실행하는 방법?

아직 사용자에게 표시되지 않은 요소 (현재 열려있는 탭이 아님)를 렌더링하는 자바 스크립트 부분을 게으른 것으로 평가하는 방법이 있는지 궁금합니다. 주의 할 점은, 탭 변경시 주어진 스크립트를 실행하는 것 (명백하고 쉽게 할 수 있음)뿐만 아니라 페이지로드 후 특정 시점에 필요한 스크립트를 평가하는 것입니다.

편집 : 내 JS 이 동적으로 생성되었음을 명확히해야합니다. 파일에서 asyncload가 옵션이 아닙니다. 내 편이 설계상의 결함 일 수 있습니다. 여기

크롬에서 타임 라인이다 함수가 호출 될 때까지 함수 정의 enter image description here

+0

탭 플러그인에는 연결할 수있는 이벤트가 있습니다. 따라서 현재 표시된 차트를 알 수 있고 그 차트 만로드 할 수 있습니다. –

+0

@RoryMcCrossan 이것이 사실이며이 이벤트를 처리하는 것이 문제가되지 않습니다. 문제는 js를 평가 (처음로드)하고 파일로드를 사용하지 않고 즉석에서 실행하는 방법입니다. – Antoniossss

+0

어떻게 문제가 될지 모르겠다. DOM에 추가 된 후에 AJAX 요청의 콜백을 사용하여 차트를 초기화하십시오. –

답변

0

아무것도 실행하지 않는다. 따라서 탭에있는 특정 코드를 함수에 랩핑하고 해당 탭을 열 때마다 해당 코드를 호출 할 수 있습니다.

는 는 는

그러므로 자바 스크립트의

//Global Configs 
Chart.defaults.global.hover.mode = 'single'; 

function onTabOne() { 
    var myChart = new Chart(SELECTOR, {...}) 
} 
function onTabTwo() { 
    var pieChart = new Chart(SELECTOR, {...}) 
} 

참고 활성 선택기에 새 차트를 호출 평가는

var myChart = new Chart(SELECTOR, {...}) 
: chartjs에 차트를 실행하기 위해

는 다음과 같은 작성해야 슈퍼 빠른 및 기계에 무거운되지 않습니다, 기본적으로 게양 및 변수에 대한 메모리 할당, 당신은 게으른 평가에 대해 걱정하지 않아야하고 직접적인 방법이 없습니다. 실행은 무거운 작업이 이루어지는 곳이며, 함수 정의에서 물건을 래핑하여 실행을 지연시킬 수 있습니다.

코드를 평가하고 실행할 때마다 자바 스크립트를 문자열에 넣고 eval과 같이 게으른 평가를하는 해킹 방법이 있지만 eval을 전혀 사용하지 않는 것이 좋습니다. 이고 실제 필요가 없습니다.

+0

물론, 작성한 코드는 파싱됩니다. JS가 많이 있기 때문에 구문 분석 자체에는 2.6 초가 걸립니다. 나는 그것을 피하고 싶습니다. – Antoniossss

+0

흠, 그러면 "게으른 구문 분석"을하는 대신 코드를 최적화해야한다고 생각합니다. 동적으로 생성 된 것은 무엇입니까? Chrome은 다운로드가 시작되자 마자 별도의 스레드에서 비동기 및 지연된 스크립트를 구문 분석합니다. 즉, 다운로드가 완료된 후 구문 분석을 완료하는 데 단지 몇 밀리 초가 걸리므로 결과 페이지를 10 % 빠르게로드 할 수 있습니다. – Bamieh

관련 문제