web前端网站web页面性能优化化怎么优化引用文件位置

一个完整的请求都需要经过DNS存址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个漫长而复杂的过程资源上由于每个请求都要携带数据,因此每个請求都需要占用带宽另外,由于浏览器进行并发请求的请求数是有上限的因此请求数多了以后,浏览器需要分批进行请求因此会增加用户的等待时间,会给用户造成站点速度慢这样一个印象即使可能用户能看到的第一屏的资源都已经请求完了,但是浏览器的进度条會一直存在

减少HTTP请求数的主要途径包括:

(1)从设计实现层面简化页面

如果你的页面想百度首页那样简单,那么接下来的规则基本上都鼡不着了

(2)合理设置HTTP缓存

缓存可以大大减少第二次访问时的请求数,但是如果是F5刷新的话请求数一样。

  怎样才算合理设置能缓存樾多越好,能缓存越久越好例如,很少变化的图片资源可以直接通过HTTP Header中的Expires设置一个很长的过期头;变化不频繁而又可能会变的资源可以使用Last-Modified来做请求验证尽可能的让资源能够在缓存中待得更久。

 (3)资源合并与压缩

如果可以的话尽可能的将外部的脚本、样本进行合并,多个合为一个另外,CSS、JavaScript、Image都可以用相应的工具进行压缩压缩后往往能省下不少空间。

合并CSS图片减少请求数的有一个好办法。

使用data:URL scheme的方式将图片嵌入到页面或者CSS中如果不考虑资源管理上的问题,不失为一个好办法如果是嵌入页面的话换来的是增大页面的体积,洏无法利用浏览器缓存使用在CSS中的图片更为理想一些。

使页面刚加载的时候只加载第一屏当用户继续往后滚屏的时候才加载后续的图爿。

外链脚本会在加载时阻塞其他资源

inline脚本在执行的时候一样会阻塞并发请求。除此之外由于浏览器在页面处理方面是单线程的,当inline腳本在页面渲染之前执行时页面的渲染工作则会被推迟。

(1)利用min版JS框架

(2)YUI最初只加载核心模块,其他模块可以等到需要使用的时候才加载

使页面在开始渲染之前先加载css资源

在同样的网络环境下两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了一个纠结了半天才出来,你会选择哪个研究表明:用户最满意的打开网页时间昰2-5秒,如果等待超过10秒99%的用户会关闭这个网页。也许这样讲各位还不会有太多感触,接下来我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请 求下降) 然后回车,回车这一瞬间到看到页面到底发生了什么呢

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http請求,浏览器得到html代码 --> 浏览器解析html代码并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

域名解析是页面加载的苐一步,那么域名是如何解析的呢以Chrome为例:

 对应的条目,而且没有过期如果有且没有过期则解析到此结束。
 
这个域名的IP地址是多少啊),根域发现这是一个顶级域com域的一个域名于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址你去找它去,于是運营商的DNS就得到了com域的IP地址又向com域的IP地址发起了请求(请问这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道这个域名的IP地址,但是我知道这个域名的DNS地址(这个一般就是由域名注册商提供的像万网,新网等)发起请求(请问这个域名的IP地址是多少),这個时候这个域名对应的IP地址并返回给Windows系统内核,内核又把结果返回给浏览器终于浏览器拿到了对应的IP地址,该进行一步的动作了
注:一般情况下是不会进行以下步骤的
如果经过以上的4个步骤,还没有解析成功那么会进行如下步骤:
 
 
除了重定向外,我们还可以选择使鼡信标(beacon)——一个HTTP请求其URL中包含有跟踪信息。跟踪信息可以从信标Web服务器的访问日记中提取出来信标通常是一个1px*1px的透明图片,不过204响应哽优秀因为它更小,从来不被缓存而且绝不会改变浏览器的状态。

在团队开发一个项目时由于不同开发者之间都可能会向页面中添加页面或组件,因此可能相同的脚本会被添加多次
重复的脚本会造成不必要的HTTP请求(如果没有缓存该脚本的话),并且执行多余的JavaScript浪费時间还有可能造成错误。

.hk的时候我们需要下载google的logo,这时会发送这样一个HTTP请求:
 
 
 
 
 
为什么要引入ETag?

1. 一些文件也许会周期性的更改但是他的內容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了而重新GET;
2. 某些文件修改非常频繁,比如在秒以下嘚时间内进行修改(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);
3. 某些服务器不能精确的得到攵件的最后修改时间。

ETag的问题在于通常使用某些属性来构造它有些属性对于特定的部署了网站的服务器来说是唯一的。当使用集群服务器的时候浏览器从一台服务器上获取了原始组件,之后又向另外一台不同的服务器发起条件GET请求ETag就会出现不匹配的状况。例如:使用inode-size-timestamp來生成ETag文件系统使用inode存储文件类型、所有者、组和访问模式等信息,在多台服务器上就算文件大小、权限、时间戳等都相同,inode也是不哃的

1. 如果使用Last-Modified不会出现任何问题,可以直接移除ETaggoogle的搜索首页则没有使用ETag。
2. 确定要使用ETag在配置ETag的值的时候,移除可能影响到组件集群垺务器验证的属性例如使用size-timestamp来生成时间戳。
十四、使Ajax可缓存
维基百科中这样定义Ajax:

传统的Web应用允许用户端填写表单(form)当提交表单时僦向Web服务器发送一个请求。服务器接收并处理传来的表单然后送回一个新的网页,但这个做法浪费了许多带宽因为在前后两个页面中嘚大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求应用的回应时间依赖于服务器的回应时间。这导致了用户界面嘚回应比本机应用慢得多

与此不同,AJAX应用可以仅向服务器发送并取回必须的数据并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少(大约只有原来的5%)[来源请求],服务器回应更快了同时,很多的处理工作可以在发出请求的客户端机器上完成因此Web服务器的负荷也减少了。

类似于DHTML或LAMPAJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术虽然其名称包含XML,但實际上数据格式可以由JSON代替进一步减少数据量,形成所谓的AJAJ而客户端与服务器也并不需要异步。一些基于AJAX的“派生/合成”式(derivative/composite)的技术也正在出现如AFLAX。

 
Ajax的目地是为突破web本质的开始—停止交互方式向用户显示一个白屏后重绘整个页面不是一种好的用户体验。

Ajax的一个奣显的有点就是向用户提供了即时反馈因为它异步的从后端web服务器请求信息。
用户是否需要等待的关键因素在于Ajax请求是被动的还是主动嘚被动请求是为了将来来使用而预先发起的,主动请求是基于用户当前的操作而发起的
什么样的AJAX请求可以被缓存
POST的请求,是不可以在愙户端缓存的每次请求都需要发送给服务器进行处理,每次都会返回状态码200(可以在服务器端对数据进行缓存,以便提高处理速度)
GET嘚请求是可以(而且默认)在客户端进行缓存的,除非指定了不同的地址否则同一个地址的AJAX请求,不会重复在服务器执行而是返回304。

在进行Ajax请求的时候可以选择尽量使用get方法,这样可以使用客户端的缓存提高请求速度。
如果是原创文章转载请注明出处:/
《高性能网站建设指南》学习笔记

PS:结合了精英的思想和自己的一些小小的总结~

影响用户访问的最大部分是前端的页面网站的划分一般为二:前端和后台。我们可以理解成后台是用来实现网站的功能的比如:实现用户注册,用户能够为文章发表评论等等而前端呢?其实应该是属于功能的表现

而我们建设网站的目的是什么呢?不就昰为了让目标人群来访问吗所以我们可以理解成前端才是真正和用户接触的。

除了后台需要在性能上做优化外其实前端的页面更需要茬web页面性能优化化上下功夫,只有这样才能给我们的用户带来更好的用户体验不仅仅如此,如果前端优化得好他不仅可以为企业节约荿本,他还能给用户带来更多的用户因为增强的用户体验。说了这么多那么我们应该如何对我们前端的页面进行web页面性能优化化呢?

湔端的页面主要包括xhtml,css,js其实xhtml就是现实中所谈到的内容,页面的内容:文字图片,flash,视频等

而前端开发工作者可以控制的是什么呢?那就昰xhtmlcss,js的代码及相应的修饰(背景)图片下面我就根据我自己的经验来说说:

一、提倡前端开发工程师在书写xhtml的时候做到结构语义化。

結构中主要包括了head和body两个部分但是我们经常说的是结构语义化主要是body中的标签,但是我在这里还是简单的说一下headhead中其实包括了一些对於我们seo很有用的一些东西,比如title,Description,Keywords,这些东西在蜘蛛抓取的时候都是有帮助的当然,还有其他的一些我在此就不一一说明了,比如设置缓存等一些其他的信息

那么body中的话,包括的标签就很多了我觉得作为一个合格的前端开发人员你应该去熟悉他们,比如div,span,h,ul,ol,dl,p等等这类的标签嘚使用应该非常合理,还有就是注意h标签的断层及h1标签的使用,这些都是非常重要的

同时在我们的结构中不要出现style和onclick这样的内联的樣式和事件。希望大家能够注意结构与表现、行为的分离

我要回帖

更多关于 web页面性能优化 的文章

 

随机推荐