San DevTools 技术解析(上) #579
BUPTlhuanyu
started this conversation in
技术分享
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
San DevTools 技术解析(上)
文章导航
San-Devtools传送门
前言
今天我们带来《San DevTools技术解析》上、中、下三篇系列话题,带大家深入理解 DevTools 底层原理,通过关键技术的讲解,理解 DevTools 底层设计原理。包括 San 与 DevTools 如何通信?Standalone 版本如何调试多种场景?WebSocket 通信如何实现?Chrome 插件应用到哪些技术?远程调试如何实现?调试协议有哪些有意思的应用场景等等。
San DevTools
整体涉及的技术点较多,希望通过本文大家能够理解掌握关键技术与设计。整体介绍
功能简介
San DevTools
以两种方式存在:Standalone 版本支持两种调试模式,如下视频演示:
核心概念
San DevTools
是支持 San 应用开发的调试工具。为了方便大家理解其中的概念,我们先思考如下的问题:
首先,我们应该能想到需要有两个模块,一个是调试的工具,一个是被调试的目标页面。按照远程调试工具的传统,站在开发工具的角度,把工具页面叫做
Frontend
,被调试的目标页面叫做Backend
,和传统前后端开发概念有点类似。其次,前后端的通信问题要先考虑,如何设计前后端模块可方便发送事件呢?参考前端与NA端桥接
Bridge
的概念,设计了Bridge实例,各模块内部通过实例方便地发送事件。再次我们思考几个问题:
前后端可不可以直接通信?
收集、计算Backend页面数据的模块如何设计?
格式要不要规范(类似RESTFul格式)?
对这几个问题分别进行分析:
Hook
概念与模块;计算处理数据的工作会比较多,比如组件树数据的计算生成,组件路径数据等等,这部分主要工作是代理Frontend
与Backend
之间数据的交互处理工作,所以有了Agent
模块;Backend
与Frontend
同样需要一定的规范,这就是Remote Debugging Protocol
协议规范,为了实现交互的标准规范;Message Channel
消息通道,或更形象点叫房间
,消息不可以在不同房间内『串门』,保证消息的准确性;总结:通过本节的介绍我们明白了远程开发调试必备的四大核心模块:
Chrome DevTools
里我们经常看到的 Elements、Console、Network、Source 等面板;在San DevTools
里我们实现的 Component、History、Store、Event、Message 等面板;Backend
(稍注意下概念,和传统前端理解不太一致);除四大核心概念外,为实现相应的功能引入三个概念与模块:
Bridge
:类似于前端与NA端建立的桥接,方便前后端发送消息通信;Hook
:目标页面钩子,与调试的页面深入结合,可操作目标页面的JS/DOM,并监听组件触发的事件,消息以及组件的生命周期,主要功能是收集页面数据;Agent
:代理Frontend
与Backend
中间数据处理模块,实现数据计算、处理等工作;_备注:核心概念借鉴
Chrome DevTools
_的模块划分。架构 & 流程
下面是 San DevTools 的整体架构图。

整体流程如图所示。

Frontend & Backend
Frontend
与Backend
有较多的交互流程,我们把这两个模块放在一起来说。在不同的流程阶段,有不同的关键技术实现,我们分两个阶段进行说明。
初始化阶段
初始化阶段关键技术点:
manifest.json
实现入口,技术详情请参考本文的插件技术基础章节;Hook
注入并劫持全局变量__san_devtool__
,所有和San框架相关的交互都是通过这个变量,比如San版本号等;具体可以直接通过控制台打印变量;连接的建立:
Standalone功能更强大,支持任意页面的远程调试能力,与业界同类工具相比更优,比如VConsole、Weinre等:
其他节点阶段
这里我们以组件信息同步与组件树渲染两个阶段为例,这两阶段技术具有代表性:
最后
感谢你阅读到了这里,以上便是《San DevTools 技术解析(上)》的全部内容。
今天带着大家设计一款远程调试工具的思考,并形成四大核心概念与模块,并且介绍了其中的两部分:
Frontend
与Backend
,它们在不同阶段的关键技术。下期介绍
Message Channel
和Debugging Protocol
,是整个工具核心的两部分内容,并且还是很有意思的技术,比如通信协议如何实现的;我们能干点啥;自动化测试脚本;无头浏览器;Chrome的Fronend复用等等都将在下节揭晓。期待下期《San DevTools 技术解析(中)》再见!
Beta Was this translation helpful? Give feedback.
All reactions