Android客户端中混搭HTML页面,会出现虽然HTML内容载入完成,标题也正常显示,但是整个网页需要等到近秒(甚至更多)时间才会显示出来。研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解。

一般人堆WebView的加速,都是建议先用webView.getSettings().setBlockNetworkImage(true); 将图片下载阻塞,然后在浏览器的OnPageFinished事件中设置webView.getSettings().setBlockNetworkImage(false); 通过图片的延迟载入,让网页能更快地显示。

但是,通过实际的日志发现,Android的OnPageFinished事件会在Javascript脚本执行完成之后才会触发。如果在页面中使用JQuery,会在处理完DOM对象,执行完$(document).ready(function() {});事件自会后才会渲染并显示页面。如下图

可以看到在载入完最后一个JS脚本之后,对DOM元素的渲染和处理就花了秒,然后执行了AJAX方法载入外部页面又花了、秒,最后才会触发onPageFinished显示页面。再往后由于程序中设置了setBlockNetworkImage(false),所以开始载入外部图片。(如果不控制这个参数,图片载入会在渲染期间下载。  综上,由于JS脚本的处理,造成了一张页面打开多花了秒左右时间。而同样的页面在iPhone上却是载入相当的快,显示完页面才会触发脚本的执行。(提示:如果使用JQueryMobile,更会慢得离谱)

要解决这个问题,就是想办法让浏览器延迟加载JS脚本,但是Android的WebView控件没有这样的参数。无法单独阻塞JS脚本,另外有个setBlockNetworkLoads,用了之后也无法实现类似图片的异步载入的功能,页面成了光板,连CSS也阻塞了。

就是这个问题困扰了很久,直到在做HTML照片墙时,由于setBlockNetworkImage在OnPageFinished之后才会释放,导致在JS脚本载入图片过程中无法获取图片的高宽信息,最后巧妙地通过$(document).ready(function() {setTimeout(func,10)});,成功将函数在onPageFinished之后运行。那么延伸来想,是否可以将JS脚本也用同样的方式延迟载入呢?

答案是肯定的,在http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload可以找到JS脚本延迟加载的第三方组件。

我改造了之前速度奇慢的界面,我所使用的核心JS代码如下:

loadComplete(){

//instead of document.read()

}

function loadscript()

{

LazyLoad.loadOnce([

'/css/j/jquery-1.6.2.min.js',

'/css/j/flow/jquery.flow.1.1.min.js',

'/css/j/min.js?v=2011100852'

], loadComplete);

}

setTimeout(loadscript,10);

就是混搭setTimeout和layzload,让JS脚本可以真正在onPageFinish之后执行。

最终执行的效果如图:

可以看到非常显著的改善,从onPageStarted到onPageFinished只用了秒不到的时间,这个时间主要花在HTML和CSS渲染上。从界面上来看,就是一闪而过的网页载入进度条,立即显示CSS渲染过的页面效果,然后再载入并执行JS脚本,逐块显示需要通过AJAX获取的数据。

综上,解决Android载入WebView页面慢的问题,不是Android程序员的事情,而是Web前端工程师的问题。如果您使用基于WebView的Android第三方壳工具(例如PhoneGap,可以通过这种方式改善UI界面的响应时间)。

发布这个解决方案,希望基于Web的客户端解决方案能更上一层楼,让HTML和原生APP混搭或的纯WEBAPP实现效果可以更理想,功德无量......

Android的WebView控件载入网页显示速度慢的究极解决方案

Android的WebView控件载入网页显示速度慢的究极解决方案 [转载来源自http://hi.baidu.com/goldchocobo/] 秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国 ...

Android学习笔记50:使用WebView控件浏览网页

在Android中,可以使用Webview控件来浏览网页.通过使用该控件,我们可以自制一个简单的浏览器,运行效果如图1所示. 图1 运行效果 1.WebView 在使用WebView控件时,首先需要在 ...

通过webview控件访问网页

初学android开发,在界面编辑器上放了一个webview控件,可惜不知道如何访问控件,在网上看到一段代码记录下来,算是第一次学习笔记. 要想让程序联网需要授权,在AndroidManifest.x ...

修复android下webView控件的总结

游戏中有一个收集玩家问题反馈的网页,很早之前就有同事反映说android在游戏无法上传附件,在浏览器中是可以正常使用的.最近能腾出手来的时候,就仔细看了一下这个问题,发现很里藏着不少问题,这里一一记录 ...

Android 使用WebView控件展示SVG图

1.添加布局界面代码:

android 调用webview控件,为逆向h5app做准备

activity对应layout文件加入:

C++ CRTP singleton

C++ CRTP 是个很有意思的东西,因为解释原理的文章很多,但是讲怎么用的就不是很多了. 今天就稍微写下CRTP(奇异递归模板模式)的一个有趣的用法:Singleton(单例模式) 单例有很多中写法 ...

ES6 对象的扩展(上)

属性的简介表示法 允许直接写入变量和函数作为对象的属性和方法,这样的书写更简洁. function f( x, y ) { return { x, y }; } // 等同于 function f( ...

11-jQuery的事件绑定和解绑

1.绑定事件 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (String) : 事件类型 data ( ...

ubuntu安装mysql 时未提示输入密码

我在Ubuntu16.04版本中使用终端安装MySQL5.7时,按照度娘的教程,搜索如何安装,大多是如下代码: sudo apt-get install mysql-server sudo apt-g ...

RNA测序相对基因表达芯片有什么优势?

RNA测序相对基因表达芯片有什么优势? RNA-Seq和基因表达芯片相比,哪种方法更有优势?关键看适用不适用.那么RNA-Seq适用哪些研究方向?是否您的研究?来跟随本文了解一下RNA测序相对基因表达 ...

API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过

API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过   http://www.itdks.com/dakashuo/new/dakalive/detail/1407

android的webview控件载入网页显示速度慢的究极解决方案,【转】Android的WebView控件载入网页显示速度慢的究极解决方案...相关推荐

  1. Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练-绿豆通讯录)】

    目   录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...

  2. android 页面默认不弹软键盘_Android 软键盘的全面解析,让你不再怕控件被遮盖!...

    作者 | Vander丶 编辑 | 苏宓 微信公众号 | mobilehub 背景 Android软键盘这块从我入职到现在,是一个一直纠缠我的问题. 从布局挤压,到EditText显示不全,在到弹出时 ...

  3. pyqt5中控件缩放功能_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...

    PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...

  4. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  5. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)...

    VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...

  6. altas(ajax)控件(二十):让BulletedList拥有客户端索引、分页和排序的控件

    PagingBulletedList agingBulletedList扩展器控件可以让某个ASP.NET BulletedList拥有客户端索引.分页和排序的功能. 示例运行效果: 图(1) 图(2 ...

  7. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

    VB6.0中,DTPicker日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值(解决方案) 参考文章: (1)VB6.0中,DTPicker日期.时间控件不允许为空时,采用文本框与日 ...

  8. android 显示表情符号,吓一跳 同一表情符号iPhone和Android机显示效果差别这么大...

    新浪科技讯 北京时间4月14日下午消息,最新研究显示,由于没有统一标准,所以使用相同Unicode代码的表情符号在不同设备上的显示效果截然不同,很容易引起误会. 你或许没有发现,你发送的表情符号在不同 ...

  9. android n进入分屏代码分析_平板电脑全面进入多任务时代,Android N原生支持分屏显示...

    去年十月苹果WWDC上发布iOS9首次原生支持iPad平板电脑的分屏显示,希望通过大屏多任务iPad产品,向微软的Surface为代表的Windows10平板PC发起挑战,撬开商务和企业级市场.近日据 ...

  10. 记-网页上某些图片用 火狐 、谷歌、360极速模式等都可以正常显示。但是用 ie、360兼容模式 却不能正常显示。浏览器报DOM7009: 无法解码 URL 处的图像

    一.问题描述 网页上某些图片用 火狐 .谷歌.360极速模式等都可以正常显示.但是用 ie.360兼容模式 却不能正常显示.浏览器报DOM7009: 无法解码 URL 处的图像. 二.原因 Conte ...

最新文章

  1. SpringBoot2.0.3之quartz集成,不是你想的那样哦!
  2. 随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据、随机森林分类聚类(Kmeans)降维后的合成(append)数据
  3. 云计算适用于中小企业吗?
  4. [CF 526 F] Pudding Monsters(单调栈 + 线段树)
  5. av linux,AV Linux 新版发布,多少人知道
  6. (33)FPGA原语设计(BUFGCE)
  7. String常见问题
  8. pyecharts显示所有x轴_基于Pyecharts可视化大屏案例一(1)
  9. Salesforce删除数据时出现Insufficient privileges的可能原因
  10. Spring总结七:AOP动态代理的实现
  11. 数据库设计以及PD数据导入数据库
  12. TeeChart控件
  13. 爬虫入门教程-Spider
  14. Java生成png文件字体不清晰_将Graphics2D写入BufferedImage - 字体分辨率较差
  15. 计算机机型分pc机和什么,三种等分的电脑打印纸一般指什么尺寸
  16. JavaMail QQ邮箱发送内容+图片
  17. 怎样成为优秀的前端_如何成为优秀的在线社区会员
  18. weblogic漏洞总结复现
  19. Java基础篇——三大特性(封装)
  20. FINDSTR 命令使用详解

热门文章

  1. 老戚的黑科技之ssh无密码登录
  2. Dev-c++下‘stoi‘ was not declared in this scope解决办法
  3. 汽车零部件制造业ERP需求分析(转)
  4. 带你搞懂Thrift核心源码(JAVA)
  5. 国产光谱共焦位移传感器优势有哪些?
  6. mysql跨年统计年前年后_PHP面试总结 - osc_chmxgjn9的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. TeamSpeak服务器无法运行,如何在启动时运行TeamSpeak3服务器?
  8. ffmpeg实现mjpeg摄像头的采集-预览-拍照
  9. 从《中台战略》到《中台实践》,云徙科技如何拆解中台建设方法论?
  10. 【备战秋招系列-4】Java高频知识——并发、Spring、MySQL、redis