Android 的 webview 是基于 webkit 内核,运行效果和 firefox 上差不多.
1.加载资源的速度不慢,但是资源多了就很慢.图片, css, js, html 这些资源每个大概需要 10-200ms,一般都是 30ms 就 ok 了.如果一个页面上的资源很多,就很浪费时间.
2.Js 和 css 的执行速度对比,如果页面都是用 js 生成 DOM ,添加样式等也用 js 添加.加载一个页面居然要 5-6 秒,假设js 的执行效率不高,然后就把能用 css 的地方都用 css,能直接写到 html 上的就不用 js 动态生成.结果,速度并没有多大的提升,最多提升了 1 秒.看来,Js 的执行速度虽然比不上 css,但是还不至于慢到那种程度.那会是什么原因使得页面加载速度这么慢?经过仔细的排查,最终发现,是因为 jQuery 框架.
Webview 加载页面的顺序是这样的:先加载 html,然后从里面解析出 css ,js 文件和页面上写死的图片资源进行加载,如果 webkit 的缓存里面有,就不加载.加载完这些资源之后,就进行 css 的渲染和 js 的执行.Css 的渲染一般不需要很长时间,几十毫秒就 ok.关键是 js 的执行,如果用了 jQuery,则执行起来需要 5-6 秒.而在这段时间,如果不在 webview 里设置背景,网页部分是白色的,很难看.这是一个很糟糕的用户体验.
所以如果用网页布局程序,最好别用很大的 js 框架.
3.网页和 Java 之间的互调.
1)Java 调用 js 里面的函数,速度并不令人满意,大概一次一两百毫秒吧,如果要做交互性很强的事情,这种速度会让人疯掉的.而反过来就不一样了,js 去调 java 的方法,速度很快,基本上 40-50 毫秒一次.所以尽量用 js 调用 java 方法,而不是 java 去调用 js 函数.
2)Java 调用 js 的函数,没有返回值,而 Js 调用 java 方法,可以有返回值.返回值可以是字符串,也可以是对象.如果是字符串,有个很讨厌的问题,第4点我会讲的.如果是对象,这个对象会被转换为 js 的对象,直接可以访问里面的方法.但是我不推荐 java 返回给 js 的是对象,除非是必须。因为 js 收到 java 返回的对象,会产生一些交换对象,而如果这些对象的数量增加到了 500 或 600 以上,程序就会出问题。所以尽量返回基本数据类型或者字符串.
3)Js 调用 java 的方法,返回值如果是字符串,你会发现这个字符串是 native 的,不能对它进行一些修改操作,比如想对它 substr,取不到.怎么解决呢?转成 locale 的.使用 toLocaleString() 函数就可以了.不过这个函数的速度并不快,转化的字符串如果很多,将会很耗费时间.
4.网页上拖动元素.
网页上有一个 div,想要拖动它到另外一个地方,怎么做?如果用 PC 上的网页做法,监听 onmousedown,onmousemove 和 onmouseup 就可以了.但是在手机上,事件模型就不一样了.在网页上点击,拖动,然后释放,手离开屏幕的时候,webview 才会触发 onmousedown, onmousemove, onmouseup 事件.所以,要想拖动,不能这么做.这个问题困扰我很长时间,后来发现 iphone 上的做法,才解决了.Iphone 上的 webview 有专为触摸屏设计的事件 ontouchstart,ontouchmove,ontouchend,这几个事件的响应是实时的,就能解决拖动的问题了.
这个是整理别人的文章,贴上来供大家参考.
分享到:
相关推荐
NULL 博文链接:https://byandby.iteye.com/blog/1041789
Android 中不在用webview的情况下 执行js代码并得到返回值
android不使用webview与js交互
在Android的webview中定制js的alert,confirm和prompt对话框的方法
Android webview先只展示部分内容,解锁后展示剩余内容功能的示例代码
Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一...这样动态生成webview就能避免内存泄漏,可是这样会导致部分机型的w
uniapp 使用webView通讯
WebView实现JS效果和a标签点击事件,案例包含四个点击事件,出现信息提示。
以下方法可以成功! @Override public void onClick(View view) {...当使用loadUrl加载网页的时候,有时候会出现调用系统浏览器加载网页的现象,网上大部分的解决方案是 : webView.setWebViewClient(new WebViewCli
android使用webView实现java程序与js脚本的相互调用,
现在web app越来越多,webview控件的使用也越来越重要。 有时我们会在启动页或引导页之后,加载一个webview为控件的主页。 但如果跳转之后再加载,会看到webview有一个加载的过程,如果网页较大可能加载起来会很慢。...
这是AOSP的webview,包名com.android.webview,不是google的webview
webView执行js代码获取标签内容
Android WebView 去除标题 利用javacript交互
webview全称叫做Android System WebView,它是Android生态系统的重要组成部分,也是Chrome浏览器的内核。可以让你的手机变得瞬间畅通,它会及时优化网页相关数据,有着接入式的操作体验数据,各种类型的应用程序可...
Android Webview 滑动监听 放大缩小查看网页图片
调试基于WebView的App最舒服的工具Chrome自带的开发者工具,其中有我们熟悉的Dom树调试,JS调试,Network监视等等功能。 Google提供的调试Android上WebView的步骤: 1.开启手机上的USB调试功能并且连接计算机手机端...
WebView2Loader.dll 包含 x86 x64 Rad Studio 使用
QT webview浏览器相关开发,简单webview应用开发
Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...