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 多万人围观,我--" 说实话,看到视频的封面,我的下巴当时就掉到了 ...
随机推荐
- /application/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
在启动/usr/local/zabbix/sbin/zabbix_server 时报错如下 此时需要配置一个软连接指向该位置. ln -s /usr/local/mysql/lib/libmysqlc ...
- sourceCRT设置全局字符集为utf-8
以前刚打开服务器crt字符集都会默认是default模式,搞得每次都要手动设置成UTF-8. 烦躁. 将CRT全局字符集设置成UTF-8格式方法: 设置窗口不会断掉: 即每100s发送一次ls \n ...
- Hyperledger Fabric定制联盟链网络工程实践
总体来看,网络上成体系的可用的 Fabric 教程极少--不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是 ...
- OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...
- fpm工具来制作rpm包软件
第1章 rpm包的制作 1.1 fpm的概念介绍 FPM功能简单说就是将一种类型的包转换成另一种类型 1.1.1.支持的源类型 类型 说明 dir 将目录打包成所需要的类型,可以用于源码编译安装的 ...
- Jqgrid 动态设置cell disabled
$($(grid2.jqGrid("getGridRowById", i + 1))[0].children).each(function (childI, childO) { i ...
- 谈谈ThreadLocal的应用场景和注意事项?
特点 ThreadLocal和Sychronized都用于解决多线程间的并发访问,但它们实现的本质方法不同:sychronized利用锁使同一个代码块或变量在某时刻只能被一个线程访问,而ThreadL ...
- [笔记] Slope Trick:解决一类凸代价函数的DP优化问题
原理 当序列 DP 的转移代价函数满足 连续: 凸函数: 分段线性函数. 时,可以通过记录分段函数的最右一段 \(f_r(x)\) 以及其分段点 \(L\) 实现快速维护代价的效果. 如:$ f(x) ...
- python+pytest接口自动化(15)-日志管理模块loguru简介
python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细). 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理, ...
- MySQL双主双从配置
双主双从结构图 Master1配置 server-id=1 #开启binlog日志 log-bin=mysql-bin #忽略的库 binlog-ignore-db=mysql #复制的库 binlo ...