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
-
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