그것은 예외적으로 훌륭하다 JMP가 프레임 상자에 샘플 앤 홀드 유형의 디스플레이를 허용하는 경우.특히, 크기 조정 이벤트, 행 상태 변경(테이블의 행 상태에 연결된 마커 세그먼트의 경우) 또는 <<
내가보고 싶은 것은 아래 예제 스크립트가 두 번 이상 숫자를 인쇄하지 않는 것입니다. 스크롤하는 동안 -- 초기 렌더 중 그리고 그게 전부입니다(있는 경우 마커 세그먼트에도 적용됨).
그 주된 이유는 수백만 개의 데이터 포인트가 있는 많은 그래프를 그리는 경우 초기 렌더링(예상됨)을 위해 몇 초를 기다리는 데 신경 쓰지 않지만 모든 스크롤 이벤트에 몇 초의 렌더링이 필요하다는 것은 받아들일 수 없기 때문입니다. -- 한 번만 렌더링하고 스크롤할 때 다른 위치에 비트맵을 다시 그립니다.
참고: 개발자가 램에 비트맵을 보유하는 데 따른 메모리 소비에 대해 걱정하는 경우 -- 걱정하지 마십시오.사용자가 상자를 설정할 때 걱정하도록 하십시오.예를 들어, 렌더링할 1,000,000,000 x 1,000,000,000픽셀의 플롯을 만들려고 하면 시도하고 JMP가 충돌하도록 합니다.어리석은 상황에서 JMP가 충돌할 수 있다는 이유만으로 필요한 기능을 갖추지 못하게 해서는 안 됩니다.옵트인만 허용합니다(즉, <
다시 말하지만 FrameBox에 페인트된 비트맵을 현재 상태로 유지하고 더 이상 사용하지 않도록 가능한 절대 최소 수의 렌더를 수행하는 메서드(예: <
다음은 현재 잘못된 동작의 예입니다. 각 스크롤 이벤트에서 렌더링 패스가 발생함을 나타내는 숫자가 여러 번 인쇄됩니다.
Names Default to Here( 1 );
New Window( "Test",
V Scroll Box(
vlb = V List Box()
)
);
For( i = 1, i <= 100, i++,
Eval( Eval Expr(
vlb << Append(
Graph Box(
X Scale( 0, 1 ),
Y Scale( 0, 1 ),
Pen Color( "Blue" );
Line( [1 0], [0 1] );
Print( Expr( i ) )
)
)
) )
)
다음은 이 "re-render-at-every-scroll-event" / "가능한 모든 기회에 다시 렌더링"과 관련된 허용되지 않는 대기 시간의 예입니다(여기를 스크롤해 보세요...)
Names Default to Here( 1 );
ns = New Namespace();
ns:table = New Table( "TEST",
New Column( "X", "Numeric", <<FORMULA></FORMULA>