ly525 / blog

My personal blog / 个人博客(小小鲁班的技术口袋)
https://github.com/ly525/blog/issues
MIT License
45 stars 4 forks source link

鲁班H5 相关讲稿 #428

Open ly525 opened 2 years ago

ly525 commented 2 years ago

早早聊Vue专场

非常感谢主办方的邀请,今天听了诸位讲师的分享感觉收益匪浅。 今天我讲的内容更多是偏向于 在H5和web中后台这些场景中,如何实践一个可视化搭建产品,以及涉及到的一些基础技术原理、核心原理实现、PC和H5这边的侧重点、核心组件和周边生态,以及平台扩展性的一些思考; 希望通过这次分享,能够让大家了解一些搭建的概念和原理知识,对日后的工作应用有所帮助


说到可视化搭建,大家可能很自然会联想到通过托拖拽拽,然后将一个页面给配置出来。我们这次就会讲一下,集合Vue技术栈,托拖拽拽 和 配置 这个过程中发生了什么,能够让一个页面能够通过这样的方式交付出来。希望大家听完这次分享,能够了解一些搭建的概念和原理知识,对日后的工作应用有所帮助

接下来会给大家看一下H5和中后台场景的搭建出来的一些页面

这个图鲁班H5搭建的一个疫情页面,大家可以通过鲁班H5的线上页面,在线体验一下 大家也可以搜索一下码良这个开源项目,这个项目在H5营销场景的成熟度上要完善&健壮很多


这里是配置一个项目的菜单模块,类似于一个菜单配置系统,或者权限系统

这里是一个中后台的Web页面的配置页面,一个常规的CRUD页面。、

在经历了十几年的发展后,前端开发变得越来越复杂,门槛也越来越高,要使用当下流行的 UI 组件库,你必须懂 npm、webpack、react/vue,必须熟悉 ES6 语法,最好还了解状态管理,比如 Redux/Vuex,如果没接触过函数式编程,光入门都很费劲,而入门之后会发现它还有巨大的 生态,相关的库有 2347 个,很多功能相似,挑选成本高。 然而前端技术的发展不会停滞,等学完这些后可能会发现大家都用 Hooks 了、某个打包工具取代 Webpack 了…… 而有时候其实只想做个普通的增删改查界面,用于信息管理,类似下面这种:

可以对数据做筛选 有按钮可以刷新数据 编辑单行数据 批量修改和删除 查询某列 按某列排序 隐藏某列 开启整页内容拖拽排序 表格有分页(页数还能同步到地址栏,不过这个例子中关了) 有数据汇总 支持导出 Excel 「渲染引擎」那列的表头有提示文字 鼠标移动到「平台」那列的内容时还有放大镜符号,可以展开查看更多 如果往下拖动还有首行冻结来方便查看表头(因为文档页面的限制,这个功能在这里看不出来)

我们的想法是,在中后台领域,不光做一个简单的CRUD页面,而是要做一个经过考验的 crud & 富含最佳实践 crud

后面我们会聊一下为何要做这个?业务研发衍生而来

接下来会结合 vue 简单介绍下,搭建化中的基础原理是什么?

这里的一个 crud页面,其实是通常是两部分组成的,上面的筛选区域 + 下面的表格区域,其实对于我们而言,上面的筛选区域其实是一个表单。点击【查询按钮】,将表单筛选数据发送给下面的表格,表格在收到这个search事件之后,就可以调用自己的搜索方法来触发这个更新表格数据的行为了。对vue而言,这个行为也就是一个method,只是这个行为更多是一个远程搜索行为而已

可以看到,对于一个表单项而言,其可配置的一般也就是一个组件的props了。我们目前的这个系统的组件可配置属性,均已经通过动态表单的schema来进行描述了

而我们上面看到的筛选区域其实也就是一个动态表单+将 我们参考了 element-ui/iview/ant-design-vue/vuetify,在api层面将其抹平,提供一个经历了二次封装,可配置schema的表格,表格包含了常见交互的封装,比如发起搜索、点击搜索,分页信息pageSize的重置,异常场景数据的防御式处理 也就是我们的页面本身是由一个动态表单

这里的一个 crud页面,其实是通常是两部分组成的,上面的筛选区域 + 下面的表格区域,其实对于我们而言,上面的筛选区域其实是一个表单。点击【查询按钮】,将表单筛选数据发送给下面的表格,表格在收到这个search事件之后,就可以调用自己的搜索方法来触发这个更新表格数据的行为了。对vue而言,这个行为也就是一个method,只是这个行为更多是一个远程搜索行为而已

可以看到,对于一个表单项而言,其可配置的一般也就是一个组件的props了。我们目前的这个系统的组件可配置属性,均已经通过动态表单的schema来进行描述了

而我们上面看到的筛选区域其实也就是一个动态表单+将 我们参考了 element-ui/iview/ant-design-vue/vuetify,在api层面将其抹平,提供一个经历了二次封装,可配置schema的表格,表格包含了常见交互的封装,比如发起搜索、点击搜索,分页信息pageSize的重置,异常场景数据的防御式处理

也就是我们的页面本身是由一个动态表单 + 配置式表格而成,我们内部将其称为 search-table

这里会介绍下讲一下,组件/区块之间的通信方案

这个我听刚才的ams 环境也有同学提问了

这里我会进行一些介绍

比如 点击了

通过上面的讲解,其实大家应该能够有了一定的感受,刚才的页面的搭建的底层,其实是需要一个动态表单 + 表格的组建的,中后台场景我们总结了下,主要是如下场景:

那么我们就需要针对这些场景,做一下这些业务场景的渲染函数,然后将这些渲染函数组合起来,让其能够支持通信,这样也就是我们所说的渲染器了


早早聊搭建化专场

鲁班H5分享大纲

今天要分享的内容大纲 主要分成三个大部分(7小章节):

基本介绍

演示图

这里的两张图是使用鲁班做的一些DEMO,大家可以简单看一下,今天的分享中,我们会围绕右侧的这个《新冠疫情实时数据报告》来讲一下它是如何制作出来的,以及它背后的原理

编辑器

通过视频、前面的的介绍、以及一些小彩蛋,可以简单总结下,鲁班目前主要涵盖了

在讲解核心原理之前,我们来简单看下鲁班的工作流程和系统架构,来帮助我们更好的理解鲁班的运行机制

结合之前我们看到的视频、demo,我们来梳理下 鲁班H5的工作流程:

我们主要会讲解下

架构

鲁班H5的整体架构主要包含了三大模块:

首先,我们来看下对一个H5作品的Model层抽象:

接下来我们将会介绍下鲁班H5的核心实现原理

正如前看我们讲解鲁班的Model层设计一样,对于我们经常看到的一个H5作品,我们可以将其抽象为:Work作品、Page、Element

而一个元素,也就是我们日常开发中的组件,它大概会包含一些基础属性:

这个我们可以理解为Element Model,我们就可以通过Model 结合Vue的动态组件,来渲染出一个mini page

我们看下一个 疫情实时数据报告的demo 页面,它包含了

如何生成JSON

我们再来看下鲁班的工作流程,即我们现在讲完了 拖拽组件、配置属性、保存数据、预览页面、渲染页面这些,鲁班在拖拽生成页面这一块的核心原理讲解暂时先告一段落

接下来我们来讲一下配置属性的下一块:配置数据源

接下来我们进入「数据源这个话题」

我们先来回顾下之前的数据源的小视频,

PSD 转H5

基础认知

  1. 我们的目的是:PSD -> H5
  2. 根据我们之前的讲解,以《中秋节祝福海报》为例,我们知道一个简单的H5本质上对应的是一个 JSON,如下所述(其中:lbp意思是 lu-ban-plugin):
  3. 那么 PSD -> H5 也就意味着,我们需要把 PSD 文件转换为上面的JSON结构,我们大概看下:
  4. 假如我们有某种办法,能够得到PSD中的图层结构,能够对 PSD 文件做以下操作:
  5. 把每个图层中的图片保存下来
  6. 获得该图层的 左上角 相对于 整个PSD 的相对左上角 的位置(以左上角为坐标原点,向右为X正轴,向下为Y正轴),也就是:{left, top}
  7. 获得文字图层中的文字内容、文字大小、颜色、字体等信息
  8. 再高级点:图层的渐变色等
  9. 如果上面的办法可行,我们可以把 PSD 文件也抽象成一个 JSON
  10. 也就是说 PSD 文件是由几个部分组成的:
  11. File Header
  12. Color
  13. Image Resources
  14. Layer And Mask Information
  15. Image Data
  16. 我们借助 psd.js 来尝试下对 psd 文件进行一些分析,代码如下,可以copy 运行(前提,需要有一个 psd 文件,拷贝到该脚本的相同目录中)

殊途同归

可以发现,PSD 文件的数据结构和鲁班中的一个作品的数据结构是非常相似的

我们来整理一下二者之间相似之处(如下),是不是发现PSD 的结构和鲁班在很多地方是可以一一对应的上的呢?

image(psd) <-> lbp-picture(luban) text (psd) <-> lbp-text(luban)

实现路径

  1. 那么让我们看一下我们之前的假设: 假设我们可以分析PSD的结构,并从中得到图片、文字等图层信息
  2. 现在可以告诉大家了,上面的假设,我们完全可以实现。
  3. 首先,让我们重新认识一下PSD这个文件格式,通常情况下,我们都知道它是Photoshop导出的文件格式。其实它也是一个有着自己独特风格的文件格式。
  4. 我们先来看一份东西: PSD 的文件规范,访问地址:https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/

看一下 PSD文件结构,有一种被计算机网络七层结构支配的恐惧😂

./luban-h5 init

./luban-h5 rebuild_fe

./luban-h5 start

./luban-h5 stop


如果将非黑即白叫做 01 思维,那么光谱视角,应该叫 0~1 思维,它呈现的是有层次的渐进过程。

在上面的两段争论中,Vue 和 Vue 作者很容易通过反驳和用实力,得到澄清。但是,不是所有项目,所有人,都像 Vue 和 Vue 作者那样强大,有能力去肃清非议。

有许多弱小的项目和开发者,饱受歧视。

设想你是一个小透明,你在 GitHub 上新建了一个账号和仓库,将自己未经严格测试,甚至跑都还跑不起来的代码,发布上去。

然后有一个人对你说:我在刚工作的时候,我就学会了,代码没有严格的单元测试,代码覆盖率没到 99%,代码 commit messages 不规范,都不好意思放到 GitHub。

你试图反驳说:这些要求太高了。

他更严厉的质疑:这也叫高要求?这不是最基础的常识吗?你平时怎么工作的?

你败下阵来,默默删除了自己的仓库。默默对自己说,我只是一个弱鸡,我没资格开源。

同时你发现,在其它方面,也有很多既得利益者,利用先发优势,用资格论,对你进行自信心的打击。

你不敢让人知道你在学习什么技术,不敢给其他人看你写的代码。

你觉得自己实力不行,不配去看官方文档,不配去问大神问题,不配去看英文材料,不配去看论文,不配获取一手材料,不配发表意见,不配开源代码,不配写文章。

你觉得自己只配从非官方的渠道,看二手的,三手的,非严肃的内容;看不懂也没关系,也没人嘲笑你:这么简单,写得这么清楚,你都看不懂?

最后你发现,你永远学不会真正的技术。你觉得自己果然不适合这个行业。

不。

不是这样的。

你可以随意开源,即便跑不起来,即便没有单元测试,即便你连什么是代码覆盖率都不知道。

你可以去写 TypeScript,即便仅仅是把 .js 后缀改成 .ts。对刚开始的你而言,不改一行代码,你也已足够 TypeScript。

你可以在光谱的最左端停留,这是你的起点。等你变强之后,你可以提升你的项目的完成度和质量,往光谱的右侧移动。

每个人都需要经历起步阶段。所有项目都有希望变得更好,不管当前处于哪个阶段。

你可以去看官方文档,你可能发现,它里面的第一句话是:本文档不要求提前知道 XXX 技术,本文档对于初学者也适用。

你可以去问大神问题,你可能发现,对方比你想象的更乐意帮助你。

你可以去看英文材料,可以去读论文,在合理合法范围内,你可以自由的做任何事。

不必桎梏于某些人划定的界线,即便这个人是所谓的大佬。

普朗克有一句名言:新科学的发展,不是靠使其对手看见真理之光,而是等待对手全死光,新一代熟悉新科学的人成长起来。

希望你能成长起来。

开源的收益之一,是让我意识到,我自己做的一些的小的内容是有价值的,也会有人关注,会督促自己做出更好的内容。

鲁班有两个微信群,差不多会有700人左右,里面有非常多的同学会反馈一些想法、建议,以及提供一些非常nice的idea。

在这里非常感谢关注鲁班H5、给鲁班提供意见、建议、Idea的同学,也要特别感谢给鲁班提过Issue 和 PR的同学,鲁班H5的建设和成长离不开你们,非常感谢!

最后感谢大家来听这场分享,希望能够大家带来一些灵感和收益。


  1. 要把计算机的原理弄明白,你推荐哪些书?

就像是剖析一个人,对身体和精神要有了解。对于身体,要能有层次地全面地知道是什么构成(人/系统/器官/组织/..../原子/...);又要知道这每一层中的元素之间的联系(比如不同组织之间的联系) 那么要对计算机的 硬件和软件的 工作和构建原理 有一个 清晰的 基本的 了解,可以看那些书?(英文的也行) 本人真的很想对计算机有清晰的系统的认识。

  1. 从基本电路到操作系统,看什么书好?

比如我们看到的数字电路,离我们说的声音图片图像等太远。从基本电路到操作系统,如何完整地学习与理解他们,看什么书好

我有种很熟悉的感觉,猜测一下你是想把电子技术基础和现代计算机的内部运行机制联系起来,有时候会有一个疑问:我学的这个电子电路的东东和操作系统会有什关系?我只推荐一本书《穿越计算机的迷雾》_李忠 http://m.douban.com/book/subject/5432475/?session=0ae16a64

这本书里面讲了怎么 将高中(还是初中)学的继电器运用到计算机的加法器上面,引出逻辑电路和电子电路,最后再到运算器,控制器,操作系统等等。我全心全意推荐,可能表达的不好,但是看书你应该不后悔,只是不想让好书埋没 ​


可视化搭建技术分享: 鲁班H5&码良

时间:周六(明天:2020-06-06) 上午10:00 ~12:00

地点:五楼 侠客岛会议室

相关资料:
1. gods-pen(码良):[https://github.com/ymm-tech/gods-pen](https://github.com/ymm-tech/gods-pen)
2. luban-h5(鲁班H5):[https://github.com/ly525/luban-h5](https://github.com/ly525/luban-h5)

自我介绍:

昵称:小小鲁班(打王者荣耀&程咬金 😂,你以为我玩小鲁班,并不是😄)
之前经历:广告平台公司
项目经历:B端管理系统 & 营销投放系统

分享主旨:
1. 了解可视化搭建基本概念: 5分钟左右
2. 鲁班H5-码良核心实现原理 10 分钟左右
3. 鲁班H5 整体流程-基础架构 10 分钟
4. GitHub 运营: 10分钟
5. QA环节: 10分钟

目标:
- 了解码良之类的可视化搭建原理,更高效的使用码良 & 遇到问题能够高效提问&参与共建
- 了解开源基本内容

What:什么是可视化搭建(Low Code、No Code)

What:希望解决什么问题

  1. 布局
  2. 项目紧急、时间不足
  3. 组件复用

How:怎么解决

业务抽象<从业务场景 → 技术层面>

我对可视化搭建的一些认知 · Issue #399 · ly525/blog

技术层面:实现原理

https://www.yuque.com/luban-h5/docs/ug7xg5

Header-Body-Footer.json https://jsoneditoronline.org/#left=cloud.96df8e46dd0844258ef1a0230385afd2

https://jsoneditoronline.org/#left=cloud.96df8e46dd0844258ef1a0230385afd2

https://codesandbox.io/s/vue-ast-to-json-pcr20?file=/index.html

所需资料

1. Vue Virutal DOM、jsx render: https://vuejs.org/v2/guide/render-function.html#Nodes-Trees-and-the-Virtual-DOM
2. Template Compilation: https://vuejs.org/v2/guide/render-function.html#Template-Compilation
3. Compilation Result -> JSON: https://codesandbox.io/s/vue-ast-to-json-pcr20

技术层面:整体概览(架构?不敢用这个词)

Flowchart Maker & Online Diagram Software

前端

PSD 转 H5 实现 · 语雀

后端

计划/展望

  1. 完善生态
    1. 组件:
      1. 脚手架
      2. 基础能力
    2. 脚本
    3. 对接开放数据源
  2. 完善开发者体验!!
  3. 对接社区需求,达到生产可用级别

码良规划?


收获

业务场景沉淀

  1. 营销/宣传推广/广告
    1. 拉新
    2. 企业宣传
    3. 校园招聘
    4. 朋友圈广告<新房装修、婚纱店铺推广
  2. 电商
    1. 6.18 大促(手淘)
    2. 商品详情页
    3. 有赞电商店铺页
  3. 数据统计
    1. 表单<钉钉里面每天的体温填报>
  4. 社交活动
    1. 邀请函:婚礼邀请函<特别到了我这个年纪,最近看到这个是越来越多了🤦‍♂️>
  5. App 集成
    1. 手淘
    2. 美团魔方

「其它想到再补充」

技术沉淀

  1. 沉淀基础组件
  2. 沉淀业务组件
  3. 沉淀组件库
  4. 沉淀通用解决方案:模板
  5. 沉淀更多技术产品
    • 可视化技术产品
      • H5 编辑器
      • 大屏幕可视化编辑器
      • PPT 编辑器<https://slides.com/>
      • 墨刀<交互工具>
      • Webflow<建站>
      • 更多方向,欢迎讨论-交流<核心宗旨:从业务中衍生、演进、抽象、提炼,通过技术沉淀、技术创新,最终回归业务,通过技术、技术产品为业务赋能,创造业务价值>
    • 表单生成器
    • 布局生成器
    • 待补充
      1. 回归技术基础&思考业务
    • 技术基础
      1. 能写一个简单的组件吗?
        1. 比如按钮、输入框、轮播、tab
        2. 能把它发布到 npm 吗?
        3. 动态加载组件技术  → 脚本加载器 → 资源加载器: create.js/require.js/system.js

CreateJS | A suite of JavaScript libraries and tools designed for working with HTML5

  2.  元素拖拽:reflow/repaint 
  2.  数据请求: 
     1. 请求队列、请求分发
     1. 与平时写业务的请求有何区别?
  4.  H5 在 Native上的时候: 
     1. JSBridge
     1. 跨端?
  5.  可视化: 
     1. Echarts 抽象
  6.  埋点 
  6.  数据分析 
  6.  「其它想到再补充」 

关于开源

如何看待开源/第一次开源的心态

Vue 3.0 公开代码之后......

[摘录]:

在上面的两段争论中,Vue 和 Vue 作者很容易通过反驳和用实力,得到澄清。但是,不是所有项目,所有人,都像 Vue 和 Vue 作者那样强大,有能力去肃清非议。

有许多弱小的项目和开发者,饱受歧视。

设想你是一个小透明,你在 GitHub 上新建了一个账号和仓库,将自己未经严格测试,甚至跑都还跑不起来的代码,发布上去。

然后有一个人对你说:我在刚工作的时候,我就学会了,代码没有严格的单元测试,代码覆盖率没到 99%,代码 commit messages 不规范,都不好意思放到 GitHub。

你试图反驳说:这些要求太高了。

他更严厉的质疑:这也叫高要求?这不是最基础的常识吗?你平时怎么工作的?

你败下阵来,默默删除了自己的仓库。默默对自己说,我只是一个弱鸡,我没资格开源。

同时你发现,在其它方面,也有很多既得利益者,利用先发优势,用资格论,对你进行自信心的打击。

你不敢让人知道你在学习什么技术,不敢给其他人看你写的代码。

你觉得自己实力不行,不配去看官方文档,不配去问大神问题,不配去看英文材料,不配去看论文,不配获取一手材料,不配发表意见,不配开源代码,不配写文章。

你觉得自己只配从非官方的渠道,看二手的,三手的,非严肃的内容;看不懂也没关系,也没人嘲笑你:这么简单,写得这么清楚,你都看不懂?

最后你发现,你永远学不会真正的技术。你觉得自己果然不适合这个行业。

不。

不是这样的。

你可以随意开源,即便跑不起来,即便没有单元测试,即便你连什么是代码覆盖率都不知道。

你可以去写 TypeScript,即便仅仅是把 .js 后缀改成 .ts。对刚开始的你而言,不改一行代码,你也已足够 TypeScript。

你可以在光谱的最左端停留,这是你的起点。等你变强之后,你可以提升你的项目的完成度和质量,往光谱的右侧移动。

每个人都需要经历起步阶段。所有项目都有希望变得更好,不管当前处于哪个阶段。

你可以去看官方文档,你可能发现,它里面的第一句话是:本文档不要求提前知道 XXX 技术,本文档对于初学者也适用。

你可以去问大神问题,你可能发现,对方比你想象的更乐意帮助你。

你可以去看英文材料,可以去读论文,在合理合法范围内,你可以自由的做任何事。

不必桎梏于某些人划定的界线,即便这个人是所谓的大佬。

普朗克有一句名言:新科学的发展,不是靠使其对手看见真理之光,而是等待对手全死光,新一代熟悉新科学的人成长起来。

希望你能成长起来。

文章已于2019-10-10修

Star?

  1. Star?
  2. 如何获得:营销/正常节奏

309: 如果推广自己的产品,有哪些渠道呢? · Issue #309 · ly525/blog

  1. 如何看待?母鸡

如何开始

开源与商业化

开源公司到底能挣钱吗?都是怎么运作的?与开发者和投资人一起聊聊开源商业化在线收听_社会人科技评论_喜马拉雅FM

  - 个人认知:PS、FullPage 等案例,盗版等

「其它想到再补充」

附录:相关文章、链接

  1. 如何设计高扩展的在线网页制作平台

如何设计高扩展的在线网页制作平台

  1. 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇

揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇

待补充

QA 环节