文章目录

  • 重编译时轻运行时(uniapp)
  • 轻编译时重运行时(Taro)

重编译时轻运行时(uniapp)

  • 对 vue 语法直接进行编译转换成对应平台代码,再通过添加运行时代码去补充能力,比如 nextTick 实现的批量更新等运行逻辑
pages/
└── index/├── index.json     // 页面配置(路由等)├── index.wxml     // 模板,来自 <template>├── index.wxss     // 样式,来自 <style>└── index.js       // 页面逻辑,来自 <script>

优点

  • 直接编程成对应平台代码,性能无限接近原生
  • 编译底层带来的优化效果明显,在编译期可以做出更好的优化,比如 tree-shaking、scope hoisting、依赖提取等

缺点

  • 编译时代码量大,热更新较慢
  • 自由度高的高级语法纯靠编译难以实现,不如运行时灵活
  • 扩展能力弱,新增功能都需要编译器支持

轻编译时重运行时(Taro)

  • 利用 js 框架运行时能力,比如 Vue/React,然后针对对产出结果进行编译(比如虚拟 DOM)
    • 运行时抽象 UI + 渲染器,对运行结果通过渲染器不断进行编译,类似同声翻译,而重编译时的架构类似出版社翻译
  • 开发者写的是 React / Vue / JSX / Composition API 代码。这些代码都在 JS 环境中跑,不涉及平台差异。
  • 根据平台不同,运行时加载不同的“渲染器”。比如把虚拟 DOM 映射为不同平台的实际 UI:
    • Web:createElement() + DOM patch
    • 小程序:调用 setData()、生成 WXML 节点
    • React Native:调用原生控件桥接接口
    • Flutter:转成 Dart Widget 结构
  • 渲染器是运行时决定的,它知道怎么把“虚拟节点”变成实际平台的界面
    • Taro 是把组件编译成小程序 template 模版语法然后进行递归拼接

比如:

export default function Counter() {const [count, setCount] = useState(0);return <Button onClick={() => setCount(count + 1)}>点击 {count}</Button>;
}
  • useState、组件渲染等全在 JS 层运行 —— 这平台无关;
  • 渲染成虚拟 DOM 树
{ type: Button, props: ..., children: ... }
  • 运行时加载“小程序渲染器”,把这个虚拟 DOM:
    • 转成页面 JSON 配置;
    • 转成 WXML 结构;
    • 调用 setData() 实际挂到页面上;
  • 用户点击按钮,触发 setCount,重新触发虚拟 DOM diff → 渲染器更新 UI。

优点

  • 开发者可以写 React 代码、Hooks,几乎不需要改变原有习惯
  • 支持运行时逻辑更复杂的高级特性(比如 Context、Hooks 等)
  • 灵活支持多框架(React/Vue/Nerv)

缺点

  • 运行性能低于原生,特别是微信小程序的首次渲染性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/83231.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/83231.shtml
英文地址,请注明出处:http://en.pswp.cn/web/83231.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…

HarmonyOS 应用开发学习记录 - 从Windows开发者视角看鸿蒙开发

起始 2024年6月21日召开的华为开发者大会2024上宣布Harmony OS NEXT&#xff08;即鸿蒙星河版&#xff09;面向开发者启动Beta版&#xff0c;这也被人们称为“纯血鸿蒙”&#xff0c;它基于鸿蒙内核&#xff0c;不再兼容安卓开发的APP应用。 时至今日近一年了&#xff0c;我也有…

MySQL 事务管理与锁优化:确保数据一致性和并发性

在多用户并发访问的数据库系统中,如何确保数据的**一致性(Consistency)和并发性(Concurrency)**是一个核心挑战。**事务(Transaction)和锁(Lock)**是 MySQL 应对这一挑战的两大利器。事务保证了操作的原子性、一致性、隔离性和持久性,而锁机制则在并发环境下协调不同…

OpenPrompt 有没有实现连续提示词和提手动示词一起优化的

OpenPrompt 有没有实现连续提示词和提手动示词一起优化的 OpenPrompt 中连续提示词与手动提示词的混合优化 OpenPrompt 确实支持同时优化连续提示词(Soft Prompt)和手动设计的离散提示词(Manual Prompt)。这种混合优化策略可以结合两者的优势: 连续提示词:通过梯度下降…

Android添加语言列表

方式一 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java Settings.System.putString(context.getContentResolver(),Settings.System.SYSTEM_LOCALES, "ru-RU,en-US"); 方式2 packages/apps/Settings/src/co…

解决uniapp开发app map组件最高层级 遮挡自定义解决底部tabbar方法

subNvue&#xff0c;是 vue 页面的原生子窗体&#xff0c;把weex渲染的原生界面当做 vue 页面的子窗体覆盖在页面上。它不是全屏页面&#xff0c;它给App平台vue页面中的层级覆盖和原生界面自定义提供了更强大和灵活的解决方案。它也不是组件&#xff0c;就是一个原生子窗体。 …

如何保障服务器的安全

如何保障服务器的安全 以下是保障服务器安全的核心措施及实施建议&#xff1a; 一、基础设施层防护 物理安全 机房设置防火/防水/防雷系统&#xff0c;部署门禁监控设备。 服务器固定于抗震机架&#xff0c;避免物理损坏。 网络防护 防火墙规则&#xff1a;仅开放业务必要端…

C语言 学习 C程序的内存模型 2025年6月10日08:55:13

堆栈与内存管理 堆栈(Stack) : 后进先出(LIFO) 线性数据结构 包含压栈(Push) ,弹栈(Pop) 用途:临时存储数据(函数调用,局部变量) 管理:由系统自动分配和回收 速度快 ,容量有限! 堆栈代码示例: //堆栈示例 :局部变量 void getText() {int text20;//储存在堆栈中 } 内存管理…

CppCon 2015 学习:Implementing class properties effectively

这段内容讲的是C中“属性”&#xff08;Property&#xff09;的实现及其设计理念&#xff0c;并结合一个实际类Text来说明。中文理解如下&#xff1a; 关于“属性”&#xff08;Property&#xff09; 属性&#xff1a;介于类的字段&#xff08;field&#xff09;和方法&#…

[electron]预脚本不显示内联script

script-src self 是 Content Security Policy (CSP) 中的一个指令&#xff0c;它的作用是限制加载和执行 JavaScript 脚本的来源。 具体来说&#xff1a; self 表示 当前源。也就是说&#xff0c;只有来自当前网站或者当前页面所在域名的 JavaScript 脚本才被允许执行。"…

基于安卓的文件管理器程序开发研究源码数据库文档

摘 要 伴随着现代科技的发展潮流&#xff0c;移动互联网技术快速发展&#xff0c;各种基于通信技术的移动终端设备做的也越来越好了&#xff0c;现代智能手机大量的进入到了我们的生活中。电子产品的各种软硬技术技术的发展&#xff0c;操作系统的不断更新换代&#xff0c;谷歌…

MySQL主从复制实现指南

MySQL主从复制实现指南 一、主从复制原理 #mermaid-svg-i1zOswdD4OORQ35t {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i1zOswdD4OORQ35t .error-icon{fill:#552222;}#mermaid-svg-i1zOswdD4OORQ35t .error-text…

spring jms使用

文章目录 一、背景介绍二、注意点说明三、代码pom.xmlmq.propertiesActiveMqConfigJmsSenderActiveMqInfoActivemqProtocolEnum生产者消费者 一、背景介绍 <dependency> 标签中列出的 spring-jms 是 Spring Framework 提供的一个模块&#xff0c;用于简化 Java Message …

笔记——学习HTTP协议

HTTP协议 文章目录 HTTP协议一、统一资源定位符&#xff08;url&#xff09;&#xff1a;URL编码格式&#xff1a; 二、HTTP报文结构&#xff1a;三、HTTP请求方法&#xff1a;四、HTTP常见请求头&#xff1a;五、HTTP状态码&#xff1a;六、HTTP常见响应头&#xff1a;七、HTT…

Unity中的Mathf.Clamp01

2025年6月8日&#xff0c;周日晚上 Mathf.Clamp01 是 Unity 中的一个数学函数&#xff0c;它的作用是将一个浮点数&#xff08;float&#xff09;限制在0 到 1的范围内。具体来说&#xff1a; 如果输入值 小于 0&#xff0c;则返回 0。 如果输入值 大于 1&#xff0c;则返回 1…

1 Studying《Linux Media Documentation》

目录 1 MEDIA SUBSYSTEM ADMIN AND USER GUIDE 1.1.2 Building support for a media device 1.1.3 Infrared remote control support in video4linux drivers 1.1.4 Digital TV 1.1.5 Cards List 1.1.5.2 PCI drivers 1.1.6 Video4Linux (V4L) driver-specifific docume…

编译原理 学习 2025年6月10日11:17:54

编译原理 将高级编程语言编写的源代码转换成机器可执行的代码(二进制或汇编代码) 核心任务: 词法分析(正则表达式和有限自动机): 示例Token分类&#xff1a;关键字&#xff1a;if, while 运算符&#xff1a;, 标识符&#xff1a;变量名 分解源代码为单词 识别 其中关键字 …

风中低语:Linux 信号处理的艺术与实践

文章目录 &#x1f307;前言&#x1f3d9;️正文1、信号的处理时机1.1、处理情况1.2、“合适” 的时机 2、用户态与内核态2.1、概念2.2、重谈进程地址空间2.3、信号的处理过程 3、信号的捕捉3.1、内核如何实现信号的捕捉&#xff1f;3.2、sigaction 4、信号部分小结 补充 5、可…

ASP.NET Core SignalR - 部分客户端消息发送

文章目录 前言一、消息发送的核心概念1.客户端标识2.消息接收范围 二、向特定用户发送消息管理员向指定用户发送私信&#xff0c;或用户之间一对一聊天。 三、向组发送消息聊天室、工作群组、通知订阅等。 四、广播消息系统公告、实时统计数据更新等。 五、向角色发送消息向管理…