Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
0fcf995c
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
0fcf995c
编写于
12月 25, 2023
作者:
W
wanganxp
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
x
上级
fb202496
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
14 deletion
+30
-14
docs/select.md
docs/select.md
+30
-14
未找到文件。
docs/select.md
浏览文件 @
0fcf995c
...
@@ -76,7 +76,7 @@ flutter2018年发布,第一次统一了逻辑层和渲染层,而且使用了
...
@@ -76,7 +76,7 @@ flutter2018年发布,第一次统一了逻辑层和渲染层,而且使用了
下载apk后可以看到dart操作flutter的UI真的没有通信折损,100个slider的拖动非常流畅。
下载apk后可以看到dart操作flutter的UI真的没有通信折损,100个slider的拖动非常流畅。
<video
id=
"video"
preload=
"none"
controls=
"controls"
height=
"400px"
src=
"./static/test-cross/flutter-slider.mp4"
></video>
<video
id=
"video"
preload=
"none"
controls=
"controls"
width=
"185px"
height=
"400px"
src=
"./static/test-cross/flutter-slider.mp4"
></video>
flutter看起来很完美。但为什么也没有成为主流呢?很多大厂兴奋的引入后为何又不再扩大使用范围呢?
flutter看起来很完美。但为什么也没有成为主流呢?很多大厂兴奋的引入后为何又不再扩大使用范围呢?
...
@@ -152,13 +152,19 @@ flutter开发者都知道的一个常见坑是输入法,因为输入法是典
...
@@ -152,13 +152,19 @@ flutter开发者都知道的一个常见坑是输入法,因为输入法是典
在各大App中,微信的小程序首页是为数不多的使用flutter UI的界面。
在各大App中,微信的小程序首页是为数不多的使用flutter UI的界面。
下面是微信8.0.44(此刻最新版),
这个界面很简单,规避了输入框等混合渲染,点击搜索图标后又跳转到了原生渲染的界面里,这里也没有原生API的频繁调用。但是在手机切换暗黑主题后,这个UI却还是白的,而且flutter的父容器原生view已经变黑了,它又在黑底上绘制了一个白色界面,体验非常差。假使这个界面再内嵌一个原生的信息流SDK,那你会看到信息流广告是黑底的,更无法接受
。
下面是微信8.0.44(此刻最新版),
从微信的发现页面进去小程序首页
。
<video
id=
"video"
preload=
"none"
controls=
"controls"
height=
"400px"
src=
"./static/test-cross/weixin_dark.mp4"
></video>
<video
id=
"video"
preload=
"none"
controls=
"controls"
width=
"185px"
height=
"400px"
src=
"./static/test-cross/weixin_dark.mp4"
></video>
视频中手机切换暗黑主题后,这个UI却还是白的,而且flutter的父容器原生view已经变黑了,它又在黑底上绘制了一个白色界面,体验非常差。
这个小程序首页界面很简单,没有输入框,规避了混合渲染,点击搜索图标后又跳转到了黑色的原生渲染的界面里。
假使这个界面再内嵌一个原生的信息流SDK,那会看到白色UI中的信息流广告是黑底的,更无法接受。
当然这不是说flutter没法做暗黑主题,重启微信后这个界面会变黑。这里只是说明渲染引擎不一致带来的各种问题。
当然这不是说flutter没法做暗黑主题,重启微信后这个界面会变黑。这里只是说明渲染引擎不一致带来的各种问题。
> 注:如何识别一个界面是不是用flutter开发的?在手机设置的开发者选项里,有一个GPU呈现模式分析,flutter的UI不触发这个分析。
> 注:如何识别一个界面是不是用flutter开发的?在手机设置的开发者选项里,有一个GPU呈现模式分析,flutter的UI不触发这个分析。
且无法审查布局边界。
flutter的混合渲染的问题,在所有使用原生渲染的跨平台开发框架中都不存在,比如react native、weex、uni-app x。
flutter的混合渲染的问题,在所有使用原生渲染的跨平台开发框架中都不存在,比如react native、weex、uni-app x。
...
@@ -179,7 +185,7 @@ flutter最大的优势是dart操作UI不需要通信,以及强类型,而改
...
@@ -179,7 +185,7 @@ flutter最大的优势是dart操作UI不需要通信,以及强类型,而改
这个项目
[
https://gitcode.net/dcloud/test-cross/-/tree/master/test_arkuix_slider_100
](
https://gitcode.net/dcloud/test-cross/-/tree/master/test_arkuix_slider_100
)
,
这个项目
[
https://gitcode.net/dcloud/test-cross/-/tree/master/test_arkuix_slider_100
](
https://gitcode.net/dcloud/test-cross/-/tree/master/test_arkuix_slider_100
)
,
使用ArkUI-x做了100个slider,大家可以看源码,下载apk体验,明显能看到由于逻辑层和UI层通信导致的卡顿。
使用ArkUI-x做了100个slider,大家可以看源码,下载apk体验,明显能看到由于逻辑层和UI层通信导致的卡顿。
<video
id=
"video"
preload=
"none"
controls=
"controls"
height=
"400px"
src=
"./static/test-cross/arkui-x-slider.mp4"
></video>
<video
id=
"video"
preload=
"none"
controls=
"controls"
width=
"185px"
height=
"400px"
src=
"./static/test-cross/arkui-x-slider.mp4"
></video>
上述视频中,手指按下的那个slider,和其他通过数据通讯指挥跟随一起行动的99个slider,无法同步,并且界面掉帧。
上述视频中,手指按下的那个slider,和其他通过数据通讯指挥跟随一起行动的99个slider,无法同步,并且界面掉帧。
...
@@ -242,18 +248,22 @@ uts语言是基于typescript修改而来强类型语言,编译到不同平台
...
@@ -242,18 +248,22 @@ uts语言是基于typescript修改而来强类型语言,编译到不同平台
```
```
这听起来有点天方夜谭,很多人不信。DCloud不得不反复告诉大家,可以使用如下方式验证:
这听起来有点天方夜谭,很多人不信。DCloud不得不反复告诉大家,可以使用如下方式验证:
-
在编译uni-app x项目时,在项目的unpackage目录下看
到
编译后生成的kt文件
-
在编译uni-app x项目时,在项目的unpackage目录下看
看
编译后生成的kt文件
-
解压打包后的apk,看看里面有没有js引擎或flutter引擎
-
解压打包后的apk,看看里面有没有js引擎或flutter引擎
-
手机端审查布局边界,看看渲染是不是原生的(flutter和webview都无法审查布局边界)
-
手机端审查布局边界,看看渲染是不是原生的(flutter和webview都无法审查布局边界)
大家也可以下载hello uni-app x这个示例应用,源码在:
[
https://gitcode.net/dcloud/hello-uni-app-x/
](
https://gitcode.net/dcloud/hello-uni-app-x/
)
;打包后的apk扫描下面的二维码。
但是开发者也不要误解之前的uni-app代码可以无缝迁移。
-
之前的js要改成uts。uts是强类型语言,上面的示例恰好类型都可以自动推导,不能推导的时候,需要用
`:`
和
`as`
声明和转换类型。
-
uni-app x支持css,但是css的子集,不影响开发者布出所需的界面,但并非web的css全都兼容。
hello uni-app x是示例应用,源码在:
[
https://gitcode.net/dcloud/hello-uni-app-x/
](
https://gitcode.net/dcloud/hello-uni-app-x/
)
;打包后的apk扫描下面的二维码。
![](
https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app-x/hello-uniappx-apkqrcode.png
)
![](
https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app-x/hello-uniappx-apkqrcode.png
)
在这个示例中,组件-表单组件下有slider100,100个滑块跟随手指移动,大家可以体验看看流畅度。
在这个示例中,组件-表单组件下有slider100,100个滑块跟随手指移动,大家可以体验看看流畅度。
打开GPU呈现模式,可以看到没有一条竖线突破那条红色的掉帧安全横线,也就是没有一帧掉帧。
打开GPU呈现模式,可以看到没有一条竖线突破那条红色的掉帧安全横线,也就是没有一帧掉帧。
<video
id=
"video"
preload=
"none"
controls=
"controls"
height=
"400px"
src=
"./static/test-cross/uni-app-x-slider.mp4"
></video>
<video
id=
"video"
preload=
"none"
controls=
"controls"
width=
"185px"
height=
"400px"
src=
"./static/test-cross/uni-app-x-slider.mp4"
></video>
uni-app x是一次大胆的技术突破,分享下DCloud选择这条技术路线的思路:
uni-app x是一次大胆的技术突破,分享下DCloud选择这条技术路线的思路:
...
@@ -266,12 +276,14 @@ DCloud做了很多年跨平台开发,uni-app在web和小程序平台取得了
...
@@ -266,12 +276,14 @@ DCloud做了很多年跨平台开发,uni-app在web和小程序平台取得了
那么App平台,为什么不能像web和小程序那样,直接编译为App平台的原生语言呢?
那么App平台,为什么不能像web和小程序那样,直接编译为App平台的原生语言呢?
uni-app x的推出,目标不是改进跨平台框架的性能,而是给原生应用提供一个更高效的写法。
**uni-app x,目标不是改进跨平台框架的性能,而是给原生应用提供一个跨平台的写法。**
这个思路的转换使得uni-app x超越了其他跨平台开发框架。
在web端编译为js,在小程序端编译为wxml等,在app端编译为kotlin。
在web端编译为js,在小程序端编译为wxml等,在app端编译为kotlin。
每个平台都只是帮开发者换种一致的写法而已,运行的代码都是该平台原生的代码。
每个平台都只是帮开发者换种一致的写法而已,运行的代码都是该平台原生的代码。
同样业务功能的app,使用vue的写法,可比手写纯原生快多了。也就是uni-app x对开发效率的提升不只是因为跨平台,单平台它的开发效率也更高。
另外,
同样业务功能的app,使用vue的写法,可比手写纯原生快多了。也就是uni-app x对开发效率的提升不只是因为跨平台,单平台它的开发效率也更高。
其实google自己也知道原生开发写法太复杂,关于换种更高效的写法来写原生应用,他们的做法是推出了compose UI。
其实google自己也知道原生开发写法太复杂,关于换种更高效的写法来写原生应用,他们的做法是推出了compose UI。
...
@@ -280,15 +292,17 @@ uni-app x的推出,目标不是改进跨平台框架的性能,而是给原
...
@@ -280,15 +292,17 @@ uni-app x的推出,目标不是改进跨平台框架的性能,而是给原
源码见:
[
https://gitcode.net/dcloud/test-cross/-/tree/master/test_compose_ui_slider_100
](
https://gitcode.net/dcloud/test-cross/-/tree/master/test_compose_ui_slider_100
)
,
源码见:
[
https://gitcode.net/dcloud/test-cross/-/tree/master/test_compose_ui_slider_100
](
https://gitcode.net/dcloud/test-cross/-/tree/master/test_compose_ui_slider_100
)
,
项目下有打包后的apk可以直接安装体验。
项目下有打包后的apk可以直接安装体验。
打开GPU呈现模式,可以看到大多数竖线都突破那条红色的掉帧安全横线,也就是掉帧严重。
打开GPU呈现模式,可以看到
compose ui的100个slider拖动时,
大多数竖线都突破那条红色的掉帧安全横线,也就是掉帧严重。
<video
id=
"video"
preload=
"none"
controls=
"controls"
height=
"400px"
src=
"./static/test-cross/compose-ui-slider.mp4"
></video>
<video
id=
"video"
preload=
"none"
controls=
"controls"
width=
"185px"
height=
"400px"
src=
"./static/test-cross/compose-ui-slider.mp4"
></video>
uni-app x在app端,不管逻辑层、渲染层,都是kotlin,没有通信问题、没有混合渲染问题。不是达到了原生的性能,而是它本身就是原生应用,它和原生应用的性能没差别。
uni-app x在app端,不管逻辑层、渲染层,都是kotlin,没有通信问题、没有混合渲染问题。不是达到了原生的性能,而是它本身就是原生应用,它和原生应用的性能没差别。
这也是其他跨平台开发框架做不到的。
当然uni-app x刚刚推出,还有很多不成熟的地方,比如前文diss微信的暗黑模式,其实截止到目前uni-app x还不支持暗黑模式。甚至iOS版现在只能开发uts插件,还不能做完整应用。
当然uni-app x刚刚推出,还有很多不成熟的地方,比如前文diss微信的暗黑模式,其实截止到目前uni-app x还不支持暗黑模式。甚至iOS版现在只能开发uts插件,还不能做完整应用。
但这个技术路线是
最佳路径,随着产品的迭代完善,它能真正解决开发者开发效率和性能兼得的问题,让跨平台开发不如原生,成为历史
。
但这个技术路线是
产业真正需要的东西,随着产品的迭代完善,它能真正解决开发者开发效率和性能兼得的问题,
**让跨平台开发不如原生,成为历史**
。
再次欢迎体验uni-app x的示例应用,感受它的启动速度,渲染流畅度。
再次欢迎体验uni-app x的示例应用,感受它的启动速度,渲染流畅度。
...
@@ -296,6 +310,8 @@ uni-app x在app端,不管逻辑层、渲染层,都是kotlin,没有通信
...
@@ -296,6 +310,8 @@ uni-app x在app端,不管逻辑层、渲染层,都是kotlin,没有通信
-
一个是组件-表单组件-slider100,100个滑块跟随手指移动。
-
一个是组件-表单组件-slider100,100个滑块跟随手指移动。
-
另一个是模版-scroll-view自定义滚动吸顶,在滚动时实时修改元素top值始终为一个固定值,一点都不抖动。
-
另一个是模版-scroll-view自定义滚动吸顶,在滚动时实时修改元素top值始终为一个固定值,一点都不抖动。
我们不说服您使用任何开发技术,但您应该知道它们之间真实的差别。
![](
https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app-x/hello-uniappx-apkqrcode.png
)
我们不说服您使用任何开发技术,但您应该知道它们的原理和差别。
欢迎指正和讨论。
欢迎指正和讨论。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录