前端优化方案-CDN优化

前端CDN优化方案主要包括:

一:加载资源的域名使用CDN:前端页面中引用的静态资源,如css、js、图片等,可以使用CDN进行加速。将资源上传到CDN,然后在页面中引用CDN上的资源链接即可。        

http://www.example.com/images/logo.png
 

        使用CDN后的地址为:

http://cdn.example.com/images/logo.png
 


二:使用CDN加速字体加载:如果页面中使用了字体文件,可以考虑使用CDN来加速字体文件的加载。

通过使用CDN,字体可以在离用户最近的服务器上加载,从而加快字体加载速度。

以下是使用CDN加速字体加载的步骤:

        1.找到可靠的字体CDN服务提供商。Google Fonts、Adobe Fonts和Fonts.com都提供CDN服务。您还可以使用其他第三方服务提供商。

        2.将字体CDN链接嵌入您的HTML文件中。链接格式类似于以下示例:

<link href='https://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet'>
 

        3.将字体名称应用于您的CSS样式表中。例如:

body {
    font-family: 'Open Sans', sans-serif;
}
 

        4.通过使用浏览器开发工具来检查字体是否从CDN加载,以确保该方案成功。


三:设置缓存控制:设置静态资源的缓存控制,可以有效减少页面的HTTP请求次数,提高页面加载速度。设置Expires和Cache-Control响应头,控制浏览器缓存。

        Expires和Cache-Control是HTTP响应头字段,用于控制浏览器缓存行为。

        Expires 指定了响应的过期时间,告诉浏览器在过期时间前可以直接从浏览器缓存获取资源。过期时间是服务器时间,需要设置一个固定时间,例如指定资源在5分钟后过期:

Expires: Wed, 21 Oct 2019 07:28:00 GMT

        Cache-Control 表示缓存控制,可以指定缓存的行为,如是否缓存、缓存时间等。常用的指令有:

  • public:表示响应可以被所有用户缓存,包括CDN等。
  • private:表示响应只能被单个用户缓存,不能被CDN等缓存。
  • no-cache:表示浏览器需要重新验证缓存的有效性。
  • max-age: 指定资源可以被缓存的最大时间,例如指定资源可以缓存10分钟:
Cache-Control: max-age=600

        在设置Expires和Cache-Control时,可以同时设置两个响应头,如:

Expires: Wed, 21 Oct 2019 07:28:00 GMT
Cache-Control: max-age=600, public

        这表示资源在过期时间前可以被所有用户缓存,并且可以被缓存10分钟。


四:禁用不必要的Cookie:对于静态资源请求,不需要设置Cookie,因此可以禁用掉不必要的Cookie。

        禁用不必要的Cookie可以减少HTTP请求头的大小,从而提高响应速度。可以在服务器端通过设置HttpOnly属性或者使用浏览器插件来实现。

        HttpOnly属性是在设置Cookie时添加的,通过这个属性可以禁止Cookie被客户端JavaScript访问。这样,Cookie就不能被利用来进行跨站脚本攻击,同时也可以减少Cookie的大小。可以在服务器端设置如下的响应头:

Set-Cookie: mycookie=xxx; HttpOnly

        使用浏览器插件可以通过选择性地禁用Cookie。例如,Chrome浏览器的EditThisCookie插件可以方便地管理Cookie,可以将不必要的Cookie禁用或删除。


五:异步加载js:对于一些不必要立刻加载的js,可以采用异步加载方式,从而避免对页面加载速度的影响。

        异步加载(Asynchronous Loading)是一种优化网页性能的常用手段,可以让页面更快地加载并提高用户体验。异步加载js文件可以避免阻塞页面渲染,加速页面加载速度。下面介绍两种实现异步加载js的方法:

        1.使用async属性

        在HTML5中,添加async属性可以异步加载js文件,例如:

<script src="your-script.js" async></script>

这样,浏览器会异步地下载和执行your-script.js文件,而不会阻塞页面的渲染。需要注意的是,异步加载js文件可能会导致文件的执行顺序变化,需要确保不同文件之间的依赖关系。

        2.使用动态创建script标签

        另一种实现异步加载js的方法是使用JavaScript动态创建script标签,例如:

var script = document.createElement('script');
script.src = 'your-script.js';
document.head.appendChild(script);

        这样,浏览器也会异步地下载和执行your-script.js文件,从而使页面更快地加载。与使用async属性相比,使用动态创建script标签可以更好地控制文件之间的依赖关系,可以在确保执行顺序的情况下异步加载不同的js文件。


六:使用HTTP2协议:HTTP2协议可以更快地加载资源和文件,从而提高网站的响应速度。CDN服务商大多支持HTTP2协议。

        使用HTTP2协议是一种优化网站性能的有效方式,可以加快网页加载速度,提高用户体验。HTTP2协议相对于HTTP1.1协议,有以下优势:

  1. 多路复用:HTTP2协议支持多路复用,可以在一个连接中同时传输多个请求和响应,从而避免了HTTP1.1中的队头阻塞问题。

  2. 二进制传输:HTTP2协议采用二进制格式传输数据,取代了HTTP1.1中的文本格式,减少了传输数据的大小,从而提高了传输效率。

  3. 头部压缩:HTTP2协议使用HPACK算法对请求和响应头部进行压缩,减少了传输数据的大小,提高了传输效率。

  4. 服务器推送:HTTP2协议支持服务器推送,可以在客户端发送请求之前主动将一些资源推送给客户端,加快页面加载速度。

要使用HTTP2协议,需要满足以下条件:
  1. 网站必须使用HTTPS协议,因为HTTP2协议只能在HTTPS协议上使用。

  2. 服务器和客户端必须支持HTTP2协议,大部分现代浏览器和Web服务器都已经支持HTTP2协议,但需要检查是否需要额外配置。

  3. 确保网站的资源大小适合HTTP2协议的多路复用和头部压缩。如果资源太小,多路复用和头部压缩可能带来额外的开销。


七:DNS预取:使用DNS预取可以提前获取第三方域名的DNS解析结果,从而提高资源请求速度。

        DNS预取是一种优化网站性能的技术,可以减少DNS查询时间,加速网页加载速度。DNS查询是浏览器加载网页时的第一步,它需要向DNS服务器请求解析网站域名所对应的IP地址。DNS预取可以在浏览器开始加载网页之前,提前解析网页中将要用到的域名对应的IP地址,从而加速DNS查询的过程。

        要使用DNS预取,可以在网页头部的HTML代码中加入以下代码:

<link rel="dns-prefetch" href="//example.com">

        其中,href属性指定要预取的域名。可以在同一个页面中添加多个预取域名,每个域名一行。

        尽管DNS预取可以加速页面加载速度,但过度使用DNS预取也会带来一些问题。如果预取了很多域名,会增加网络负载和带宽开销,而且可能导致DNS缓存污染。因此,应该根据网站的实际情况,选择需要预取的域名数目。


八:Gzip压缩:使用Gzip压缩可以减小资源请求大小,降低响应时间,提高性能。

        Gzip压缩是一种常用的网页性能优化技术,可以减小HTML、CSS、JavaScript等文本文件的大小,从而加速页面加载速度以及减小网络传输的开销。Gzip压缩利用的是文本文件的重复性,将重复的内容只保留一份,并用一个指向这些重复内容的引用来代替多个重复出现的内容,在传输时只传输一份内容,从而减小网络传输的开销。

        一般来说,可以在服务器端开启Gzip压缩功能,当服务器发送文件时,会判断客户端是否支持Gzip压缩,如果支持,则会将文件进行压缩后再发送给客户端。大多数的现代浏览器都支持Gzip压缩,因此可以在服务器端开启Gzip压缩来提高网站性能。

        对于Apache服务器,可以通过在.htaccess文件中添加以下代码来开启Gzip压缩:

<IfModule mod_deflate.c>
    # force deflate for mangled headers
    # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>

    # HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
    <IfModule filter_module>
        FilterDeclare   COMPRESS
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $text/html
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $text/css
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $text/plain
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $text/xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $text/x-component
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/javascript
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/json
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/rss+xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/atom+xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $image/svg+xml
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
        FilterProvider  COMPRESS DEFLATE resp=Content-Type $font/opentype
        FilterChain     COMPRESS
        FilterProtocol  COMPRESS DEFLATE change=yes;byteranges=no
    </IfModule>

    <IfModule !mod_filter.c>
        # Legacy versions of Apache
        AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
        AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
        AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
    </IfModule>
</IfModule>

        以上是对于Apache服务器的配置方式,在其他服务器中,具体的配置方法可能会有所不同,可以查看相应的服务器文档获得更多的信息。


九:图片优化:对于大图可以进行裁剪和压缩,从而减小文件大小,提高页面加载速度。

常用的前端图片优化技术有以下几种:

  1. 压缩图片:使用专业的图片压缩工具,如TinyPNG、JPEGmini等,可以将图片的大小压缩到更小,从而减少文件的大小。对于PNG格式图片,可以采用有损压缩的方式来减少文件的大小。

  2. 使用WebP格式图片:Google开发的WebP格式图片,可以将图片大小进行更高效的压缩,从而减少文件的大小,提高网站的加载速度。不过,WebP格式图片在一些老式浏览器上还不被支持。

  3. 图片延迟加载:对于一些较大的图片,可以使用图片延迟加载的方式来优化加载速度。即将页面上的图片进行分段加载,当用户滚动页面到某个位置时,再加载该位置以下的图片,从而减少首屏加载时间。

  4. 使用适当的图片格式:对于不同类型的图片,适当选择不同的图片格式可以减少文件的大小。例如,对于图标、简单的矢量图等,可以选择使用SVG格式图片;对于照片等复杂的图像,可以选择使用JPEG格式图片。

  5. CDN加速:使用CDN加速服务可以将图片缓存在CDN服务器上,从而加快图片的加载速度,减少对原服务器的请求次数,提高网站的性能和用户体验。

通过上述图片优化技术的应用,可以大幅度提高网站的性能和用户体验。


十:压缩和合并js、css文件:将一些同类型的js、css文件进行压缩和合并,降低文件大小,从而减少请求次数,提高页面加载速度。

         压缩js、css文件可以减小文件的大小,从而减少网络传输的开销。现在常用的压缩方式有两种:一种是将代码中的空格、换行符、注释等无用字符删除,从而减小文件的大小;另一种是采用压缩算法对代码进行压缩,从而进一步减小文件的大小。常用的js、css文件压缩工具有UglifyJS、YUI Compressor、Google Closure Compiler等。

这些前端CDN优化方案配置可以根据具体情况进行调整和优化,以达到最佳效果。

猜你喜欢

转载自blog.csdn.net/weixin_40381947/article/details/131448708