xinglie / xinglie.github.io

blog
https://xinglie.github.io
153 stars 22 forks source link

Nuclear看法 #28

Open xinglie opened 8 years ago

xinglie commented 8 years ago

项目地址:https://github.com/AlloyTeam/Nuclear

代码中可借签地方

内联事件

所有实例都有id,所有实例都挂到Nuclear.instances下面。直接写onclick之类的,然后渲染时在处理函数前加上所属的实例对象。

我在2011年之前也曾经这样做过,只是当时处理函数前加所属对象需要手动添加。

这样做的好处:充分利用浏览器的事件绑定,同时因为内联事件,可直观的看到节点上绑定了哪些事件,及对应的处理函数,比用选择器动态绑定要好很多。

缺点:浏览器间的差异开发者要清楚,同时要有对应的替代方案,比如onmouseenter之类的,通常这些事件类库或框架会帮我们搞定浏览器间的差异,如果像Nuclear这样的处理方式就得自己去解决。

样式scoped

通过style的scoped属性,及在不支持时打补丁的方式,让样式只在当前范围内生效。

这样的做法我觉得有这样的问题:当页面上存在多个相同区块时,style会重复解析,因为要在当前范围内生效,每个相同的区块内都有相同的style。这个其实是不必要的,更好的方案应该是 css modules

命名空间同样也会在区块嵌套的时候有问题,详情见这里

observe

确实非常小巧,可以使用。只要不去兼容ie8

set-dom

项目地址:https://github.com/DylanPiercey/set-dom 采用节点到节点的比较试,类似这种思路的还有一个这样的库:https://github.com/kof/diff-renderer

这种做法在只单独的通过string更新节点时很有帮助,但对于像magix view这样的节点,当view渲染后会对初始的节点做较大改动,这个只能在set-dom库内部做改造才有可能去适应我们的项目。而且不是很确定能改造成功,这个有空可以尝试一下