weex官方github地址:https://github.com/apache/incubator-weex
以下内容以0.19.0版本为例
先来一段官方文档
![](https://img.haomeiwen.com/i8215544/ed5616ada54c2996.png)
weex本身是有一套网络默认的网络请求框架的,但是是基于HttpURLConnection所写,而且没有做cookie持久化存储等操作。这些我们可以从weex源码中可以看出。
![](https://img.haomeiwen.com/i8215544/184b141be638362c.png)
![](https://img.haomeiwen.com/i8215544/eb0812a4e0f6e206.png)
但是在实际的开发中我们更多的是采用okhttp来进行网络请求,而且如果原生也有网络请求,这样维护两套网络请求是非常复杂的。所以我们需要自定义我们自己的网络请求。可以在weex初始化的时候通过setHttpAdapter来进行网络请求的替换。
![](https://img.haomeiwen.com/i8215544/b6a5297c791fc16e.png)
自定义weex网络请求大致逻辑如下。
![](https://img.haomeiwen.com/i8215544/96438e361cd17d27.png)
在WXRequest我们可以获取到所要进行网络请求的所有参数,OnHttpListener进行网络请求结果的回调。
所以我们拿到WXRequest可以修改里面的任何东西,比如header,cookie,甚至是baseurl等数据之后再次进行网络请求,因为我们采用的是okhttp进行网络请求,所以我们就可以通过okhttp的拦截器进行各种操作。
![](https://img.haomeiwen.com/i8215544/9cdc526eab373fa7.png)
在这里可以返回一个自定义的OkHttpClient就可以发挥出okhttp的各种优势了。
源码地址:https://github.com/ws616628604/Weex/blob/master/playground/app/src/main/java/com/alibaba/weex/yzh/OkHttpWXHttpAdapter.java
100多行代码,比默认网络请求看起来更加简单明了
以上内容完,接下来是js加载的优化
通过源码我们发现通过renderPageByURL来加载weex页面最终是调用IWXHttpAdapter也就是我们自定义的网络请求来进行加载js文件的。当页面关闭的时候js的下载是没有停止的,这是一种资源的浪费,我们可以自己下一套通过okhttp来进行js文件下载的方案,在关闭页面的时候取消js文件的下载,以及监听js文件的加载进度来模仿web view的加载加一个进度条。
![](https://img.haomeiwen.com/i8215544/249d1fc87da302ac.png)
这种操作会涉及一下数据的传递,可参考weex自己的方案来修改。其实weex也是有示例代码的,但是不是太好,最好还是参考WXSDKInstance里面的解决方案。
![](https://img.haomeiwen.com/i8215544/949ca40e2e029615.png)
![](https://img.haomeiwen.com/i8215544/0d04fcc7dc362937.png)
后续有时间再写一些其它方面的问题。
网友评论