`

WebView执行效率部分

 
阅读更多
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,这几个事件的响应是实时的,就能解决拖动的问题了.

    这个是整理别人的文章,贴上来供大家参考.
分享到:
评论

相关推荐

    webview开发

    SunSpider是一个JavaScript性能测试工具,用于衡量不同浏览器或WebView环境中的JavaScript执行效率。从提供的数据来看: - **Android 2.3 (Gingerbread)**:平均得分2743分。 - **Android 4.0 (ICS)**:平均得分4069...

    android开发中WebView的使用

    接着,Java代码部分展示了如何初始化和使用WebView。在`onCreate`方法中,首先设置了视图并执行初始化函数`init()`,然后加载指定的URL。初始化函数中,将WebView的JavaScript支持打开,这样网页中的JS代码可以被...

    react-native-webview.zip

    WebView组件是React Native的一个重要组成部分,它是Android和iOS系统内置的浏览器引擎,用于显示网页内容。React Native WebView库就是对这个原生组件的封装,提供了更方便的API和生命周期管理,使开发者可以在...

    android--开发中WebView的使用.docx

    通过WebView,我们可以实现一些复杂的功能,比如执行JavaScript代码、注入自定义JavaScript对象、拦截和处理URL请求、启用缓存、设置网页缩放等。结合PHP或其他服务器端技术,可以轻松地创建混合式应用,既利用了...

    reactnative高德地图拖拽定位demo使用webview实现

    通过这种方式,React Native开发者可以利用Webview封装的高德地图API,轻松实现拖拽定位功能,同时也保留了React Native的开发效率和跨平台优势。需要注意的是,为了确保用户体验和性能,需要对Webview和JavaScript...

    webview学习记录.rar

    - **注入JavaScript代码**: `WebView.loadUrl("javascript:...")`可以执行JavaScript代码,常用于页面加载后执行特定操作。 3. **安全与隐私** - **防止XSS攻击**: 使用`WebSettings....

    webView js与java互调

    总之,JavaScript与Java的互调是Android`WebView`功能的重要组成部分,它使得原生应用可以充分利用Web技术的便利性,同时也能发挥Android平台的特性。通过`addJavascriptInterface`和`evaluateJavascript`,开发者...

    webview与js混编

    在WebView中,JavaScript可以执行于用户界面中,实现网页的动态行为。 3. **混编**: 混编指的是将JavaScript代码与原生应用(Java或Swift/Objective-C)代码相结合,使得网页内容可以调用原生功能,反之亦然。 ###...

    Android WebViewJS应用源码.zip源码资源下载

    在Android应用开发中,WebView是一个重要的组成部分,它允许开发者在应用内嵌入网页,而JavaScript接口则提供了原生代码与网页内容的桥梁。 1. **Android WebView**: Android系统的WebView是基于Chromium引擎的一个...

    webview与javascript交互相关技术.docx

    2. **启用JavaScript**:为了使WebView能够执行JavaScript代码,需要通过`WebView`实例启用JavaScript支持。示例代码如下: ```java WebView webv = (WebView) findViewById(R.id.webv); webv.getSettings()....

    crosswalk-webview-22.52.561.4-arm64.zip

    2. **性能优化**:针对arm64架构进行性能优化,提升了JavaScript执行效率,增强了GPU加速功能,从而使得网页加载和交互更加流畅。 3. **Web API支持**:CrosswalkWebView 支持最新的Web API,包括WebRTC、Web Audio...

    安卓应用-手机工具-android system webview更新 v91.0.4472.120.zip

    这可能涉及到渲染引擎的优化、JavaScript执行效率的提高,以及网络请求处理的改进。 3. **安全更新**:安全补丁是任何软件更新的关键部分。这次更新可能修复了已知的安全漏洞,防止恶意代码利用WebView来攻击用户的...

    swift-OC实用工具对AFNetWorking的再次封装弹框WebView常见宏时间选择器等

    封装后的WebView工具可能提供了加载URL、执行JavaScript、拦截请求等高级功能,并且可能与Swift的其他部分更好地集成,比如通过协议或者委托方法传递数据。 4. **常见宏(Macro)**: 宏是预处理器指令,用于在...

    android原生与js互调

    这种交互方式在开发混合应用或者需要利用网页技术实现部分功能时非常有用。 一、Android Webview基本使用 1. 初始化Webview:在布局文件中添加Webview控件,或者在代码中创建并设置布局。例如: ```xml <WebView ...

    chromiumrenderingpipeline.pdf

    13. Chromium 驱动的 Android WebView(Chromium-poweredAndroidWebView):这部分解释了什么是 Android WebView,以及它的发展历史。 14. Android WebView 的版本历史:文档中没有提供具体内容,但通常涉及不同...

    swift5.0 wkwebview封装 WKWeView.zip

    1. **WKWebView 的引入**:Swift 5.0 中引入 WKWebView,它是WebKit框架的一部分,用于在iOS和macOS应用中显示Web内容。WKWebView不仅能够加载HTML页面,还支持JavaScript执行、CSS样式控制、表单交互等功能。 2. *...

    JAVA源码文本-AndroidWebviewTexture.java:UnityAssetAndroidWebviewTexture的开源部

    Unity端创建一个Java对象,然后调用Java方法来执行相应的WebView操作,如加载URL、执行JavaScript代码等。 4. **性能优化**:为了确保性能,AndroidWebviewTexture.java可能包含一些优化措施,比如缓存策略、减少...

    fxcodemirror:JavaFX WebView编辑器

    通过调用WebView的`evaluateJavaScript()`方法,JavaFX应用可以执行CodeMirror的初始化脚本,设置编辑器的属性,如语言类型、主题、快捷键等。 使用JavaFX Codemirror编辑器的步骤大致如下: 1. 引入JavaFX库和Code...

    Android PhoneGap简析

    它利用了移动设备上的原生WebView组件...虽然性能可能不如原生应用,但对于BS背景的开发者来说,PhoneGap降低了开发门槛,提升了开发效率。然而,理解和掌握其内部通信机制和架构对于优化应用性能和解决问题至关重要。

    安卓js交互demo

    在Android开发中,JavaScript与原生应用的交互是构建混合型移动应用时不可或缺的一部分。"安卓js交互demo"就是这样一个示例,展示了如何在Android应用中利用WebView组件实现JavaScript与Android代码之间的通信。...

Global site tag (gtag.js) - Google Analytics