大数跨境
0
0

手把手带你学会Odoo OWL组件开发(5):浅析OWL原理

手把手带你学会Odoo OWL组件开发(5):浅析OWL原理 AI实践工程院
2024-01-16
3
导读:一键GET新知识✔

本期摘要

通过前面的学习和理解,我们的我们对owl的使用和学习都有一些认识和实践了。在上一章中,我们深入了解了OwL组件及其展示传值的方式。


本章将进一步探索OwL的官方设计方案。通过虚拟DOM系统、组件系统、模板编译器和反应系统等核心组件,OwL按照特定的步奏往下执行,最终渲染为我们所看到的页面。


 作者 

沈童 | 前端开发工程师

默默无闻,走向人生巅峰,激流勇进,退居幕后黑手


01

概述


从大范围来说,Owl的主要部分有5个:


  • 一个虚拟的dom系统(src/blockdom)

  • 一个组件系统(src/component)

  • 一个模板编译器(src/compiler文件夹中)

  • 一个小的运行时的关联(src/app)

  • 反应系统(src/reactivity.ts)


还有一些其他的文件,但是通过这5个主要部分可以理解Owl的核心。



这是我的理解。


owl 渲染的所有内容在内部都由一个虚拟节点表示。虚拟 dom 的工作是有效地表示应用程序的当前状态,并在需要时构建实际的 DOM 表示,或者在需要时更新 DOM。


其他一些助手/较小规模的东西渲染分两个阶段进行:


虚拟渲染:这会在内存中异步生成虚拟 dom


patch:将虚拟树应用到屏幕(同步)


渲染涉及几个类:


  • 组件

  • 调度器

  • 映射数据:包含一些元数据的小对象,与特定组件的渲染相关联


组件在用户界面中,可见的动态组件树中组织。每当在组件中启动渲染时:


  • 使用Owl创建组件C并渲染的时候,

  • 虚拟渲染阶段从 组件C 开始(将异步渲染所有子组件)

  • 将映射数据添加到调度程序中,如果映射完成,

  • 调度程序将连续轮询每个动画帧 一旦完成,

  • 调度程序将调用任务回调,这将应用渲染上去(如果在此期间没有取消渲染)。


这个过程和和react的更类似,就是将全部的dom变化在虚拟树上循环获取后,在集体处理真实dom上的数据变化。所以,owl更喜欢xml组件的内嵌式创建,而不是分体式的先创建好相关的页面xml。


(就像官方给的,在component.js中通过,owl.utils.whenReady()的里面挂载创建的owl是不能直接在类中挂载template的模板的,也就是提前写好的那种dom,而只能是jsx的方式才能渲染。)




02

虚拟dom


Owl 是一个声明式组件系统:声明组件树的结构,Owl 会将其转换为命令式操作列表。这种翻译是由一个虚拟 dom 完成的。这是 Owl 的底层,大多数开发者不需要直接调用虚拟 dom 函数。


虚拟 dom 背后的主要思想是保留 DOM 的内存表示(称为虚拟节点),并且每当需要进行一些更改时,重新生成新的表示,计算新旧之间的差异,然后应用变化。


vdom导出两个函数:


  • h: 创建一个新的虚拟节点

  • patch:比较两个虚拟节点,并应用差异,更新视图。


当然owl的大部分方法源码都是在owl.js文件中的,addons\web\static\lib\owl\owl.js位置,


执行解析的部分,owl都帮你做了~


本期内容比较简单,就到此啦!下一期我们会详解API,敬请期待哦



Hello~

这里是神州数码云基地
编程大法,技术前沿,尽在其中
超多原创技术干货持续输出ing~


想要第一时间获取
超硬技术干货
快快点击关注+设为星标


拜托拜托啦

这对“我们”都很重要哦~


- END -



往期精选




Odoo OWL组件开发(4):OWL组件




Odoo OWL组件开发(3):核心内容指南




Odoo OWL组件开发(2):OWL的使用



了解云基地,就现在!


【声明】内容源于网络
0
0
AI实践工程院
我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级。
内容 434
粉丝 0
AI实践工程院 我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级。
总阅读403
粉丝0
内容434