Comments (7)
这不是你一直引以为豪的feature吗,之前一直在群里吹
from kbone.
好吧,我承认我吹,那现在咋办,自定义组件递归去描述一棵树,真的不够优雅
from kbone.
跑了下用例,看到的是,目前是限制死了,5层
这种限制在一颗大的 dom 树的情况下,很令人绝望的
其实我一直搞不懂,为什么支持一下 template 的递归,方便所有人,就是不去支持呢,是因为 template 递归有什么严重问题吗,其他的小程序都是支持的
from kbone.
@132yse 关于 template 支持递归我帮你跟相关同事提一下,当前确实是有个递归检测会终止。(其实先前也有考虑过那个方式,wxParser 好像就这么干的来着?只是那个递归检测在就放弃了)
fard 不了解,不过 kbone 是默认利用 5 层静态模板 + 自定义组件拼接的方式来做的,性能直接对比原生纯静态模板会略慢一些,因为会有自定义组件创建开销。但是自定义组件的一个好处是如果做 diff 反而会快,因为不需要整棵树 diff,只需要做 shadow-tree 的 diff。然后其他问题:
1、样式问题因为用了全局样式配置,自定义组件减少封装层,保持自定义组件本身作为一个层级的做法,基本上能确保层级正确,所以 flex 应该大部分情况是生效的。
2、控制台样式这确实是个问题,可以在社区提给工具同学优化一下。
3、这个在适配层就做掉了,应该不影响开发者使用的。
template 支持递归有好有坏,就算 template 支持递归最好也是结合起来封装,因为性能除了初始渲染外,也要考虑局部更新的性能。
from kbone.
@JuneAndGreen 大致观点相同
- fard 没有写死五层,当前是,view 标签是自定义组件,view 下的简单元素用 template,但是我认为仍然不是的好方式,毕竟到处都是 view 标签的话也不好接受……
- 关于 diff,fard 就有做,但是 diff 的过程中需要封装过多的逻辑去 hack 掉 template 不支持递归的问题。这部分逻辑如果支持了 template 递归,就可以省掉。
- 完全同意关于自定义组件和 template 结合的方式,也同意局部 diff,其实这个机制在 fard 里叫做 block tree……是 vue 3 最先提出的,但是 vue3 是检测模板的 v-for v-if,相当于我们现在,v-for 外面加一个自定义组件,最初我认为是个很好的机制的
- 关于控制台样式,如果能做一个约定,比如提供一个 block 组件,这个组件不被控制台显示(和普通 block 标签一样),甚至如果可以的话,希望这个标签可以不是 shadow-dom
综上,目前来说,由于 template 不支持递归,导致 kbone 限制死了层级,导致 fard 限制死了 view 标签,导致 alita 发现层级变多会自己加一个 template
就因为这一个 feature,导致所有的同类框架都不完美,搞定 template 的递归,我们都就可以进步了呀
from kbone.
@132yse 理解,所以关于 template 递归这个我提了需求过去了,因为不是我在负责编译那块所以我也暂时没有解决办法。
不过我说的 diff 是指基础库的 diff,和我们 setData 的 diff 无关,我们的 diff 指影响 setData 的次数和大小。而基础库的 diff 是源于会将 appService 端的 setData 发给 webview 端,webview 端会对 vd 做 diff,这个 vd 的大小就取决于在不在自定义组件里面了,在里面这个 vd 就是自定义组件的 shadow-tree,在纯静态模板的页面里,就是整个页面的 shadow-tree。
另外 template 应该解决不了控制台都是 view 的问题的,除了自定义组件外应该没法自定义标签的。我觉得要推动工具去为了各个框架专门做控制台面板的显示优化是比较难的,除非提供插件方式支持开发者自己重写 wxml 面板。
from kbone.
@JuneAndGreen 嗯啊,谢谢啦,大家一起提一下
目前就,就先通过 hack 的方式来搞着
from kbone.
Related Issues (20)
- ios真机调试报错 selector = selector.replace(regexp, onProcess) HOT 1
- npm run build,h5空白 HOT 1
- vue-cli-plugin-kbone 是不是不支持webpack5项目 HOT 2
- kbone页面节点1000左右的时候,小程序就会变卡顿吗,即使没有在setData,滑动都感觉不流畅 HOT 11
- wx-input 组件 触发input 事件的时候,没监听事件返回值,以及不会同步外部value的值。 HOT 2
- 【讨论】新的小程序组件框架 glass-easel HOT 1
- wx-button open-type="agreePrivacyAuthorization" 回调无法触发 HOT 4
- -
- 是否可以支持 Construct 3 引擎? HOT 3
- createIntersectionObserver().relativeToViewport().observe() 问题 HOT 9
- npm install的时候报错,依赖冲突了 HOT 1
- 'rimraf' 不是内部或外部命令,也不是可运行的程序 HOT 1
- kbone递归方案 HOT 1
- 使用window.$$createIntersectionObserver()页面报错异常错误
- 组件属性对齐:input 组件 auto-focus 即将弃用,需要使用 focus 替代 HOT 1
- img xhr 列表下的img的src在init的时候会把所有的图片都通过xhrget一遍,在图片列表较大的时候很影响 HOT 10
- 请问在vue3项目中使用kbone-ui的mp-navigation-bar组件时,如何绑定bindback事件? HOT 3
- 小程序内嵌视频号视频,无法加载到wx-channel-video组件 HOT 11
- 瓦片地图【image】标签在图片较大时(100k左右)在真机环境不显示 HOT 1
- 请求 Blazor WebAssmebly 支持 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kbone.