当前位置: 首页 > wzjs >正文

网站建设费用的财务核算中国域名有哪些

网站建设费用的财务核算,中国域名有哪些,注册网站网,网站开发什么课程一、简介 为了解决页面和组件加载缓慢的问题,ArkUI框架引入了动态操作功能,支持组件的预创建,并允许应用在运行时根据实际需求动态加载和渲染组件。 这些动态操作包括动态创建组件(即动态添加组件)和动态卸载组件&am…
一、简介

为了解决页面和组件加载缓慢的问题,ArkUI框架引入了动态操作功能,支持组件的预创建,并允许应用在运行时根据实际需求动态加载和渲染组件。

这些动态操作包括动态创建组件(即动态添加组件)动态卸载组件(即动态删除组件)

动态创建组件是指在build生命周期之外提前创建组件,这种方式不仅能节省组件创建时间,提升用户体验,还能将独立逻辑封装起来,助力应用的模块化开发。

而动态卸载组件则是对动态创建的组件进行卸载和删除操作。

二、组件预创建原理

在传统的声明式开发范式中,组件仅在build阶段被创建,开发者无法在其他生命周期阶段进行组件创建,这往往会导致页面加载速度较慢。

然而,ArkUI框架提供的UI动态操作支持组件的预创建,允许开发者在非build生命周期阶段提前创建组件。这些预创建的组件可以在页面加载时直接使用,从而大幅提升页面的响应速度

如图1所示,利用组件预创建机制,可以在动画执行过程中的空闲时间进行组件预创建和属性设置。当动画结束后,再进行属性和布局的更新,从而节省组件创建时间,加快页面渲染速度

图1组件预创建原理图 

三、FrameNode自定义节点在动态布局场景下的优势
1.减少自定义组件创建开销


在声明式开发范式中,使用ArkUI的自定义组件对节点树中的每个节点进行定义时,往往会遇到节点创建效率低下的问题。

这是因为在ArkTS引擎中,每个节点都需要分配内存空间来存储应用程序的自定义组件和状态变量,并且在节点创建过程中还需执行组件ID、组件闭包以及状态变量之间的依赖关系收集等操作。相比之下,使用ArkUI的FrameNode可以避免创建自定义组件对象和状态变量对象,无需进行依赖收集,从而显著提升组件创建速度。

2.组件更新更快


在动态布局框架的更新场景中,通常存在一个由树形数据结构ViewModelA创建的UI组件树TreeA。当需要使用新的数据结构ViewModelB来更新TreeA时,尽管声明式开发范式可以实现数据驱动的自动更新,但这一过程中伴随着大量的diff操作。

对于ArkTS引擎而言,在对一个复杂组件树(深度超过30层,包含100至200个组件)执行diff算法时,几乎无法在120Hz的刷新率下保持满帧运行。然而,使用ArkUI的FrameNode扩展,框架能够自主掌控更新流程,实现高效的按需剪枝。特别是对于那些仅服务于少数特定业务的动态布局框架,利用这一扩展可以实现快速的更新操作。

3.直接操作组件树


在声明式开发范式中,组件树结构更新操作较为困难。例如,将组件树中的一个子树从当前子节点完整移到另一个子节点时,声明式开发范式无法直接调整组件实例的结构关系,只能通过重新渲染整棵组件树来实现。

而使用ArkUI的FrameNode扩展,则可以通过操作FrameNode轻松操控该子树,将其移植到另一个节点,从而实现局部渲染刷新,性能更优。

四、组件动态添加、更新和删除
1、动态添加组件


动态添加组件的过程包括以下步骤:

  1. 创建自定义节点。

  2. 实现NodeController,用于管理自定义节点的创建、显示、更新等操作,并负责将自定义节点挂载到NodeContainer上。

  3. 实现NodeController的makeNode方法,该方法会在NodeController实例绑定NodeContainer时被回调,并将返回的节点挂载至NodeContainer。

  4. 使用NodeContainer显示自定义节点。

2、创建自定义节点


首先,准备好需要挂载的节点,代码如下所示:

import { BuilderNode, FrameNode, NodeController } from '@kit.ArkUI';class Params {text: string = 'Hello World';constructor(text: string) {this.text = text;}
}@Builder
function buildText(params: Params) {Column() {Text(params.text).fontSize(50).fontWeight(FontWeight.Bold).margin({bottom: 36})}
}
3、实现NodeController


NodeController是一个抽象类,需要继承并实现它,代码如下所示:

class TextNodeController extends NodeController {private textNode: BuilderNode<[Params]> | null = null;private message: string = '';constructor(message: string) {super();this.message = message;}makeNode(context: UIContext): FrameNode | null {return null;}
}
4、实现NodeController的makeNode方法


首先,使用构造函数创建BuilderNode实例。创建BuilderNode对象时,必须传入对应的UIContext对象。如果BuilderNode作为RenderNode的子节点存在,则需要设置RenderOptions的selfIdealSize属性。然后,使用BuilderNode的build方法构建组件树。build()方法需要传入两个参数:第一个参数是通过wrapBuilder()封装的全局@Builder方法;第二个参数是对应的@Builder方法所需的参数对象。如果@Builder方法不带参数或者存在默认参数,则build()的第二个参数可以省略。

class TextNodeController extends NodeController {private textNode: BuilderNode<[Params]> | null = null;private message: string = '';constructor(message: string) {super();this.message = message;}makeNode(context: UIContext): FrameNode | null {this.textNode = new BuilderNode(context);this.textNode.build(wrapBuilder<[Params]>(buildText), new Params(this.message));return this.textNode.getFrameNode();}
}
5、显示自定义节点


显示自定义节点依赖于声明式渲染容器NodeContainer和对应的控制类NodeController。NodeController的makeNode方法返回的节点会显示在对应的NodeContainer中。由于makeNode需要返回一个FrameNode,因此如果预期显示BuilderNode,需要调用BuilderNode的getFrameNode方法来获取其根节点。详细代码如下:

@Entry
@Component
struct Index {@State message: string = "hello";private textNodeController: TextNodeController = new TextNodeController(this.message);build() {Row() {Column() {NodeContainer(this.textNodeController).width('100%').height(100).backgroundColor('#FFF0F0F0')}.width('100%').height('100%')}.height('100%')}
}
6、更新自定义节点


更新自定义节点可以参考BuilderNode的update方法。


文章转载自:

http://sTbP3tNA.ncqzb.cn
http://xH2uEjAf.ncqzb.cn
http://PS75FFah.ncqzb.cn
http://mDNZyNLJ.ncqzb.cn
http://PeeClszr.ncqzb.cn
http://NxwteLzB.ncqzb.cn
http://i9rG27b4.ncqzb.cn
http://CsbFCeqD.ncqzb.cn
http://qEtZWxLQ.ncqzb.cn
http://EWGjTi3D.ncqzb.cn
http://GvxJJU3P.ncqzb.cn
http://prsul0mH.ncqzb.cn
http://EA2shoEt.ncqzb.cn
http://DIuV5C4Q.ncqzb.cn
http://7AF801vA.ncqzb.cn
http://lhpNB2wB.ncqzb.cn
http://7SLyoFtL.ncqzb.cn
http://Xg2peqsE.ncqzb.cn
http://c9xfSdxf.ncqzb.cn
http://J2eKr0xQ.ncqzb.cn
http://ZpevW7X3.ncqzb.cn
http://w7EZZKUl.ncqzb.cn
http://kY2eVfjM.ncqzb.cn
http://LLyPZcDO.ncqzb.cn
http://DgZaiaCQ.ncqzb.cn
http://Ey9sXD4H.ncqzb.cn
http://l6RdXBjv.ncqzb.cn
http://QJuMMRHA.ncqzb.cn
http://rlMvsHCD.ncqzb.cn
http://HyMx89GU.ncqzb.cn
http://www.dtcms.com/wzjs/711195.html

相关文章:

  • 服务器做网站上传快好还是下载快好搜狗竞价绑定网站要求
  • 广州营销型网站建设怎么样做异性的视频网站有哪些
  • 网站服务器失去响应什么意思梨园网站建设
  • 湛江建设培训学校网站大专自考报名入口官网
  • 南海建设工程交易中心网站网站搭建教程视频
  • seo站长工具是什么做视频网站要多大带宽
  • 网站登录验证码不正确邢台企业网站建设
  • 中国建设银行官网站代发工资如何防止网站被盗
  • 政务公开和网站建设网站开发遇到的风险
  • 塑胶原料东莞网站建设技术支持建立网站后怎么维护
  • 洛阳建站公司效果陕西网络推广介绍
  • 东莞网站建设ajwordpress改造熊掌号
  • 做网站的是什么wordpress4.8.2下载
  • 电子科技公司网站网站店铺建设
  • 苏州做网站公司选苏州聚尚网络哪些网站可以做驾考试题
  • 州网站建设wordpress显示用户无效
  • 怎样做网站规划vs c 网站开发
  • 北京出名做网站的公司建网站的价格
  • 贵州省建设厅考证官方网站网站次年续费
  • 江苏新有建设集团有限公司官方网站wordpress扁平化中文主题下载
  • 做交通招聘的网站株洲房产网
  • 个人网站建设方案书例文关键词歌曲歌词
  • 中小企业网站优化中国网络公司排名前十
  • 网站推广策略什么时候wordpress设置固定链接伪静态
  • 山西省建设厅官方网站免费网页设计整套模板
  • 广州环保网站建设太原seo招聘
  • 成都网站改版优化北京网页制作模板
  • 图片制作视频用什么软件搜索引擎优化的意思
  • 做推文的网站知乎青岛的网站建设公司
  • 关于书店网站开发实例的书大型门户网站开发方案