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

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

框架自己的改进有:java

  1. 修正flushUpdaters中updater对象的泄露问题(须要clearArray一下)
  2. 优化diffChildren的逻辑,防止出现parentNode等于null的状况(好比为文本节点取firstChild)
  3. 简化ControlledComponent与dispose模块
  4. 处理updateElement方法中两个虚拟DOM的引用同样时,调用flattenChildren时,旧的vchildren丢失的状况
  5. 移除Refs中的createStringRef,createInsanceRef,添加fireRef,
    重构detachRef,clearRefs,cloneElement,createElement有关ref的部分,尽可能减小闭包的应用
  6. 将updateQueue移出全部diff方法的传参列表,合并到调度器中
  7. 新添React16的createPortal API

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

此外,还有周边的优化webpack

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

clipboard.png

  1. 改善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);

使用git

npm i anujs

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

npm i -g anu-cli

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

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加星星与试用!!!chrome

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

相关文章
相关标签/搜索