前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >IE之页面加载慢.

IE之页面加载慢.

作者头像
用户1216491
发布于 2018-01-24 08:13:40
发布于 2018-01-24 08:13:40
2.4K00
代码可运行
举报
文章被收录于专栏:xdecodexdecode
运行总次数:0
代码可运行

场景

场景是大屏页面一张深色背景, 里面一些文本元素以及图表展示.

结果在IE下发现加载异常缓慢, 还有部分人员反馈页面卡死.

后台读写优化

默认处理图片逻辑是, ImageIO读取原图, 转成byte[], base64编码后, 放到dom里.

这样图片越大, 后台转的byte[]数组越大也越卡, 那么改进思路自然是压缩, 以及去除ImageIO读取.

使用Thumbnailator, 对超过1MB的图片进行压缩, 一般10MB的深色图片, 

压缩率用75%, 压缩后也就几百KB. 然后把base64编码写在dom里的实现方式改成了css加载src.

改完之后, 后台已经完全不涉及到读写图片卡顿问题了.

图片加载方式

但是前台依然会空白很久, 然后出现加载图标, 最后才开始各个组件加载渲染. 那么这个空白跟图片背景有没有关系呢? 

答案是no, 不过图片会占用服务器带宽, 所以需要压缩下原图或者直接放到cdn上.

关于图片渲染是否影响内容加载可以做个很简单的实验, 将Chrome控制台调整到Network,

选择fast3g网络模式, 可以模拟一个低速网络. 

访问一张带背景图的表单, 可以看到内容是先渲染出来的, 然后是加载图片.

图片是一段一段的加载的, 并不会影响内容主体渲染, 也不是导致初始页面空白的元凶.

如果觉得图片分段加载效果不好的话, 可以把图片改成渐进式加载. 效果如下:

可以明显看到图片从模糊到清晰的一个过程, 企业微信里聊天传输图片用的也是渐进式加载.

如何生成渐进式图片呢? 只需要在photoshop编辑图片的时候, 选择交错保存PNG. 

也可以用代码处理, 设置ProgressiveMode即可.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1         File file = new File("D:/o.jpg");
 2         BufferedImage image = ImageIO.read(file);
 3         Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("jpeg");
 4         ImageWriter writer = null;
 5         while (it.hasNext()) {
 6             writer = it.next();
 7             break;
 8         }
 9         if (writer != null) {
10             ImageWriteParam params = writer.getDefaultWriteParam();
11             params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 设置可否压缩
12             params.setCompressionQuality(0.75f); // 设置压缩质量参数
13             params.setProgressiveMode(ImageWriteParam.MODE_DEFAULT);
14             ImageOutputStream output = ImageIO.createImageOutputStream(new File("D:/progressive.jpg"));
15             writer.setOutput(output);
16             writer.write(null, new IIOImage(image, null, null), params);
17             output.flush();
18             writer.dispose();
19         }
20     }

重复一下, 图片渐进式和分段式, 只是提升交互体验, 加载速度并没有变化.

IE与Gzip

如果不是图片导致的加载慢, 为什么很多小伙伴反馈大屏慢呢? IE以及Edge似乎更卡一点. 

我们用Chrome访问一张大屏模板, 对比下IE访问模板的响应时间. 两者都预先清理缓存.

访问大屏地址 http://106.15.45.188:8088/WebReport/ReportServer?op=fs_main&cmd=entry_report&id=2571

截图一看清楚了, IE里看上去Gzip就没起作用, 实实在在的加载原js. 用了4s才加载完.

看下代码中Gzip的处理, 直接把 IE全家 列到不支持Gzip的列表里了.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 public boolean supportGzip() {
2    return !(isIE()) && !(isWebkit() && J2EEContainer.isWebLogic());
3 }
4   
5 public boolean isIE() {
6    //ie10之后不能根据msie判断需根据trident,先带上edge看看
7    return "msie".equals(this.browser) || this.userAgent.contains("trident") || this.userAgent.contains("edge");
8 }

实际上高版本IE早就支持Gzip了, 因为IE11里http的响应头已经写了Accept-Encoding: gzip, deflate.

找了早期的IE9看了下, 也是支持Gzip压缩的.

修复验证

因为是线上环境, 我们本地没还原客户那边的卡顿很久空白的情况, 猜测跟网速有关系.

需要用一个软件来模拟低速网络环境,. 首选自然是fiddler, 只需要一步设置即可.

Rules → Performances → Simulate Modem Speeds.

重复上述访问entry操作, 等得的快炸的时候, 页面终于加载出来了.

低速网络下, 两个js累计加载耗时561s!!! 

开启Gzip后, 跟Chrome速度一样了, 两个js累计114s, 越是低速网络, Gzip效果越明显.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
微信消息推送神器pushplus介绍,让消息推送如此简单
原生实现微信消息推送需要申请公众号、成为开发者,实现微信公众号接入和消息推送等接口。
杨永贞
2022/10/25
12.2K0
微信消息推送神器pushplus介绍,让消息推送如此简单
消息推送平台的设计
第一点:导入消息接收人的数据可以支持excel导入,然后去各个业务线去拉取完整的用户id即可,导入的数据需要分页提交给服务或者分页落库
花落花相惜
2021/11/23
2.5K0
小程序消息推送x微搭低代码,微信消息推送快速上手实操教程
近期有很多同学关注小程序消息推送的问题,今天就简单介绍下微搭低代码开发的小程序应用如何实现微信订阅消息的推送,目前方案有两种:
漫话开发者
2023/01/02
2K0
小程序消息推送x微搭低代码,微信消息推送快速上手实操教程
揭秘!消息管理平台的实现原理
这个系列就以「消息管理平台」来打个样吧,这是我维护近一年的系统了。这篇文章可以带你全面认识「消息管理平台」是怎么设计和实现的,有兴趣的同学欢迎在评论区下留言和交流。
Java3y
2020/09/24
1.6K0
揭秘!消息管理平台的实现原理
【随笔】自动化油价推送:GitHub Actions 实战
在网上找到一个油价网站,http://www.qiyoujiage.com , 定位到自己所在的具体地址,例如:http://www.qiyoujiage.com/hubei/xxx.shtml ,通过 jsoup 抓取关键数据,如 92#-0# 汽油价格等其他自己需要的数据。
框架师
2023/12/16
2070
【随笔】自动化油价推送:GitHub Actions 实战
Spug推送平台:开发者的消息推送神器
外滩首席运维
2025/02/25
1120
Austin消息中心
写这篇文章是首先我之前也是做过消息中心的需求,当时3y开源了它的项目Austin,当时觉得挺好的,之后我负责的消息中心重构了一版,现在想想也挺开心的。所以想把之前学习的整理了下来。
路行的亚洲
2023/08/31
9730
Austin消息中心
带你了解什么是Push消息推送
而Push消息是这么多种类型之中非常重要和常用的一种类型,最近也希望针对Push推送做些新的尝试,于是去学习学习些Push消息运营的技巧。
Java3y
2019/08/29
2.6K0
带你了解什么是Push消息推送
喜马拉雅亿级用户量的离线消息推送系统架构设计实践
对于IM的开发者来说,离线消息推送是再熟悉不过的需求了,比如下图就是典型的IM离线消息通知效果。
JackJiang
2021/07/14
1.4K0
喜马拉雅亿级用户量的离线消息推送系统架构设计实践
Android消息推送:手把手教你集成小米推送
继承自PushMessageReceiver(抽象类,继承自BroadcastReceiver),其作用主要是:
Carson.Ho
2019/02/22
4.7K0
消息推送技术,除了websocket还知道那些?
WebSocket是一种网络通信协议,它提供了在单个TCP连接上进行全双工通信的能力。这意味着数据可以在客户端和服务器之间双向流动,而无需客户端通过轮询或重复请求来获取更新。
老K博客
2024/06/01
7120
消息推送技术,除了websocket还知道那些?
移动端开发之APP消息推送[通俗易懂]
有这样一种场景,当你在手机APP上输入你的信息,会自动跳出一个弹窗,表示某任务已执行。最简单的一个例子就是当你输入手机号,点击获取验证码的时候,就会跳出一个对话框,说“验证码已发送到手机,请注意查收”,这些都是如何实现的。
全栈程序员站长
2022/09/05
3.6K0
移动端开发之APP消息推送[通俗易懂]
如何构建一套高可用的移动消息推送平台?
消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入复杂性,统计缺失等问题,提供了一整套平台级的高可用消息推送解决方案。实践中,借助于该平台,不仅能提能显著提高消息到达率,还能提高研发效率,并道出了移动开发基础设施的平台化架构思路。
Java3y
2019/09/12
3.2K0
如何构建一套高可用的移动消息推送平台?
微信小程序之订阅消息推送java开发
2019年10月份微信发布了模板消息整改公告由模板消息更改为订阅消息: 具体公告地址:https://developers.weixin.qq.com/community/develop/doc/
猿码优创
2020/06/12
5.1K0
喜马拉雅亿级用户量的离线消息推送系统架构设计实践
对于IM的开发者来说,离线消息推送是再熟悉不过的需求了,比如下图就是典型的IM离线消息通知效果。
JackJiang
2021/07/12
1.1K0
SignalR 中丰富多彩的消息推送方式
在上一篇 SignalR 文章中,演示了如何通过 SignalR 实现了简单的聊天室功能;本着简洁就是美的原则,这一篇我们也来聊聊在 SignalR 中的用户和组的概念,理解这些基础知识有助于更好的开发基于 SignalR 的应用,通过对用户和分组的理解,进一步扩展出对用户和分组的管理,以及消息推送的各种方式,为全面接入 SignalR 做准备。
梁规晓
2019/04/11
1K0
SignalR 中丰富多彩的消息推送方式
小程序消息推送,订阅消息的实现,借助云开发云函数实现定时推送订阅消息功能
由于长期性订阅消息,目前仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。仅就线下公共服务这一点,长期性订阅消息就和大部分开发者无缘了。 所以我们这里只能以使用一次性订阅消息为例。
编程小石头
2022/03/18
2.6K0
小程序消息推送,订阅消息的实现,借助云开发云函数实现定时推送订阅消息功能
小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
至于如何创建模板消息,如果获取模板id我这节就不再讲解,不知道的同学可以查看我上篇文章《借助云开发实现小程序订阅消息和模板消息的推送功能》里面有详细的讲解。
编程小石头
2020/01/05
4.9K0
小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
Java点餐系统和点餐小程序新加微信消息推送功能
我们今天就以排号入座为例,当排号等位的用户被叫号时,会给用户发送一条微信订阅消息。就是在管理点击下图的可入座时,发送订阅消息给用户。
编程小石头
2020/10/11
2.1K0
Hutool该怎么用?
在日常开发中,我们会使用很多工具类来提升项目开发的速度,而国内用的比较多的 Hutool 框架,就是其中之一。
程序猿川子
2024/05/21
2580
Hutool该怎么用?
推荐阅读
相关推荐
微信消息推送神器pushplus介绍,让消息推送如此简单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文