IE让我首次遭受了社会的毒打
2022年6月15日,微软终止对IE的支持,自此IE走入历史,可以说这是一个时代的终结。

自己在 2011 年刚从业时,IE 在国内的市场占有率可是遥遥领先的,下图来自于 StatCounter 网站的统计结果。

将浏览器版本再细分,排在前面的也是 IE 的四个版本,其中 IE6 的占有率最高,兼容各个版本的 IE 是当时前端的噩梦。

当时开发 PC 页面,一般需要兼容的最低版本是 IE6,过了几年后,最低版本升到了 IE8。
兼容 IE6 会让人很痛苦,当年没少遭毒打。
一、IE的体验问题
IE 的体验问题主要从开发和使用者的角度来阐述。
1)操作系统的捆绑
1995 年发生了第一轮浏览器大战,微软血拼网景,最后微软凭借操作系统与 IE 的捆绑,笑到了最后。
而这恰恰是它的第一个问题,因为操作系统中只能存在一个版本的 IE,所以要调试其他版本就比较麻烦。
当时常用的解决手段有多种,最直接的是物理扩展,多备几台电脑,安装不同的版本调试即可。
另外一种手段是安装 IETester,如下图所示,在图中有多个版本的选项。
但是在真正研发时,会发现 IETester 与真实浏览器还是有差别的,尤其是脚本方面。

还有一种是软件扩展,就是下载虚拟机,然后安装合适的 windows 操作系统。
2)调试控制台
2001 年 IE6 面世,下一代版本直到 2005 年才推出,IE6 也成为该系列产品中生命周期最长的一个版本。
2002 年,IE 市场份额更是达到了惊人的 96%,即使到了 2011 年,仍然达到了 37.81% 的市场占有率。
自己在2010年接触到了 Firefox,其中的插件 Firebug 一下子惊艳到了我,原来还能在线上直接修改网页。

非常遗憾的是,当时的 IE6 并没有配套调试控制台,直到 IE8 才有了这个功能。
在 IE6 中调试页面就会比较曲折,修改源码,手动刷新浏览器,当时也没有工具能自动刷新浏览器。
3)W3C规范
IE的很多功能都不会按 W3C 规范来实现,这就会导致在 Chrome、Firefox 等现代浏览器中表现正常,放到 IE 中,就会发生异常。
主要以 IE6 的问题为例,第一个是脚本问题,Ajax 通信在 IE6 中就要做兼容处理,如下所示。
if (window.XMLHttpRequest) {
//Firefox、 Opera、 IE7 和其它浏览器使用本地 JavaScript 对象
var request = new XMLHttpRequest();
} else {
//IE 5 和 IE 6 使用 ActiveX 控件
var request = new ActiveXObject("Microsoft.XMLHTTP");
}
当年 jQuery 那么受追捧,解决的一大痛点就是IE的兼容处理,抹平了浏览器之间的差异。
第二个是 png 透明图片,在 IE6 中,显示 png 会有一层底色,常用的是在 CSS 中添加 filter 属性。
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bac.png'); /* IE6 */
第三个是 CSS 样式,在 IE6 中没有圆角、阴影等 CSS3 属性,一般只能通过图片来实现。
这非常阻碍 CSS 的发展,已经遇到过好多次,在其他浏览器中实现了惊艳的界面效果,但无法移植到 IE6 中。
为了解决浏览器的兼容性问题(尤其是 IE),当时就出现了渐进增强和优雅降级两种思想。

4)安全性
2004 年读高中时家里通网了,使用 IE6 上网,有时候莫名其妙就下载了垃圾软件。
还会访问流氓网页,就是不断地弹框,越关越多,当时非常愤怒。
于是在高三时特地选了计算机专业,就是为了能方便地修电脑,不过在开学时才发现与自己的预期不同。
针对 IE6 的安全性问题,国内涌现了一批套壳的浏览器,例如 Maxthon、360、QQ等。
除了安全之外,这些浏览器还提供了标签功能,打开一个网页不用再重开一次软件了,当时我被惊艳到了。
还有无痕浏览功能,增强了隐私保护。
二、巨人的落幕
IE 曾经无比辉煌,但是在 Firefox、Chrome 等现代浏览器的冲击下。
桌面端的市场份额在不断的被蚕食,从 96% 跌至 1.65%(截止至2022年5月)。
2008 年 Chrome 发布,4 年后就与 IE 的占有率差不多并驾齐驱。
在 2013 年,全球市场中 Chrome 首次超越 IE,2014 年,国内市场中 Chrome 也超越了 IE。
下图来自于 StatCounter 的统计,蓝线是 IE,绿线是 Chrome,前者不断下降,后者不断上升,两极分化很明显。

IE 持续败退的原因有很多,此处就列举其中的几个。
1)移动浪潮
人们日常上网的方式正从 PC 转为移动端,无论是购物还是娱乐,端着手机就能完成。
下图摘录自 StatCounter,在 2022 年 1 月至 6 月的浏览器中占有率最高的两个排名都来自于移动端。

这个排名也得益于 Android 和 iOS 的成功,而反观微软推出的 Windows Phone 早在 2017 年 7 月就已歇菜。
移动战略的失败,也让 IE 在移动端举步艰难。
2)自身缺陷
第一个是更新缓慢,这就导致功能改进不及时,难以创新,并且会延长安全漏洞的修复时间。
第二个是 W3C 标准的支持度不够,在开发人员中的口碑极差,总是要单独做适配。
第三个是未提供强大的扩展系统,无法满足一些特定的自定义功能。
第四个是在浏览网页时速度慢,加载慢,响应不及时。
当然,微软从 IE8 开始也在努力改善使用体验,例如注重对 W3C 规范的支持、提升浏览器安全性等。
但是 IE 的积弊使其在步伐上显得迟缓而无力,官方显然也意识到了这个问题。
在 2015 年发布新浏览器 Microsoft Edge,替代 IE 成为 Windows 10 的默认浏览器,也算是为 IE 敲响了丧钟。
上述是我能想到的问题,若有不同观点,欢迎在评论区补充。
最后,还是要像 IE 致敬,虽然它有种种不是,但不可否认,它的存在,推动了整个时代的进步。
IE让我首次遭受了社会的毒打的更多相关文章
- try-catch-finally中的4个大坑,不小心就栽进去了!
在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的"掌控"它,却并不是一件容易的事.别的不说,咱就拿 fianlly 来说吧,别看 ...
- 利用python进行数据分析—数据清洗记录3,map,apply,
社会心态调查报告 导语: 时代决定心态,心态映照时代.社会心态产生于社会个体心理,又以整体的形态存在,进而影响着每个社会成员的社会价值取向和行为方式,影响着国家经济政治和社会发展大局.良好的社会心 ...
- 像追女神一样学好java~
写在前面的话 ● 本文适合食用的观众大老爷和小建议: ----本文内容主要是围绕java这门语言展开~ 适合的食用的大老爷们: ★ 第一类:完全没学过其他编程语言入门java的小白 ★ 第二类:已经学 ...
- 面向对象设计与构造:oo课程总结
面向对象设计与构造:OO课程总结 第一部分:UML单元架构设计 第一次作业 UML图 MyUmlInteraction类实现接口方法,ClassUnit和InterfaceUnit管理UML图中的类和 ...
- 退役记——CCC2020&CCO2020
我叫吴佳诚,一个曾在福建师大附中就读的oier,2019年7月份我来到多伦多就读于Langstaff Secondary School 我的常用id有:Johnson_Wu,温词 竞赛经历: 2018 ...
- 18岁,赚到了人生中的第一个10W!
大家好,我是九歌 今年我18岁,赚到了我人生中的第一个10W 截至2019年10月14日,我已经做了43天的公众号啦,粉丝也悄然增长到了1W8,感谢各位读者朋友给我的支持和鼓励. 相信大部分读者都是从 ...
- async,await执行流看不懂?看完这篇以后再也不会了
昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没生过病就不知道健康有多重要,没用过ContinueWith就 ...
- 利用c++中的设计灵感,既要学BIM分类信息表,借助GIS完成环境搭建改善
我,一个平平无奇的城市规划专业(建筑专业.路桥专业)大学生,还有一年要毕业,很担心工作以后受到社会的毒打,遂问导师和学长,我要自学点什么技能和软件? 学长A:CAD,SketchUp,PS我都很熟练了 ...
- 大厂程序员因厌恶编程,辞去月薪2w+的工作去当司机?
世界好小啊,刚在一个 UP 主的群里看到一个视频,标题叫做:"失业了工作没找到,却稀里糊涂上了知乎热搜,2000 多万人围观,我--" 说实话,看到视频的封面,我的下巴当时就掉到了 ...
随机推荐
- Spring5-IOC底层原理
1.什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IOC目的:为了降低耦合度 2.IOC底层原理 (1)xml解析.工厂模式.反射
- Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据
前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...
- mysql HikariCP连接池配置
#连接池配置 #最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.minimum ...
- FreeRTOS --(2)内存管理 heap1
转载自https://blog.csdn.net/zhoutaopower/article/details/106631237 FreeRTOS 提供了5种内存堆管理方案,分别对应heap1/heap ...
- 数据库界的Swagger:一键生成数据库文档!
对于开发的API文档,我们可以通过Swagger等工具来自动生成了.但是对于数据库表结构的文档呢,在实际开发中在开发前我们一般会先设计好表结构,大家讨论一下, 这个时候就很需要有个数据库表结构的文档, ...
- 【hexo博客搭建】本地搭建hexo博客(上)
前言 本篇文章会从本地(Windows 10)搭建-主题更换-部署阿里云详细步骤,如果在搭建过程中,遇到问题,可以通过博客页脚下的QQ联系我,或者在下面评论留言 一.本地搭建 1.安装前置 1.1安装 ...
- Linux下使用ssh测试端口是否开启
当服务器上不允许使用telnet时,可以使用ssh测试远程服务器端口是否开启 具体命令如下 -v 显示连接debug信息 -p port 指定端口 ssh -v -p 80 root@192.168. ...
- vue-router实现原理及简易demo
自定义路由demo,git地址: git@github.com:xsk-walter/Vue-router.git 一.router基本使用 ① 创建和路由相关的组件 ②Vue.use(vueRout ...
- 详细剖析pyecharts大屏的Page函数配置文件:chart_config.json
目录 一.问题背景 二.揭开json文件神秘面纱 三.巧用json文件 四.关于Table图表 五.同步讲解视频 5.1 讲解json的视频 5.2 讲解全流程大屏的视频 5.3 讲解全流程大屏的文章 ...
- 关于position的relative和absolute分别是相对于谁进行定位的
position:absolute; 他的意思是绝对定位,他是参照浏览器的左上角,配合TOP.RIGHT.BOTTOM.LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始 ...