控制台工具架构¶
控制台面板负责渲染来自当前页面的所有日志。
架构¶
控制台面板(客户端)的内部架构如下图所示。
flowchart TB DevTools["DevTools<br/>[client/framework/devtools.js]"] -- "openBrowserConsole() 或<br/>toggleBrowserConsole()" --> BrowserConsoleManager["BrowserConsoleManager<br/>[browser-console-manager.js]"] -- "{_browserConsole}" --> BrowserConsole["BrowserConsole<br/>[browser-console.js]"]; WebConsolePanel["WebConsolePanel<br/>[panel.js]"] -- "{hud}" --> WebConsole["WebConsole[webconsole.js]"] -- "{ui}" --> WebConsoleUI["WebConsoleUI<br/>[webconsole-ui.js]"] -- "{wrapper}" --> WebConsoleWrapper["WebConsoleWrapper<br/>[webconsole-wrapper.js]"] -- "ReactDOM.render" --> App; BrowserConsole -- extends --> WebConsole;
组件¶
控制台面板 UI 构建在 React 之上。它在 components
目录中定义了一组 React 组件。React 架构如下图所示。
flowchart TB subgraph React Components direction TB App --> SideBar & NotificationBox & ConfirmDialog & FilterBar & ReverseSearchInput & ConsoleOutput & EditorToolbar & JSTerm FilterBar --> FilterButton & ConsoleSettings ConsoleOutput --> MessageContainer --> Message Message --> MessageIndent & MessageIcon & CollapseButton & GripMessageBody & ConsoleTable & MessageRepeat end subgraph Reps direction TB ObjectInspector["ObjectInspector"] --> ObjectIspectorItem --> Rep["Rep<br/>[client/shared/components/reps/rep.js"] --> Rep end SideBar & ConsoleTable & GripMessageBody --> Reps Message --> Frame["Frame<br/>[client/shared/components/Frame.js]"] & SmartTrace["SmartTrace<br/>[client/shared/components/SmartTrace.js]"] & TabboxPanel["TabboxPanel<br/>[client/netmonitor/src/components/TabboxPanel.js]"] JSTerm -- editor --> Editor["Editor<br/>[client/shared/sourceeditor/editor.js]"]
我们还使用了 WebConsole 中的几个外部组件
ObjectInspector/Rep:用于在控制台输出中显示变量,并在变量不是基本类型时处理展开变量。
Frame:用于显示消息的位置。
SmartTrace:用于显示消息和错误的堆栈跟踪。
TabboxPanel:用于渲染网络消息详情。这直接使用了 Netmonitor 中的组件,因此我们在显示请求内部信息方面保持一致。
操作¶
控制台面板实现了一组分为多个组的操作。
过滤器 与内容过滤相关的操作。
消息 与面板中渲染的消息列表相关的操作。
UI 与 UI 状态相关的操作。
状态¶
控制台面板通过 Redux 管理应用程序状态。
以下 reducer 定义了面板状态
reducers/filters.js
面板过滤器的状态。这些过滤器可以通过面板工具栏设置(例如 error、info、log、css 等)。reducers/messages.js
面板中渲染的所有消息的状态。reducers/prefs.js
与控制台面板关联的偏好设置(例如 logLimit)。reducers/ui.js
与 UI 相关的状态(有时也称为表示状态)。此状态包含过滤器栏的状态(可见/隐藏)、时间戳的状态(可见/隐藏)等。