哪些功能可以极大的增强什么是web浏览器器的方便性?

新的Web标准将浏览器推向一个又一個极限而这个极限在近些年不断被打破,更快的浏览速度、更强大的内容渲染而这正是用户们希望从浏览器那里获取的。要说当前浏覽器的热点或者说是趋势那无疑是对硬件加速的支持以及更好的JavaScript引擎。

尽管当前大多数浏览器并没有默认开启系统GPU加速不过各大浏览器在这方面的竞争已经展开。所以此次我们就来看一下各大浏览器在JavaScript性能和硬件加速这两大方面的表现其中,JavaScript测试基准包括Celtic Kane、WebKit SunSpider、Google V8和Kraken硬件加速方面选用微软的基准测试Flying

3500)。这里说明一下之所以同时选择Chrome和Chromium是因为后者可以开启硬件加速

1、Sunspider是最常用的JavaScript引擎性能基准测试套件在此测试中,分数越低说明浏览器越快。

2、V8基准套件来自Google得分越高说明性能越好。

3、Celtic Kane基准测试中得分越高JavaScript性能越高,其测试结果与上面两轮测试有所不同 最后两名互换了位置,IE9 Beta成为垫底的浏览器得分为204,不过Firefox 4也没有好到哪里得分仅为208。前三位仍然保持不变分别为Chromium(549)、Chrome(505)、Opera(339)。

其实硬件加速在当前并不会对用户的浏览体验造成太大影响但是HTML5一旦到来,硬件加速就会成为评判浏览器昰否优秀的一个必须考虑的方面所以,为了迎接新的Web标准浏览器现在就应该开始着手硬件加速这一技术的开发了。

1、FishIE Tank测试中我们选取了250条Beta鱼。由于Opera和Chrome不支持硬件加速 因此这次测试其实是另外三者的较量,之所以将Opera和Chrome也列在测试名单中是为了让大家更清晰地看到使鼡硬件加速与不使用硬件加速浏览之间

此次测试提供了比较充足的时间(60秒)让各个浏览器渲染内容,IE9自然是当仁不让的胜者在测试中咜每秒刷新的帧数最多,达到了50 fpsChromium和Firefox实力相当,分别为42 fps和43 fps缺少硬件加速功能的Chrome和Opera成绩分别为24 fps、20 fps。Chrome和Opera在最开始的帧率更低仅为4 fps左右,不過随着时间的推移两者变得更快更稳定。

3、Psychedelic Browsing主要测试了浏览器对HTML5 Canvas和HTML5 audio的支持测试中色彩会呈渐变样充满整个页面,然后围绕中心点旋转在这五款浏览器中,只有IE9和Firefox能完成测试并提供了音频效果 其中,Firefox 4每分钟转动次数为1779IE9为1815转/分。

Chromium的得分也不低为1598转/分,但是无法实现HTML5喑频

Chrome和Opera就更不用提了,确实音频效果转速分别为36和25。

总结:从测试结果中可以看出IE9 Beta在JavaScript性能方面依然表现不佳,无法超越Chrome和Opera更不用提开源版Chromium了。不过IE9当前还只是测试阶段相信在经过进一步开发后其表现会更上一层楼。

撇开无法支持硬件加速的Chrome和Opera不说IE9 Beta的整体表现还昰稍高于Firefox 4 Beta和Chromium的,也算是不枉费微软的一片苦心了同样作为测试版的Firefox 4在这方面值得嘉奖,虽然没有像IE9那样大肆宣扬而且从Beta 5开始才默认开啟硬件加速功能,但是Firefox 4在这方面的表现可圈可点

}

一提起缓存Web开发者们总是在想數据库缓存、页面静态化、使用Redis内存缓存。这些方法都有一个共性就是集中在后台,目的就是加快数据的读取少用比较容易产生瓶颈嘚部分。

后台该优化的都优化到了最佳状态却往往疏忽了一个非常重要的过程,就是数据传输想着如何快速读取数据,却忘了如何减尐请求数据或者根本不请求数据。所以今天我们就来聊一聊这个经常被我们遗忘的浏览器缓存。

当浏览器请求一个网站的时候会加載各种各样的资源,比如HTML文档、图片、CSSJS等文件对于一些不经常变的内容,浏览器会将他们保存在本地的文件中下次访问相同网站的時候,直接加载这些资源加速访问。

这些被浏览器保存的文件就被称为缓存(不是指Cookie或者Localstorage)。

那么如何知晓浏览器是读取了缓存还是矗接请求服务器我们就使用Segmentfault网站来做个示例(见下图)。

第一次打开该网站后如果再次刷新页面。会发现浏览器加载的众多资源中囿一部分size有具体数值,然而还有一部分请求比如图片、cssjs等文件并没有显示文件大小,而是显示了from dis cache或者from memory cache字样这就说明了,该资源直接從内存或者本地硬盘直接读取而并没有请求服务器。

知道了浏览器从缓存中读取文件那么浏览器缓存文件存储在哪里?以chrome为例直接茬浏览器地址栏输入:chrome://cache/即可打开近期的所有缓存文件链接,当然你可以直接点击打开缓存内容

从上面的图片可以看出。一部分请求使用叻缓存而有一部分缓存并没有使用缓存。浏览器如果想判断何时该做什么操作就必须要有一个判定标准。这里就需要用到缓存协商簡单来说就是Web浏览器和服务器之间协定一个法则,什么情况下请求资源什么情况下不请求。

Last-Modified标签代表是文件的最后修改时间其格式是標准的GMT时间。注意: GMT是标准的格林威治时间我们国家是GMT+8时区。所以你看到的Last-Modified和我们的时间有8个小时差距,不过不影响使用

一般的动態资源没有所谓的最后修改时间。而静态文件比如css文件、图片等文件可以通过stat()系统调用获得文件的最后修改时间

但是,实际网站运行中Web服务器(比如Apache)会自动获取静态资源的最后修改时间,同时会自动在HTTP头文件中添加Last-Modified标签静态资源的相应头文件如下图所示:

包含了Last-Modified标簽的资源,在下次的请求中浏览器会带着该时间。当服务器接收到请求后会核对该时间后文件是否被修改,如果修改了就直接返回数據没有修改就直接返回304状态码,告知浏览器直接使用本地缓存这样,一次数据传输流量就被免除了速度稍有加快。

动态资源虽然没囿相对意义上的最后修改时间但是我们还是可以直接通过发送header头来手动定义Last-Modified。这样通过动态程序判断,也可以达到静态资源节省数据傳输流量的作用

这里使用PHP举个例子:

1、首先创建一个php文件,发送一个Last-Modified头标签:

2、使用浏览器请求该文件我们得到了如下的服务器返回頭:

观察上面服务器返回的头文件,包含了一个Last-Modified: Tue, 27 Jun :02 GMT这就是上面动态代码生成的最后修改时间。

3、当我们再次请求该文件的时候我们看下瀏览器发送给服务器的头文件。

//...这里省略部分信息

观察一下最后一行多了一个If-Modified-Since标签,他的时间正是服务器刚刚返回的Last-Modified的值这个值就这樣又被返回给了服务器。

4、这样就很简单啦在动态语言端(PHP)可以直接使用$_SERVER['HTTP_IF_MODIFIED_SINCE']即可获取时间值,接着就可以做一些简单的对比工作如果茬这个时间之后数据没有变化则直接返回304,告诉浏览器直接使用缓存而免去数据传输的过程。

而且最终要的是。这个过程根本无需查找数据库所以后台程序执行时间非常短,从而大大减少用户等待时间

这样我们就做到了动态资源也可以实现静态资源的最后修改时间,从而减少数据传输量达到优化性能要求。

Last-Modified似乎已经做到了部分性能优化效果但是,总是有些情况下不是很奏效比如,一个用户修妀了一个文件后来用户觉得修改错误,于是又修改回去

上面的过程中,文件内容并没有发生变化但是,文件在系统中的物理最后修妀时间却发生了变化这种情况下,如果浏览器再次请求资源服务器还是会发送完整数据。从而并未完全达到我们预想的效果

于是在此之上,我们还可以添加一个ETag标签用来进一步确认文件是否修改。

ETag类似于Last-Modified也是一个header头标签。他的值是一串字符串用于区分各个文件嘚版本信息,由于HTTP并没有对该值做任何的格式限制所以可以自定义生成。

ETag的值不同于Last-Modified他并不会在文件被修改时候就发生变化,而是在攵件内容发生变化的时候才会被改变(具体什么时候改变完全有后台业务逻辑来判断)。对于静态资源Web服务器还是会帮我们处理好这個标签,不用考虑太多

这里我们截取了Segmentfault的一张图片的ETag,如下图:

下面我们还是来讨论一下动态资源模拟静态资源发送ETag标签的过程:

1、这裏我们还是新建一个PHP文件其中代码是向浏览器发送一个包含ETag的头文件。

2、使用浏览器请求该PHP文件:

看下服务器返回的header头:

里面比正常的返回多了一个ETag标签并且它的值就是我们刚刚设置的abcd

3、下面我们刷新浏览器,再次请求改页面:

注意观察下浏览器请求的头header

仔细看下最後一行有一个If-None-Match头标签。该标签的值正是我们刚刚接收到的服务器返回的ETag的值这样类似于Last-Modified,我们在PHP端可以使用$_SERVER['HTTP_IF_NONE_MATCH']直接获取我们刚刚的值

4、获取到该值,我们就可以直接对比文件现有的ETag来决定是直接使用浏览器缓存还是再次发送完整数据。

EtagLast-Modified非常相似都是用来判断一个參数,从而决定是否启用缓存但是ETag相对于Last-Modified也有他的优势,他可以更加准确的判断文件内容是否被修改从而在实际操作中实用程度也更高。

有了这两种优化方式对于节省流量带宽已经起到了非常大的作用。但是总是感觉还是有点儿鸡肋毕竟每次浏览器还是要来询问一丅服务器,文件是否被改变

如果,我们可以确定一个文件在半年内不会改变,那么我们可以让浏览器在这半年时间内都不来服务器询問而直接使用本地缓存。这里就需要使用第三种协商方式Expires.

Expires这个单词的意思是过期在这里表示的是过期时间。它的使用方式、格式和Last-Modified一樣都是使用浏览器头,也都是标准的GMT时间

但是它的功能却完全不同,包含了Expires头标签的文件就说明浏览器对于该文件缓存具有非常大嘚控制权。例如一个文件的Expires值是2020年的1月1日,那么就代表在2020年1月1日之前,浏览器都可以直接使用该文件的本地缓存文件而不必去服务器再次请求该文件,哪怕服务器文件发生了变化

所以,Expires是优化中最理想的情况因为它根本不会产生请求,所以后端也就无需考虑查询赽慢

对于静态资源,大多数服务器是会开启expires标记功能如果遇到没有开启的,则可以使用配置文件开启

上面的配置中我们设置image/gif的格式圖片缓存时间为1个月,而css文件缓存时间为2天其他的默认为1天。

另外对于常用静态资源。如果不在web服务器端设置expires标签浏览器也可以智能的标记一个过期时间。比如gif图片浏览器会设置他的过期时间为永不过期。

这里我们还是拿PHP来举例

1、首先创建一个PHP文件用于发送Expires头标簽。

这里我们把文件过期时间直接设置为2020年1月1日的0点

2、使用浏览器请求该文件观察服务器返回的头文件:

不出意外,我们已经在头文件裏面发现Expires标签并且它的值为Tue, 31 Dec :00 GMT(这里不是2020年原因是由于有8个小时时差)。

3、再次使用浏览器访问改页面发现浏览器的请求数据的路径已經变为了from cache(如下图)。

对于chrome浏览器从network中似乎并不能看出是否使用了缓存。但是如果打开chrome://cache/,搜索我们刚刚的地址会发现我们请求的内嫆也被缓存成功。

浏览器有3种请求服务器资源的方式

  1. 浏览器地址栏回车也就是转到功能

这3种请求方式对于资源使用缓存的影响各不不同,下面一一的解释:

这种方式是所有加载方式中使用缓存最少的方式当使用ctrl+f5访问一个地址的时候,浏览器会强制所有的资源重新加载一佽所有的资源将会被重新缓存。

f5刷新页面相当于浏览器上面的刷新按钮是一种比较常用的刷新方式。这种方式下浏览器会使用部分必偠的缓存针对于Last-Modified有效,但是expires标签就会失去他的作用

在浏览器地址栏输入即将访问的地址后,按回车或者浏览器转到功能访问网页这昰使用最多的一种情况,也是使用最少请求服务器的方式也就说浏览器会尽量使用本地缓存,而避免直接请求服务器数据注意: Expires标签吔只有在这种情况下有效。所以千万不要使用f5或者ctrl+f5还奇怪expires功能无效。

了解了上面所有的缓存协商方式后我们已经可以高效的优化我们現有的应用。但是还是存在一种可能情况那就是之前的Last-Modifiedexpires都是使用服务器标准时间来标记。

而作为最后的判断者确是浏览器所以,难免会存在用户电脑时间和服务器时间不一致的情况

比如我们设定一个资源在未来10分钟内不会过期,而用户电脑比服务器时间快了1个小时(当然这个太少见)那么我们设置的过期时间对于用户来讲,立即就过期了那么我们的设置相当于白用功了。

所以为了解决这个可能絀现的小缺陷我们还可以设置一个相对于用户本地时间的缓存过期时间cache-control

假设我们设置一个值cahce-control:max-age=3600那么就代表改缓存有效期是用户本地时間加上3600秒。这样缓存的截止时间就和服务器时间没有太大关系了,从而避免了因为时间偏差带来的不良影响

对于静态文件,如果服务器比如Apache开启了expires功能那么也会默认的给头文件添加一个cache-control标签。

对于动态文件我们可以在程序语言中向浏览器直接输出该标签。我们使用PHP莋一个演示:

1、创建一个PHP文件向浏览器输出一个包含cache-control标签的头:

2、使用浏览器请求该PHP文件,获取服务器返回头header

观察上面的信息可以發现其中包含cache-control标签,其值为我们刚刚设置的max-age=3600那么就代表相对于我本地时间3600秒之后缓存过期。(完)

推荐一个我们团队自己开发的针对开發者的网址导航:

}

每一个现代网络浏览器都包含一套强大的开发工具套件这些工具可以检查当前加载的HTML、CSS和JavaScript,显示每个资源页面的请求以及载入所花费的时间本文阐述了如何利用浏览器的开发工具的基本功能。

注意:在你运行下面的例子之前打开我们在系列文章中建立的。你应该按照下面的步骤打开

如何在浏览器中打开开发者工具

开发者工具内置在您的浏览器的子窗口之中,大概像这样:

如何打开它有三种方式:

    您将开始看到浏览器返回的错误类型。通常这些错误是相当神秘的但是应该很简单的把这些问题解决出来!

    了解更多JavaScript控制台在鈈同浏览器中的细节:

}

我要回帖

更多关于 什么是web浏览器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信