美文网首页
React Native性能优化:预加载和缓存View

React Native性能优化:预加载和缓存View

作者: 以德扶人 | 来源:发表于2017-03-30 16:15 被阅读2119次

    参考比如我们做IM的时候,从会话列表进入聊天窗口,经常会有点卡顿感觉,因为聊天对话界面的结构相对比较复杂。如果每次进去都需要重新构建渲染,肯定无法在16ms内完成。解决方法就是准备一个聊天对话界面的样板,在app启动的时候将它预先加载。当需要渲染的时候,只需要将修改对应的值就可以,退去时不要去销毁它,直接cache下来留给下次使用。

    具体在react native上怎么实现,这需要定制自己的navigator,因为react native提供的navigator没有这种功能。具体原理就是在navigator的render函数里一直保留需要预先加载和缓存的view,当不需要显示的时候将它隐藏起来。同时需要缓冲的view一定要有初始样板。

    //navigator
    <MYNavigator
              {... this.props}
              routeState={routes}
              preLoad={['b']}
              routesMap={{
                "a":<A></A>,
                "b":<B></B>,
                "c":<C></C>
              }}
    
    />
    
    //navigator组件的render方法
    _renderSense(){
    
        var res=this.state.senses.map(((senseKey)=>{
            const SenseView =this.props.routesMap[senseKey.key].type
            return (
                    <Card key={senseKey.key} curSense={senseKey.key} 
                        index={this.state.index} {... this.props} >
                        <SenseView dispatch={this.props.dispatch}> 
                        </SenseView>
                    </Card>
            );
        }).bind(this))
        //预先加载和cache
        var preLoad=this._renderPreLoadFunc()
    
        return res.concat(preLoad);
    }
    
    
    //预先加载的样板的reducer
    initData=Array(100).fill(-1).map((item,index)=>this.tick+':'+index);
    export  default function routes(state = initData, action) {
        switch (action.type) {
    
            case  "UPDATE" :{
                return [...action.data]
            }
            default:
                return state
    
        }
    }
    

    相关文章

      网友评论

          本文标题:React Native性能优化:预加载和缓存View

          本文链接:https://www.haomeiwen.com/subject/jgkpottx.html