rowstate 핸들러의 지연을 줄일 수 있는 방법이 있습니까?마우스를 올려놓을 때나 선택 이벤트가 완료된 후에만 rowstate 핸들러를 실행할 수 있습니까?
실시간 이벤트로 인해 내 그래프에서 드래그 선택이 지연되고 사용자 경험이 불쾌해집니다.
쥐덫에서 선택 이벤트를 완전히 다시 작성하기까지 했지만 히스토그램에 적용하는 데 문제가 있으며 성능도 마음에 들지 않습니다.
선택 상자의 "화살표(A)" 도구를 쥐덫 기능과 동시에 사용할 수 있으면 백만 개를 발사하는 대신 쥐덫 이벤트가 끝날 때 선택한 행을 간단히 선택할 수 있다면 내 요구 사항을 충족할 것입니다. 마우스를 드래그하는 동안 이벤트.
내가 싫어하는 것:
선택하는 동안 마우스를 더 오래 아래로 이동할수록 쓸데없는 그래픽 스크립트가 그래프에 점점 더 많이 쌓입니다.
딱 하나만 갖고 싶습니다. 마지막에 루프를 추가하여 그래프에서 모두 죽여서 "사라지는" 것처럼 보입니다.
그냥 그대로 둘 수는 있지만 그래프에 시각적 노이즈를 추가하고 너무 많이 가져오면 어떻게 되는지 모르겠습니다.
편집: 너무 많이 얻으면 지연되기 시작합니다. 남은 그래픽 스크립트를 제거하기 위해 반복하는 것보다 그래프를 파괴하고 재구성하는 것이 더 빠를 수 있습니다. 편집 2: 그래프를 파괴하고 다시 생성하는 것이 훨씬 빠르지만 확대/축소가 재설정되므로 그래프를 다시 빌드하여 사용자에게 새로 고침을 숨길 수 있도록 그래프 상태에 대해 더 많이 캡처해야 합니다.
Shift/control 클릭이 작동하도록 했습니다. 프로덕션에 너무 해킹된 느낌이 듭니다. 특히 컨트롤 클릭은 mouseup 후 이렇게 긴 지연 시간이 있고 선택 상자는 이미 버튼에서 손을 뗀 경우에도 마우스를 쫓습니다. 제 생각에는 jmp가 움직임을 멈추기 전에 많은 부실한 드래그 이벤트를 처리하고 있다고 생각합니다.
또는 이 모든 모험을 버리고 마우스를 위로 올릴 때 실행되는 행 상태 처리기를 갖는 방법을 찾으십시오(이상적일 것임).
코드를 빌린 예:
http://www.pega-analytics.co.uk/blog/segmented-regression/
https://community.jmp.com/t5/Discussions/Quick-way-to-compare-two-lists-and-identify-the-uncommon/td-p/5811
Names Default To Here(1);
dt = open("$sample_data\Iris.jmp");
MY_GRAPH_BUILDER = Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch({},"Graph Builder",
FrameBox,
{Add Graphics Script(MouseTrap( MouseDown(x,y), MouseUp(x,y)))}
),
),
);
//MOUSE STUFF
get_box_dims = Function({firstX,lastX,firstY,lastY},
show("get_box_dims");
//show(firstX,lastX,firstY,lastY,modifier_key);
If (lastX>firstX,
max_x = lastX; min_x =firstX,
max_x = firstX;min_x =lastX,
);
If (lastY>firstY,
max_y = lastY; min_y =firstY,
max_y = firstY;min_y =lastY,
);
show(min_x,min_y,max_x,max_y);
evallist({min_x,max_x,min_y,max_y});
);
do_normal_select = Function({select_range},
show("normal_select");
dt << Select Where(
AsColumn(:Sepal length) >= select_range[1]
& AsColumn(:Sepal length) <= select_range[2]
& AsColumn(:Sepal width) >= select_range[3]
& AsColumn(:Sepal width) <= select_range[4]
);
);
do_shift_select = Function({select_range},
show("shift_select");
new_rows_to_add = as list(dt << Get Rows Where(
AsColumn(:Sepal length) >= select_range[1]
& AsColumn(:Sepal length) <= select_range[2]
& AsColumn(:Sepal width) >= select_range[3]
& AsColumn(:Sepal width) <= select_range[4]
)
);
if (length(new_rows_to_add) > 0,
curr_rows = as list(dt << Get Selected Rows);
rows_to_select = curr_rows || new_rows_to_add;
dt << Select Rows( rows_to_select);
);
show(new_rows_to_add,length(new_rows_to_add));
);
do_ctrl_select = Function({select_range},
show("ctrl_select");
new_rows_to_subtract = associativearray(as list(dt << Get Rows Where(
AsColumn(:Sepal length) >= select_range[1]
& AsColumn(:Sepal length) <= select_range[2]
& AsColumn(:Sepal width) >= select_range[3]
& AsColumn(:Sepal width) <= select_range[4]
)
));
if (length(new_rows_to_subtract) > 0,
curr_rows = associativearray(as list(dt << Get Selected Rows));
show("current_rows_selected",length(curr_rows));
show("number_rows_to_subtract",length(new_rows_to_subtract));
intersection=curr_rows;intersection<<INTERSECT></INTERSECT>
데이터 혼합 및 정리품질 및 프로세스 엔지니어링윈도우Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?나는 이것이 어디에서나 잘 문서화되어 있는지 의심합니다 ... @Audrey_Shull
비슷한 동작을 하는 MouseTrap 및 Handle 함수는 Rect() 및 기타 함수와 같이 인라인으로 실행되지 않습니다. 정상 Rect()와 같은 그래픽 스크립트 기능.
그래픽 스크립트의 제어 흐름이 Handle() 또는 MouseTrap()을 통과할 때 함수는 MouseTrap의 경우 아무 작업도 수행하지 않거나 Handle의 핸들 위치에 작은 사각형을 그립니다. 그래픽 스크립트가 포함된 그래프를 클릭하면 JMP는 스크립트에서 MouseTrap 또는 Handle 함수를 살펴보고 그 중 하나가 나올 때까지 순서대로 호출합니다. 소요 요점.
따라서 귀하의 예에서 클릭할 때까지 x0을 설정하는 코드는 실행되지 않았습니다. 그러나 Rect 코드가 실행됩니다.
시도하지 않고 여러 개의 Handles() 다음에 MouseTrap()이 있을 수 있으며 JMP는 클릭 지점을 가져와 각 Handle() 중 하나가 가져갈 때까지 각 Handle()에 전달하거나 MouseTrap()이 항상 가져 가라.
Rect()는 for 루프에서 많은 사각형을 그리는 데 사용할 수 있습니다. Handle(...) 루프에 넣어 여러 핸들을 만들 수 없습니다. 가변 개수의 핸들을 만들어야 하는 경우 MouseTrap() 및 x,y 위치 목록을 사용하여 검색하거나 특정 형태의 표현식 조작을 사용하여 여러 Handle() 호출을 작성할 수 있습니다.
이것은 또한 MouseTrap/Handle이 그래픽 스크립트가 호출하는 사용자 함수가 아니라 그래픽 스크립트에 있어야 함을 의미합니다. 반면 Rect는 그래픽 스크립트에서 호출되는 사용자 함수에 있을 수 있습니다.
그래픽 스크립트에 두 개의 MouseTrap을 넣으면 첫 번째가 항상 클릭을 수락하기 때문에 두 번째는 도달할 수 없다고 생각합니다.
New Window( "Example",
exx = 20,
exy = 50;
Graph Box(
Frame Size( 200, 200 ),
If( 0, // note that it still works
Mousetrap(
exx = x;
exy = y;
)
);
Circle( {0, 0}, Sqrt( exx * exx + exy * exy ) );
);
);Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?이것은 큰 개선을 가져왔습니다. 감사해요!
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?이것을 시도했지만 점점.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(529, 457),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3)))
);
fb = Report(gb)[FrameBox(1)];
i = 0;
fb << Add Graphics Script(
Mousetrap(
If(i == 0,
x0 = x; y0 = y;
);
exx = x; exy = y;
i++;
,
i = 0;
show("RELEASED");
);
Rect(x0, y0, exx, exy);
);
이름 미확인: 'x0' , x0/*###*/의 액세스 또는 평가에서 x0
스크립트 2.jsl의 24행
저는 mousetrap()에 익숙하지 않습니다. 기능, 2x 내부 기능이 필요하지 않습니까?
MouseTrap( MouseDown(x,y), MouseUp(x,y)));
포인트를 2x 목록으로 스트리밍한 다음 해당 목록에서 첫 번째와 마지막을 선택하는 데서 많은 지연이 발생한다고 생각하기 때문에 이것을 파악하고 싶습니다.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?나는 그냥 버튼을 사용할 것이지만(내가 한 일이다) 아마도 MouseTrap(또는 MouseBox?)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(529, 457),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3)))
);
fb = Report(gb)[FrameBox(1)];
i = 0;
fb << Add Graphics Script(
Mousetrap(
If(i == 0,
x0 = x; y0 = y;
);
exx = x; exy = y;
i++;
,
i = 0;
show("RELEASED");
);
Rect(x0, y0, exx, exy);
);Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?매우 느리다.
jmp 선택을 기반으로 실시간 실시간 대시보드를 생성하기 위해 JSL에서 websertver로 http 요청을 스트리밍하려고 합니다. 행 상태 처리기로 할 수 있다고 생각했지만 너무 느려서 사용자 경험을 죽입니다. 500포인트 이상을 퍼 올리면 성능이 급락합니다.
지금 내가 가지고 있는 것은 그래프에서 선택하고 버튼을 클릭한 다음 http 보고서가 렌더링되는 것입니다.
그 버튼 클릭을 없애고 싶습니다.
그래서 제가 지금 하려고 하는 것은 마우스를 올리면 대시보드를 생성하기 위해 http 서버에 데이터 배치를 보내는 것입니다. 자바스크립트 이벤트처럼요.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?여러 스크립트의 경우 단일 스크립트에서 모든 작업을 수행하고 firstX에서 누락된 값을 사용하여 끌 수 있습니다. 다음은 두 번째 스크립트의 사본 하나만 추가하거나 추가하지 않는 경우 그래프를 새로 고치고 완료되면 논리를 사용하여 제거하는 q&d 핵입니다.
MouseDown = Function( {px, py},
Insert Into( lstX, pX );
Insert Into( lstY, pY );
firstX = lstX[1];
lastX = lstX[N Items( lstX )];
firstY = lstY[1];
lastY = lstY[N Items( lstY )];
// quick and dirty hack to only add the script once
If( N Items( ((Report( MY_GRAPH_BUILDER )[FrameBox( 1 )]) << XPath( "//TopSeg" )) << get script ) < 2,
(Report( MY_GRAPH_BUILDER )[FrameBox( 1 )]) << Add Graphics Script(
Line Style( "solid" );
Fill Color( "BlueGreen" );
Transparency( 0.3 );
Rect( firstX, firstY, lastX, lastY, 1 );
);
, // ELSE make sure to redraw using new values (might work without this)
(Report( MY_GRAPH_BUILDER )[FrameBox( 1 )]) << inval << updatewindow;
);
);
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?단순화 어디를 선택 최대한 많이 표현합니다. 150행에 대해서는 지연이 보이지 않지만 100K 행에 대해서는 상당히 나쁩니다. 이렇게 하면 10배 향상됩니다.
do_normal_select = Function( {select_range},
{start, stop, sr1, sr2, sr3, sr4},
//show("normal_select");
start = HP Time();
sr1 = select_range[1];
sr2 = select_range[2];
sr3 = select_range[3];
sr4 = select_range[4];
dt << Select Where( sr1 <= :Sepal length <= sr2 & sr3 <= :Sepal width <= sr4 );
// dt << Select Where(
// AsColumn(:Sepal length) >= select_range[1]
// & AsColumn(:Sepal length) <= select_range[2]
// & AsColumn(:Sepal width) >= select_range[3]
// & AsColumn(:Sepal width) <= select_range[4]
// );
stop = HP Time();
Write( Eval Insert( "\!nselect where ^stop-start^" ) );
);
AsColumn 제거, 암시적 루프에서 첨자 해제, 비교 연산자 연결의 세 가지 변경 사항이 있습니다.
@Audrey_Shull - 프로파일러가 이 작업을 수행했으면 합니다. 창이 열리기 전에 프로파일러가 중지되므로 대화형 선택에 소요된 시간을 연구할 수 없습니다.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?Graph Builder 프레임 상자를 드래그하여 무엇을 하려고 합니까? 행을 선택한 다음 응답하려면 데이터 테이블과 연결된 행 상태 처리기로 충분해야 합니다.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?지문을 삭제하면 속도가 빨라지고 데이터 테이블을 숨기는 것도 약간 도움이 될 수 있습니다. 또한 두 이벤트 사이에 "실제" 변경 사항이 있는지 확인하는 것이 도움이 될 수 있지만 응용 프로그램에 따라 확인하기 어려울 수 있습니다.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?예, 그들은 항상 사용하기 어려웠습니다.
실시간 응답을 받으려면 무언가가 필요합니다. 행 상태 처리기가 콘솔에 쓰기를 시도했기 때문에 지연되고 다른 작업에 더 빠를 수 있기를 바랍니다.
선택 기준을 재작성하면 내 분산형 차트에 대해 충분히 잘 작동하지만 일종의 버벅거림이 있지만 내 분포 히스토그램은 마음에 들지 않는 것 같습니다.
Re: rowstate 핸들러의 지연을 줄일 수 있는 방법이 있나요?다른 상태 핸들러는 JMP에서 난잡하므로 가능하면 피해야 한다고 생각합니다. 개선할 위시리스트 항목을 만들었습니다. JMP의 상태 핸들러(호버 레이블, 행 상태 핸들러, 필터 상태 핸들러, 스케줄러 등) 개선