资讯专栏INFORMATION COLUMN

高性能迷你React框架anujs1.1.4发布

elva / 1853人阅读

摘要:本周在支持机票的项目中对做了大量改进,包括性能上与结构上的改进。但通过一些简化改改良,代码的可靠性大大提高了。此外,还有周边的优化在目录下提供一个,用于在旧式中替换。改善,里面内置了一个补丁,也是用于改善性能,或中的性能好差。

本周在支持机票的项目中对anujs做了大量改进,包括性能上与结构上的改进。与1.1.3一样,还是差一个组件就完全兼容阿里的antd UI库。

框架本身的改进有:

修正flushUpdaters中updater对象的泄露问题(需要clearArray一下)

优化diffChildren的逻辑,防止出现parentNode等于null的情况(比如为文本节点取firstChild)

简化ControlledComponent与dispose模块

处理updateElement方法中两个虚拟DOM的引用一样时,调用flattenChildren时,旧的vchildren丢失的情况

移除Refs中的createStringRef,createInsanceRef,添加fireRef,
重构detachRef,clearRefs,cloneElement,createElement有关ref的部分,尽量减少闭包的应用

将updateQueue移出所有diff方法的传参列表,合并到调度器中

新添React16的createPortal API

上面什么修正内存泄露与减少闭包,都是在IE下才发现的问题,在chrome下一点事都没有。但通过一些简化改改良,代码的可靠性大大提高了。

此外,还有周边的优化

在lib目录下提供一个ReduxIE.js,用于在旧式IE中替换redux。因为官方redux里面用到了一个isPlainObject方法,这个方法是由lodash库提供的,而这个方法的源码本身是来源于jQuery3.x,没有针对IE进行处理,性能很差。我将它替换为jQuery1.x的isPlainObject,就很正常运作了。

改善ReactIE.js,里面内置了一个Object.keys补丁,也是用于改善性能,es5shim.js或babel polyfill中的Object.keys性能好差。

function needFix(fn) {
    return !/native code/.test(fn);
}
function keysPolyfill() {//解决IE下Object.keys的性能问题
    if (needFix(Object.keys)) {
        Object.keys = function(obj) {
            var a = [];
            for(var k in obj) {
                if (obj.hasOwnProperty(k)) {
                    a.push(k);
                }
            }
            return a;
        };
    }
}
keysPolyfill();
setTimeout(keysPolyfill, 0);
setTimeout(keysPolyfill, 100);

使用

npm i anujs

或者使用架手架 https://github.com/Levan-Du/a...

npm i -g anu-cli

webpack.config中如何代替原来用React编写的项目

resolve: {
   alias: {
      "react": "anujs",
      "react-dom": "anujs",
        // 若要兼容 IE 请使用以下配置
        // "react": "qreact/dist/ReactIE",
        // "react-dom": "qreact/dist/ReactIE",
    
        // 如果引用了 prop-types 或 create-react-class
        // 需要添加如下别名
        "prop-types": "qreact/lib/ReactPropTypes",
        "create-react-class": "qreact/lib/createClass"
        //如果你在移动端用到了onTouchTap事件
        "react-tap-event-plugin": "anujs/lib/injectTapEventPlugin",  
   }
},

欢迎大家为anujs加星星与试用!!!

https://github.com/RubyLouvre...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89199.html

相关文章

  • 性能迷你React框架 anu1.3.0 发布

    摘要:是一款高性能框架,是目前世界上对兼容最好的迷你库。自起,相继推出,与等新,表明官方正积极由纯库向大而全的框架演变,它将会越来越好用。一些迷你库可能跟不上步伐,现在也只有有这实力跟进。 anujs1.3.0是一款高性能React-like框架,是目前世界上对React16兼容最好的迷你库。 自React16起,相继推出createContext,createPortal, createR...

    Flands 评论0 收藏0
  • 性能迷你React框架anujs1.1.3发布

    摘要:现在只差一个组件就完全支持阿里的库了。一共跑通个测试应该是全世界最接近官方的迷你框架了。以后的工作就是把的一些新特性支持了,包括组件返回数字字符串数组,钩子与。随着代码的增加,我会将一些废弃的方法拆分出来。在打包时,根据你们的喜好进行选择。 anujs现在只差一个组件(mention)就完全支持阿里的antd UI库了。一共跑通346个测试, 应该是全世界最接近官方React的迷你框架...

    hosition 评论0 收藏0
  • 性能迷你React框架 anu1.2.1 发布

    摘要:这次更新主要是改善了对焦点的处理及的语法糖的支持优化的性能,将原方法内部用到函数与对象提到全局上来,这就比官方的对象池技术更能提升性能。 anu1.2.1这次更新主要是改善了对焦点的处理及react16.2的Fragment语法糖的支持 优化fiberizeChildren的性能,将原方法内部用到函数与对象提到全局上来,这就比官方的对象池技术更能提升性能。 修复受控组件在textar...

    phpmatt 评论0 收藏0
  • 性能迷你React框架 anu1.2.2 发布

    摘要:本版本主要是对的组件进行最后一次修复工作,除了组件,都支持了。其次它是市场上唯一支持特征的库。明年也会搞一个状态库,对异步渲染友好。路由,状态库,等一套东西与一起配合使用。 本版本主要是对antd3的组件进行最后一次修复工作,除了mention组件,都支持了。 明年的精力就集中异步渲染与后端渲染上。anujs的体积经过几个版本的迭代,体积有所增大24kb(没有压缩的情况),但还是远远少...

    wanghui 评论0 收藏0
  • 性能迷你React框架anujs1.1.2发布

    摘要:在兼容官方比以往更进一步,一共跑通套测试,其中套是官方的测试。在机制,机制,虚拟更新机制,传递机制,生成策略上大大重构。是有史以来最多的更新级。但工作还没有完成,只是怕更新太多做了一次短暂的休整。 anujs1.1.2在兼容官方React比以往更进一步,一共跑通293套测试,其中179套是官方React的测试。 在ref机制,owner机制,虚拟DOM更新机制,context传递机制,...

    lemanli 评论0 收藏0

发表评论

0条评论

elva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<