스크립트 프로파일러

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

스크립트 프로파일러 는 모든 실행 스크립트의 프로파일링 세션을 기록하고 사용자 지정 레코딩 및 표시 설정으로 CPU 비용을 확인할 수 있는 개발자 콘솔 내의 도구입니다.Luau 함수, 메서드 호출 및 속성 액세스를 포함하여 모든 종류의 함수 호출을 기록할 수 있습니다.이 도구는 가장 많은 CPU 리소스를 사용하고 이행늦추는 스크립트를 식별하는 데 유용합니다.

프로파일링 세션 기록

녹화하기 전에 다음에서 녹화 환경을 선택해야 합니다:

  • 클라이언트 (기본) — LocalScriptsScripts 를 포함하여 클라이언트 측 스크립트를 기록합니다. RunContextClient 설정되어 있습니다.
  • 서버 — 서버 사이드 스크립트를 기록하며, ScriptsRunContext 으로, Server 또는 Legacy 으로 설정합니다.스크립트 프로파일러는 각 세션이 끝날 때 수집된 모든 서버 측 데이터를 지우습니다.

다음 레코딩 옵션도 설정할 수 있습니다:

동작옵션기본설명
주기초당 1000회(1KHz)10,000회(10KHz)1KHz10kHz 주파수는 스크립트 프로파일러가 선택한 주파수보다 더 자주 실행되는 API 호출을 픽업하지 않을 수 있지만 성능 비용이 더 높습니다.
세션 길이1분5분10분 매뉴얼매뉴얼매뉴얼 옵션에서는 수동으로 녹음을 중지해야 합니다.
라이브 조사 행동온오프끄기이 동작은 프로파일링 세션 중에 매초마다 프로파일링 데이터를 조사하고 새로 고칩니다.

새로운 프로파일링 세션을 기록하려면:

  1. 도구 드롭다운을 확장하여 스크립트 프로파일러 를 선택합니다.

    Dropdown menu of all Developer Console tools with the ScriptProfiler option highlighted for selection.
  2. 클라이언트-서버 드롭다운을 확장하여 클라이언트 또는 서버 를 선택합니다.

    Dropdown menu with Client and Server options for selection.
  3. (옵션) 라이브 확인란을 선택하여 라이브 조사 동작을 활성화합니다.

  4. (옵션) 빈도시간 을 선택하여 기본 값을 사용하지 않고 레코딩 빈도와 세션 시간 길이를 선택합니다.

  5. 클릭 시작 으로 프로파일링 세션을 시작하십시오.기간을 설정하면 스크립트 프로파일러에서 세션의 남은 시간으로 카운트다운 타이머를 표시합니다.

  6. 클릭 중지 또는 레코딩이 완료될 때까지 기다려 프로파일링 데이터를 표시하십시오.

프로파일링 데이터 읽기

세션이 중지되면 스크립트 프로파일러가 CPU 시간에 각 함수 호출이 얼마나 비용이 들지 보여주는 테이블을 생성합니다.테이블 정렬 함수는 가장 많이 소비된 시간부터 가장 적게 소비된 시간까지 순서를 정렬하고 이름으로 특정 함수를 검색할 수 있도록 합니다.다음 두 뷰를 제공합니다:

  • 콜그래프 (기본): 프레임 태스크에 따라 함수 호출을 트리 구조로 분류하고 표시합니다.이 보기는 각 작업 범주를 동일한 루트의 노드로 표시하고 함수를 보기 위해 확장할 수 있습니다.트리의 모든 노드를 가리키고 파일 및 줄 정보를 볼 수도 있습니다.예를 들어, 단계/카메라입력/<anonymous>Players.[LocalPlayer].PlayerScripts.PlayerModule.CameraModule.CameraInput:125 을 드러낼 수 있습니다. Example callgraph view of a profiling session.
  • 기능 : 작업에 따라 분류하지 않고 모든 기능을 나열합니다. Example functions view of a profiling session.

디버깅 요구 사항을 조정하기 위해 다음 표시 옵션 중에서 선택할 수도 있습니다.

이름옵션기본설명
유닛밀리초(ms) 백분율(%)ms모든 레코딩 세션의 백분율 또는 밀리초당 각 API 호출에 소비된 시간을 표시합니다.
중간끄기1초1분5분10분끄기선택한 값으로 각 API 호출에 소요된 평균 시간을 계산합니다.세션 길이보다 긴 옵션을 선택하면 스크립트 프로파일러가 세션 길이를 추정하여 평균을 계산합니다.예를 들어, 1분 세션에 대해 5분 옵션을 선택하여 코드를 5분 동안 실행하면 예상 평균값을 확인할 수 있습니다.

프로파일링 데이터 내보내기

스크립트 프로파일러를 사용하면 JSON 파일로 프로파일링 데이터를 내보낼 수 있습니다. 프로파일링 세션 후에 기록된 데이터를 내보내려면:

  1. 스크립트 프로파일러 창에서 내보내기 를 클릭하십시오.

  2. 내보내기 창에서 내보낼 프로파일링 세션을 선택합니다. 사용자 지정 이름을 설정하려면 기본 파일 이름을 변경합니다.

  3. 클릭 내보내기 를 클릭하여 JSON 파일을 저장합니다.

    Example export window.

내보낸 JSON 파일에는 다음 필드가 포함됩니다:

  • 버전 : 버전 번호.
  • SessionStartTime : 밀리초 단위의 세션 시작 시간을 기록하는 타임스탬프.
  • SessionEndTime : 밀리초 단위의 세션 종료 시간을 기록하는 타임스탬프.
  • 범주 : 프로파일링 세션에 기록된 프레임 작업 범주 배열. 각 항목에는 다음이 포함됩니다:
    • 이름 : 각 프레임 작업 카테고리의 이름.
    • 노드 ID : 작업 카테고리(노드)의 고유 식별자그것은 Nodes 배열에 1 기반 인덱스입니다.예를 들어, 에서 123번째 요소를 검색하여 의 노드를 조회할 수 있습니다.
  • 노드 : 프로파일링 세션에 기록된 노드 배열. 각 항목에는 다음이 포함됩니다:
    • 총 지속 시간 : 노드가 CPU 시간에 소비하는 시간의 양(마이크로초).
    • 함수 ID : 함수의 고유 식별자 배열.
    • 노드 ID : 노드 ID 배열.
  • 기능 : 프로파일링 세션에 기록된 함수 배열.
    • 총 지속 시간 : 함수가 CPU 시간에 소비하는 시간의 양(마이크로초).
    • 이름 : 함수의 이름, 사용 가능한 경우.
    • 소스 : 함수의 소스, 사용 가능한 경우.
    • : 함수의 라인 번호, 사용 가능한 경우.
    • 플래그 : 특정 함수 실행 환경을 나타내는 비트 필드. 현재 다음 값을 가질 수 있습니다.
      • 0 : 0번째 비트는 네이티브 코드 생성 하에서 실행을 위해 IsNative를 나타냅니다.
      • 1 : 1번째 비트는 플러그인의 일부로 실행을 나타냅니다 IsPlugin .
프로파일링 데이터 예 내보내기

{
"Version":2,
"SessionStartTime":1704850750514,
"SessionEndTime":1704850751198,
"Categories":
[
{"Name":"Parallel Luau","NodeId":4},
{"Name":"Heartbeat","NodeId":1}
],
"Nodes":
[
{"TotalDuration":2530,"FunctionIds":[1],"NodeIds":[2]},
{"TotalDuration":2530,"FunctionIds":[2,5],"NodeIds":[3,7]},
{"TotalDuration":1267},
{"TotalDuration":7746,"FunctionIds":[3],"NodeIds":[5]},
{"TotalDuration":7746,"FunctionIds":[4],"NodeIds":[6]},
{"TotalDuration":7746},
{"TotalDuration":1263,"FunctionIds":[6],"NodeIds":[8]},
{"TotalDuration":1263,"FunctionIds":[7],"NodeIds":[9]},
{"TotalDuration":1263,"FunctionIds":[8],"NodeIds":[10]},
{"TotalDuration":1263}
],
"Functions":
[
{"Name":"main","TotalDuration":2530},
{"Source":"builtin_ManageCollaborators.rbxm.ManageCollaborators.Packages._Index.roblox_rodux-3.0.0.rodux.Store","Line":81,"TotalDuration":1267},
{"Name":"Script","TotalDuration":7746},
{"Source":"Workspace.Actor.Script","Line":1,"TotalDuration":7746},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Line":221,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_update","Line":236,"TotalDuration":1263},
{"Source":"builtin_DeveloperInspector.rbxm.DeveloperInspector.Packages._Index.DeveloperFramework.DeveloperFramework.UI.Components.Grid","Name":"_getRange","Line":277,"TotalDuration":1263},
{"Source":"[C]","Name":"ScrollingFrame.CanvasPosition","TotalDuration":1263}
]
}