本系列内容直达:】
手把手带你学习Odoo OWL组件开发(1):认识 OWL
手把手带你学会Odoo OWL组件开发(2):OWL的使用
手把手带你学会Odoo OWL组件开发(3):核心内容指南
手把手带你学会Odoo OWL组件开发(4):OWL组件
手把手带你学会Odoo OWL组件开发(5):浅析OWL原理
手把手带你学会Odoo OWL组件开发(6):API
手把手带你学会Odoo OWL组件开发(7):OWL项目实战使用


本篇内容:浅析OWL原理

目录

  • 概述
  • 虚拟dom

通过前面的学习和理解,我们的我们对owl的使用和学习都有一些认识和实践了,本章讲解owl的官方设计方案,通过虚拟dom系统,组件系统,模板编译器,反应系统等是什么步奏往下执行,并渲染成我们看到的页面的

概述

从大范围来说,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的方式才能渲染。)

虚拟dom

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

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

vdom导出两个函数:

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

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

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

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

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号后台回复Odoo,加入Odoo技术交流群。

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

  1. 手把手带你学会Odoo OWL组件开发(4):OWL组件

    [本系列内容直达:] 手把手带你学习Odoo OWL组件开发(1):认识 OWL 手把手带你学会Odoo OWL组件开发(2):OWL的使用 手把手带你学会Odoo OWL组件开发(3):核心内容指南 ...

  2. 手把手带你学会Odoo OWL组件开发(2):OWL的使用

    [本系列内容直达:] [手把手带你学习Odoo OWL组件开发(1):认识 OWL] [手把手带你学会Odoo OWL组件开发(2):OWL的使用] [手把手带你学会Odoo OWL组件开发(3):核 ...

  3. 视频教程-手把手带你学会python爬虫-Python

    手把手带你学会python爬虫 曾在某大型公司大型互联网任职多年,在公司主要从事移动端开发.全栈开发.主要技术栈是Android.Java.Python.爬虫.Linux等等. 赵庆元 ¥99.00 ...

  4. 一分钟带你了解Huawei LiteOS组件开发指南

    摘要:本文将基于Huawei LiteOS系统,从组件定义开始带你走进组件开发指南. 本文分享自华为云社区<一分钟带你了解Huawei LiteOS之组件开发指南>,作者: Lionlac ...

  5. 手把手带你分解 Vue 倒计时组件

    大家好,我是漫步,今天来分享一个Vue 组件的内部,喜欢记得关注我并设为星标. 一.前言 前端开发博客 入职的第一个需求是跟着一位前端大佬一起完成的一个活动项目. 由于是一起开发,当然不会放过阅读大佬 ...

  6. 给我5分钟,手把手带你学会定时任务!

    一. 前言 最近经常有小伙伴问辉哥,咋能快速实现定时任务呀?看了一堆Quartz.XXL-Job.Elastic-Job等,看的是眼花缭乱懵懵懂懂的,有没有更简单的方式呢?来,今天辉哥手把手地带着你学 ...

  7. MySQL实战课程---通过录像手把手带您学会当前互联网流行架构

    通过本课程,可以让您学会当前互联网流行的高可用架构搭建MHA(Master High Availability),VIP机制不采用Keepalived实现(会出现脑裂),通过修改脚本实现.以及读写分离 ...

  8. 新手运营shopee不知道如何选品?手把手带你学会,成为选品达人!

    shopee最近的爆火,引来了许多新手商家入驻,导致很多人都不知道如何选品,不少人都有疑问,为什么店铺经营这么久没有什么流量呢? 很重要的原因就可能使选品没有做好,店铺运营事业的开端就是选择适合自己店 ...

  9. 手把手带你学会猜数字游戏代码编写

    声明:因本人为非科班转码,个人水平有限,博客中难免有不准确之处,如有读者发现,本人恳请大家积极指出,本人也想知道自己的错误在哪里.欢迎大家一起指正,共同进步. 联系方式:3146367553@qq.c ...

最新文章

  1. 谈谈Angular关于$watch,$apply 以及 $digest的工作原理
  2. MIP技术进展月报第2期: 数据绑定,异步脚本加速
  3. Scala go java_Java、Scala和Go语言多线程并发对比测试结果和结论
  4. C语言学习笔记—code:blocks工具debug调试异常
  5. 实践torch.fx第一篇——基于Pytorch的模型优化量化神器
  6. USACO 4.3.1 Buy Low, Buy Lower
  7. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  8. 行列式的六条运算法则整理
  9. 奥克兰理工大学计算机学院,9月17日学术报告(新西兰奥克兰理工大学 Prof. Re
  10. Java进阶篇设计模式之五-----外观模式和装饰器模式
  11. Linux下7z压缩解压软件区别
  12. MT9V034摄像头学习笔记(三)
  13. listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
  14. linux打开xml文件,查看 XML 文件
  15. Numpy数组的索引与切片:取数组的特定行列
  16. 17. 06-图3 六度空间 数据结构 浙江大学 拼题
  17. UE5学习笔记(二)——3D材质蓝图的常用节点介绍
  18. 软件测试系列第一阶段:第一课 计算机基础
  19. WebService之WADL和WSDL ING
  20. 可爱的EGO所有中文游戏下载

热门文章

  1. android 阅读器放大镜,制作安卓PDF阅读器:四、实现文本选择之放大镜、长按拖动...
  2. IT人是怎样起名字的
  3. java mysql executequery_jdbc连接数据库 Statement的executeQuery方法报空指针异常?
  4. Vuex简介(带操作实例)
  5. 【IoU全总结】GIoU, DIoU, CIoU, EIoUFocal, αIoU, SIoU,WIoU【基础收藏】
  6. 零维水温模型计算——基于matlab建立计算模型
  7. java 学习~多线程通信 使用共享变量 例子和解释
  8. mysql mpm_centos7 mpm监控mysql
  9. 研究War3编辑器(3):单位的基本操作
  10. 推荐一些非常有用的学习网站