随着react的流行,针对其改良方案也逐渐增多起来。有的在体积上进行优化,有的在性能上进行优化,有的在两者上做努力。anu就是最后一种情况。
anu是我继avalon之后又一个新框架,解决移动端打包过大的问题而诞生的。内部名字叫qreact,它早期是基于preact改进来的,已经在公司业务上使用了。
preact, react-lite是现在比较流行的react-like框架。当然也有人提到inferno,但inferno要改动过多。参考这些框架,我的迷你react框架anu走得更远,完全兼容react-redux
, react-router
, 官方chrome调试工具
。性能上也非常优秀。
下面是dbmonster的测试结果:
preact想在业务线用其实还需要用preact-compat,用了后性能可能折损过半。
体积大概是原来的1/10, 从3万行变成1.7K
更多例子可以见GITHUB仓库
https://github.com/RubyLouvre...
https://github.com/RubyLouvre...
我会继续优化anu,让它的浏览器兼容性更好,性能更好。欢迎大家加星与试用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script type='text/javascript' src="./dist/React.js"></script>
<script src="./test/babel.js"></script>
<script type='text/babel'>
var s
var str = ''
class Component1 extends React.Component {
componentWillUnmount() {
str += 'xxxx'
}
render() {
return <div className="component1">{this.props.children}</div>
}
}
class Component2 extends React.Component {
componentWillUnmount() {
str += ' yyyy'
}
render() {
return <div className="component1">xxx</div>
}
}
var index = 1
function detect(a) {
if (index === 1) {
// expect(typeof a).toBe('object')
} else {
// expect(a).toBeNull()
}
}
class App extends React.Component {
constructor(props) {
super(props)
this.handleClick = this.handleClick.bind(this)
}
handleClick() {
index = 0
this.forceUpdate()
}
render() {
return index ?
<div ref='a' onClick={this.handleClick.bind(this)}>
<Component1>
<p ref={detect}>这是子节点</p>
<Component2 />
</Component1>
</div> : <div>文本节点</div>
}
};
window.onload = function(){
s = ReactDOM.render( <App />, document.getElementById('example'))
}
</script>
</head>
<body>
<div>这个默认会被清掉</div>
<div id='example'></div>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。