今天,过了27年后,IE浏览器停用了

前言

随着Windows的官宣,ie浏览器将于6月16日正式退役。

https://www.microsoft.com/zh-cn/download/internet-explorer.aspx

012af1966d95166fe6a875bac9ec4db2.png

那个曾几何时的浏览器之王,经历一次又一次操作系统的迭代,直至新兴浏览器的出现后沦为浏览器鄙视链的最后一层,在叹息与嘲笑声中跌出神坛,经历了大起大落的二十年,终于要说再见了。

05db16bd72bf035409248ffa8c373d1d.png


历史的演进

1.少年被寄予厚望

1995年,微软正处于势不可挡的时期,而浏览器的市场主要来源于网景公司,一款名为导航者的浏览器一统天下。

为了拥有自己的浏览器,微软获购买了望远镜公司的Mosaic浏览器版权,在经过魔改后,微软也拥有了属于自己的浏览器,并取名为Internet Explorer此时它主要是被应用于大学和研究机构之间通过FTP实现文件共享。

几个月后,微软又发布了IE2,这个版本的IE才真正进入了人们的视野。它直接复制了导航者的一大部分功能,如导入书签,支持超文本标记语言特性等,迅速积累了第一批用户。为了实现大规模商用,在第二年IE3就接紧发布。抛弃了原先使用的Spyglass源代码,添加了一些新技术,支持ActiveX、和128位加密等。

微软的目的,是将IE打造成浏览器界的Windows。

2.第一次浏览器大战:登上王位

IE通过频繁增添新功能的方式迅速挖掘到了市场。但是和网景依然是你追我赶,始终没能拉开差距。

此时敏锐的微软借助操作系统上的核心竞争力,马上决定让IE成为Windows系统的默认浏览器也就是说,只要你使用了微软的操作系统,那么默认浏览器就是IE。

借助这种捆绑销售的方式,微软取得了巨大成功。仅又一年后的1997,微软就发布了IE4.0,此时它已经握有80%的市场占有率。

很多人觉得IE没有技术,其实在早期IE是有技术的,并且是当时绝对领先的技术。IE4.0采用了Trident渲染引擎,它能够借助代码让页面实时变化,也就是最早的动态页面,放在当时可以吊打一众浏览器。

通过先进的技术和背后的靠山,2003年,它的市场占有率达到了惊人的95%,年仅8岁的它,正式称王。为了迎合它,苹果甚至将macOS的默认浏览器都设置为IE。

不夸张地说,它垄断了当时Web浏览器市场。

3.毫无作为的5年

也是由于这种垄断地位,让微软觉得互联网似乎已经没有对手了。于是在IE6.0发布之后,微软就解散了研发团队。并且在之后的五年时间里面,都未正视过IE的维护和优化。它的技术依然停留在2003年,那个单进程模式。

随之降临的便是越来越多的问题,横飞的木马和漏洞,动不动就会卡死的网页,极慢的启动速度,以及让你随时可能奔溃的心态。

616265f052ceae1ad89f5e08162f6216.png


这五年,是IE技术和市场的停滞,但也是Web高速发展的时期。微软犯了傲慢的错误,却依然享受于作为老大占领市场的快感之中,对濒临城下的敌人选择视而不见。

于此同时,众多互联网公司借此机会打造自己的浏览器品牌。

4.新一次浏览器大战:神仙打架

时间来到了2008年,浏览器市场已经不再是微软一家独大了。挑战它的主要是三个:Safari,Opera和FireFox浏览器。

每一家浏览器都为了市场不断优化自身,Safari高雅大气,有着忠实的果粉支持;Opera便捷快速;火狐支持插件,功能众多。它们都已经奠定了用户基础。

IE浏览器的市场占有率下降到了40%。

尽管有所下降,微软依然乐观,坚定自身的操作系统优势可以确保王牌地位,甚至还与火狐浏览器在某一段时间成为了友商。

此时的它丝毫不知新的变革即将到来。

5.被迫放弃

同年,一款名叫Chrome的浏览器横空出世,搭载着WebKit内核,以安全、快速、高兼容性的三大特点迅速获得了人们的认可。

仅仅2年时间,便与IE、FireFox形成三足鼎立的局势。

但是谷歌并不为此感到满足,为了进一步扩大化自己的市场,更是放了个大招:将自己的Chromium项目开源。

所以Chrome背靠谷歌这个大靠山,走了和早期IE很像的路:积极扩大自身影响力,捆绑谷歌和Chrome。只不过这次年轻的谷歌没有选择轻视敌人,它迅速将Chrome推向那个曾经属于IE的王位。

此时的微软才彻底明白过来,敌人比自己想象的还要强大。

懵逼的同时微软接连推出了IE7、IE8,并且IE8也在技术上做了重大变革,从原来的单进程模式切换成了多进程。

2013年,微软做出了最后的针扎推出IE11,进一步优化界面,加速3D图形渲染,增加引擎核心数。但为时已晚,市场占有率依然持续下降,它古老的界面和差劲的性能伴随着表情包已经深入人心,并且Chrome已经真正成为了第一。

2015年,微软宣布正式放弃IE品牌,不再开发新版本的IE浏览器,搭载着自研EdgeHTML内核的Edge浏览器问世。

同年IE浏览器的市场份额降至2%,这款陪伴了年的IE浏览器,正式远离了我们。

为何走向淘汰

平庸的用户体验

如果你是早期的网上冲浪爱好者,那一定因为各种原因主动被动、亲身体验过它,点进去之后是一个较为简单和复古的页面,和其他主流浏览器形成了一个对比。甚至它的单调可能会让你觉得有点可爱,好像是微软在和你卖萌一样。

“都20xx年了,居然还有这种界面存在”?

96eaa538785fc5b8b6e07be22aece59e.png


以及可能在你工作的关键时刻突然卡着不动,然后响应以下内容:

519d711e205711083704410b9d063226.png


e850279d2580407cf86852c5dff0f3d8.png


对它最深刻的印象,除了差劲的体验感,还有就是来自网友的调侃:

4ae5d2bd170d47d3411a08ce342308f1.png

b796449e8c2387173edffc43f1bbdcee.png



市场的挑战和错误的商业判断

但是如果仅仅只是因为短暂的差评,至少借助Windows这个靠山,在拥有广大的用户群体面前,还是有可能快速挽回市场的。

其失败的根本原因在于微软的傲慢、对Web领域错误的商业决策上。而决策的错误也导致IE在Web崛起的黄金五年里毫无作为。

在2014年年初,微软公司CEO纳德拉表示,要将微软业务重心转移至云业务,并且不会延续对IE的研发。此时正是苹果Safari,谷歌Chrome和其他众多浏览器神仙打架的时候,为了发挥优势抢占市场甚至国内的360、百度等浏览器,都在技术和兼容性上下了一番功夫。

于是,在浏览器市场的争夺中失去了领先地位和核心竞争力,取而代之的Chrome浏览器登顶霸榜。

浏览器2022占全球桌面浏览器市场份额的百分比
Google Chrome77.03%
Safari8.87%
Mozilla Firefox7.69%
Microsoft Edge5.83%
Internet Explorer2.15%
Opera2.43%
QQ1.98%
Sogou Explorer1.76%
Yandex0.91%
Brave0.05%

那个熟悉的e字母图标,逐渐被人们抛弃。

浏览器背后的技术

内核引擎架构

浏览器界面是一个用户展示的结果,其核心技术体现是在于用户输入内容到页面响应,也就是「获取请求、响应数据、渲染页面」。而完成这一关键步骤的,是一个叫做浏览器内核的东西。

每个浏览器内核都大不相同,但是主体分为两个部分:渲染引擎(Rendering Engine)和JS引擎。渲染引擎更偏向于数据的导航和渲染,JS引擎就负责解析 Javascript 语言来实现网页的动态效果。

不同的浏览器、即使同一浏览器不同型号可能渲染引擎和JS引擎都不一样。当然不同的浏览器也可能使用相同的内核,IE浏览器的Trident,如国内的360极速浏览器、百度浏览器都在用它。

2c62a4ed384ea3a3bd6965eb22ee9399.png


现在我们最常用的谷歌Chrome浏览器,它的核心架构是这样的:

6dc842b9d438322e0e0ccb23bfaf2850.png

用户接口接收用户请求,通过网络向浏览器组件转发请求,渲染引擎以8kb为单位接收数据信息,做数据导航,再交给V8和libXML解析,最后逐步将内容显示给用户。

核心进程

早期的浏览器,都是单进程架构,所以功能也比较简单。

一个进程中有页面线程负责页面渲染和展示,Js线程执行JS代码。

由于是单进程的结构,所以会引发很多问题,比如线程卡死问题,一个线程卡死就可能造成整个浏览器的崩溃。

还有就是数据安全问题,不同tab之间在一个进程内是通过共享内存共享数据的,所以页面线程和JS线程都可以访问到对方的数据。

现代主流浏览器都是使用的多进程结构,并且每个进程的职责都大不相同,以最常用的Chrome为例,它拥有:

  • 一个浏览器主进程:用来响应Chrome浏览器的用户操作请求,包括地址栏、书签和各种按钮,并且也负责协调与其它进程交互工作。

  • 一个GPU进程:负责整个浏览器界面的渲染。

  • 一个网络进程:负责接收网络请求和转发请求。

  • 多个渲染进程:负责页面渲染、运行脚本、事件处理等。

  • 多个插件进程:负责控制处理网站使用的所有插件。

c63b159450060ab7ddc83b83a49c5f14.png


Chrome浏览器主要是使用以下四种进程模型:

  • Process-per-site-instance:默认情况下为用户访问网站的每个实例创建一个Renderer进程,这样可以确保来自不同站点的页面是独立呈现的,并且对同一站点的多次访问也是进程间彼此隔离的。简单来说就是访问不同站点和同一站点的不同页面都会创建新的进程。

  • Process-per-site:同一个站点使用同一进程。

  • Process-per-tab:一个tab里的所有站点使用一个进程。

  • single-process:让浏览器引擎和渲染引擎共用一个进程。

Chrome默认使用的是Process-per-site-instance。优点是多进程模式下速度快,并且因为tab和tab之间的信息都是相互隔离的,所以互不影响,实现安全隔离。缺点也非常明显,太!占!内!存!我目前开了两个浏览器页面,每个页面上有多个tab,这是目前电脑的内存占用情况:

8ba0df9d760974875a8646272237a2cc.png


是不是知道你电脑总是内存不足的原因了?

为了挽救市场,IE8之后浏览器也改为了多进程模式,性能提升了许多。但是此时Chrome、Safari已经基于多进程的成熟技术上展现最极致的用户体验了,极速渲染、高页面FPS和刷新率、自定义插件、开发者模式等功能都相应而出。

IE慢吗?本质上不算慢,只是别人越来越快。

翘首企足的Web世界

在新兴的Web时代,我们追求性能,追求体验,更兼容、更安全。

请不要忘记,曾经那个功能简单,风格复古,披着相似外衣停留在Windows桌面二十余年的IE。它贯穿了一个时代,一个日新月异的时代,一个充满竞争的时代,最终在前进的路程中败下阵来。

一粒破土而出的种子,是一颗参天大树的延续。

Edge作为它的「种子」,将代表微软走向下一个二十年。

6d9eda9b0c3ac32f08f47a7112820199.png


关于浏览器之间的竞争和迭代从未停止,作为广大用户群体的我们应期盼未来,拥抱新的改变。

下一个时代的王者是谁,Chrome么?它会被谁超越?

c19f1753d46bd56b2ede7bd48b2b3c23.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式 之 创建者

很久没写设计模式学习笔记了,今天无聊,随便把以前看的模式的都写下.先把代码帖上来吧.这个模式,是模拟 西山居的一款游戏,剑侠情缘 来写的,呵呵,当然,该游戏到底是怎么设计的,我是不知道,只是作为一个例子放到这个地方.using System; using System.Colle…

svn添加用户.sh

#!/bin/bash FLASH_SVNPATH/xx_new_flash/conf DESIGN_SVNPATH/xx_new_design/conf JAVA_SVNPATH/xx_new_java/conf echo "请选择 java flash meishucehua " read -p "请选择部门员工 java,flash,meishucehua " bumen case $bumen in flash) …

spring boot+mybatis+generator生成domain大小写问题

之前遇到一个问题&#xff0c;用generator生成数据库对应的domain&#xff0c;以前都是好好的&#xff0c;那天突然生成的domain都是小写的&#xff0c;因为我数据库里是大写的&#xff0c;后来找到解决办法&#xff0c; <table tableName"material_pile" domainO…

boost库学习入门篇

学习及使用Boost库已经有一段时间了&#xff0c;Boost为我的日常开发中带来了极大的方便&#xff0c;也使得我越来越依赖于boost库了。但boost功能太多&#xff0c;每次使用还是得翻看以前的 资料&#xff0c;所以为了以后可以更方便的使用&#xff0c;在此对常用的功能作一个…

开源 STM32 USB-CAN项目

照理来说&#xff0c;USB-CAN这种东西应该已经被做的烂大街的工具&#xff0c;国内居然没有一个拿得出手的开源方案。某立功和PCAN动辄2000的价格也是离谱。淘宝上各种虚拟串口方案、替换dll兼容某立功软件的各种方案....价格都倒是便宜&#xff0c;性能和可靠性嘛.......就不多…

Windows Workflow Foundation - [介绍及相关资源]

Workflow Foundation是能使你在Windows平台上快速构建工作流应用程序的编程模型&#xff0c;引擎以及工具。WF支持各种各样的工作流场景&#xff1a;包括以用户界面为中心的页面流程&#xff0c;文档为中心的工作流程&#xff0c;业务规则驱动的业务流程等。 如果你使用的是VS2…

Go语言web框架 gin

Go语言web框架 GIN gin是go语言环境下的一个web框架, 它类似于Martini, 官方声称它比Martini有更好的性能, 比Martini快40倍, Ohhhh….看着不错的样子, 所以就想记录一下gin的学习. gin的github代码在这里: gin源码. gin的效率获得如此突飞猛进, 得益于另一个开源项目httproute…

8位ADC是256还是255?

昨天的文章发了之后&#xff0c;有朋友找到我&#xff0c;给我讨论了很多关于ADC细节。晚上给个朋友在51上调ADC0808芯片有一个朋友是做硬件的&#xff0c;他有从事过专业仪器设备&#xff0c;常年有使用ADC的经验&#xff0c;他给我的观点是&#xff0c;8位ADC对应的就是256。…

WCF中使用HttpSession

在WCF中不能使用HttpSession&#xff0c;即使Host是IIS也不可以&#xff0c;这就造成在WEB应用中集成WCF不太方便&#xff0c;其实可以通过配置搞定&#xff0c;关键在于三点&#xff1a;Host、契约类、Client端。 Host上要求Web.config中有定义&#xff1a; <system.servic…

boost库在ubuntu下的安装

系统是ubuntu虚拟机&#xff0c;安装的是boost_1_60_0。 &#xff08;1&#xff09;首先去下载最新的boost代码包&#xff0c;网址www.boost.org。 &#xff08;2&#xff09;进入到自己的目录&#xff0c;解压&#xff1a; bzip2 -d boost_1_60_0.tar.bz2 tar xvf boost_1_…

Google的投票站点在用Asp.net

https://survey.google.com/wix/p0621608.aspx https://survey.google.com/aaaaaaaaaaaaaa.axd https://survey.google.com/wix/xxxxxxxxxxxxxxxxxxxxx.ashx Server Microsoft-IIS/6.0X-AspNet-Version 2.0.50727 X-Powered-By ASP.NET 转载于:https://ww…

所谓的0拷贝不就是为了让CPU休息吗?深入理解mmap

1.开场白环境&#xff1a;处理器架构&#xff1a;arm64内核源码&#xff1a;linux-5.11ubuntu版本&#xff1a;20.04.1代码阅读工具&#xff1a;vimctagscscope我们知道&#xff0c;linux系统中用户空间和内核空间是隔离的&#xff0c;用户空间程序不能随意的访问内核空间数据&…

Python3 B格注释

看tornado源码&#xff0c;看到一些函数定义时的不解的地方&#xff0c;查了一通&#xff0c;原来是注释。 冒号注释变量&#xff0c;箭头注释函数&#xff1b; 例子如下 Python3环境下&#xff0c;执行以下代码。 def a(x:这是X变量) -> for test: print(x) 转载于:https:/…

Java多线程同步Synchronized使用分析

同步的概念&#xff1a; 同步分为 同步方法 和 同步块 两种方式。 锁定的内容分为 锁定类的某个特定实例 和 锁定类对象(类的所有实例) 变量分为 实例变量(不带static的变量) 和 类变量(带static的变量) 使用同步的原因 1. 在系统中对访类要使用多线程进行访问; 2. 在该类中有 …

boost::function的用法(一)

boost::function的用法 本片文章主要介绍boost::function的用法。 boost::function 就是一个函数的包装器(function wrapper)&#xff0c;用来定义函数对象。 1. 介绍 Boost.Function 库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的…

nhibernate学习之集合组合依赖

1.学习目标还是学习compenent的用法&#xff0c;上节实现了简单字段的组合&#xff0c;这节中将讨论两个问题&#xff1a;1.依赖对象有一个指向容器对象的引用。2。集合依赖2.开发环境和必要准备开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer ed…

追更这个做嵌入式的大佬

在知乎上看到一个做嵌入式91年小年轻&#xff0c;分享给大家在他看来&#xff0c;嵌入式也是一个很吃香的技术&#xff0c;在周末写这篇文章的时候&#xff0c;也刚收到一个朋友的微信消息&#xff0c;他说自己拿到了70多万的年包offer。大家想追更作者的原文&#xff0c;可以点…

CentOS6.5安装ElasticSearch6.2.3

CentOS6.5安装ElasticSearch6.2.3 1、Elastic 需要 Java 8 环境。&#xff08;安装步骤&#xff1a;http://www.cnblogs.com/hunttown/p/5450463.html&#xff09; 2、安装包下载&#xff1a; #官网地址 https://www.elastic.co/downloads/elasticsearch 3、新建用户 Elastic高…

C#中跨窗体操作(1)--事件

在应用C#过程中&#xff0c;经常会出现通过“窗口2”来处理“窗口1”上的控件和显示内容等。可以通过事件的处理方式来完成&#xff0c;具体步骤如下&#xff1a; 1、在“窗体2”中声明事件 public delegate void Change(); public event Change myChangeevent; 2、编写…

boost中bind的使用

最近对boost的bind部分比较感兴趣&#xff0c;对其背后的机制进行了简单的分析&#xff0c;和大家分享一下。 注&#xff0c;我所看的代码是boost_1_64_0&#xff0c; 想来各个版本的差异不大。 定义函数 [cpp] view plaincopy int f(int a, int b) { return a b; }…