关于提高网站性能的几点建议

news/2024/5/9 18:56:08/文章来源:https://blog.csdn.net/weixin_33878457/article/details/91954043

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近在学习《高性能网站建设指南》这本书,本文算是一个学习笔记,将学到的东西进行整理一下,方便后面查看。

  性能黄金法则(Performance Golden Rule)解释了只有10%~20%的最终用户响应时间花在接受所请求的用户HTML文档上,剩余的80%~90%时间花在为HTML文档所引用的所有组件(图片、脚本、样式表等)进行的HTTP请求上,最终用户响应时间花费在页面组件上
  ——Steve Sounders

1 文件合并(减少HTTP请求数量)

  • CSS Sprites

  利用css sprites将网站用到的图片合并成一张图片,通过background-positionwidthheight控制背景图位置来使用某一个图标,这种方式可以将多个图片请求缩减为一次,生成css sprites的工具也很多,grunt和gulp中都有相关的插件,CssGaga也不错。

  • 合并js和css

  和精灵图一样,合并css和js文件也是减少HTTP请求很重要的方式,对css文件的合并目前来说没有什么争议,但是对于当前js模块化盛行,将所有js文件合并成一个文件,仿佛是一种倒退。正确的方式是遵守编译型语言的模式,保持js的模块化,在生成过程中只对初始请求用到的js文件生成目标文件。

2 使用内容发布网络(减少HTTP请求时间)

  HTTP请求时间另一个影响因素是你与网站web服务器所处的距离,显然距离越远,请求所需的时间也越久,通过CDN可以大大改善这一点。

  CDN是分布在多个不同地理位置的web服务器,用于更加有效的向用户发布内容。CDN最主要的功能是给终端用户存放静态文件,另外也提供下载、安全服务等功能。

3 设置浏览器缓存(避免重复HTTP请求)

  • 使用Expire/Cache-control

  浏览器通过使用缓存可以避免每次都进行重复的请求,HTTP 1.0和HTTP1.1分别有不同的缓存实现方式,Expires(1.0)和Cache-control(1.1)。Web服务器通过expires告诉客户端在指定的时间内,都使用该文件的缓存副本,不再向服务端重复发出请求,例如:

    Expires: Thu, 01 Dec 2016 16:00:00 GMT (GMT格式)

  这个设置意味着截止到2016年12月1日,都可以使用该缓存副本,无需再发出请求。

  Expires这种通过截止日期的方式,存在一个限制:要求客户端和服务端时钟严格同步,而HTTP 1.1引入的Cache-Control通过指定一个以秒为单位的时间指定缓存日期,则不存该限制,例如:

    Cache-Control: max-age=31536000

  这个设置意味缓存时间为一年,推荐使用Cache-Control,但是在支持HTTP 1.1的情况下,另外要注意的一点:Cache-Control和Expire同时存在时,Cache-Control具有更高的优先级

  • 配置或移除ETag

  使用Expire/Cache-Control可以避免第二次访问时,使用本地缓存避免重复HTTP请求,提高网站速度。然而,在用户点击了浏览器刷新或者在expire已过期的情况下,仍然会向服务端发出HTTP GET请求,而此时如果该文件并没有发生变化,服务端不会返回整个文件而是会返回304 Not Modified状态码。

  服务端判断该文件是否发生变化的依据有两个:Last-Modified(最新修改日期)和ETag(实体标签);

  ETag(Entity Tags)是在HTTP 1.1引入的,与Last-Modified同时存在时要有更高的优先级。服务端通过对比客户端发来的ETag(If-None-Match)和当前ETag,若相同返回304 Not Modifed,否则返回整个文件以及200 OK。

  ETag存在一个问题:当浏览器向一个服务器发送GET请求原始组件,之后又向另一台服务器请求该组件时,ETag是不匹配的,当然,如果你的网站寄宿在一台服务器上不存在这个问题,而现在很多网站使用多台服务器,ETag的存在就大大降低验证有效性的成功率。

  存在这个问题是时的解决办法是对ETag进行配置,移除服务器innode值只保留修改时间戳和大小作为ETag值,或者直接移除ETag,使用Last-Modified来验证文件有效性。

4 压缩组件(减小HTTP请求大小)

  通过对HTTP传输的文件进行压缩减小HTTP请求的大小,提高请求速度,GZIP是目前最常用也是最有效的压缩方式。

  然而,并非所有的资源文件都需要压缩,压缩的成本包括服务端需要花费CPU周期进行压缩,而客户端也需要对压缩文件进行解压缩,必须结合自己网站进行权衡。现在绝大多数网站都对其HTML文档进行压缩,部分网站选择对js、css进行压缩,几乎没有网站对图片、PDF等文件进行GZIP压缩,原因在于这些文件是已经被压缩过的,采用HTTP压缩已经被过压缩的东西并不能使它更小。事实上,添加标头,压缩字典,并校验响应体实际上使它变得更大,而且还浪费了CPU。

  如何对网站开启GZIP,需要在所使用的web服务器(IIS、Nginx、Apache等)中进行设置。

5 CSS文件放在首部

  将CSS文件放在首部和放在尾部,并不影响HTTP请求,因此从请求时间上来讲是一致的,然而从用户体验的角度,将CSS文件放在首部,会获得更好的用户体验。

  原因在于浏览器是从上到下依次解析html文档,将CSS文件置于头部,页面会首先对CSS文件发出请求,随后加载DOM树并对其进行渲染,页面会逐步呈现在用户面前。

  而与之相反,如果将CSS文件放置在尾部,页面加载完整DOM之后请求CSS文件,然后对整个DOM树渲染并呈现给用户,从用户的角度,在css文件没有请求完成之前,整个页面是出于白屏状态的,白屏是浏览器的一种行为,David Hyatt对其的解释是这样的

在样式树没有完全加载之前,渲染dom树就是一种浪费,因为在样式树加载完成之后会再次渲染,出现FOUC(无样式内容闪烁)问题。

  另外要注意的一点,使用link而不是@import引入css样式表,使用@import引入的样式即使写在首部,也会在文档最后加载。

6 JS文件放在尾部

  HTTP请求是并行的,不同浏览器并行下载的数目也不一样(2、4、或者8个),并行下载提高了HTTP请求的速度。而将JS文件放在首部,不仅会阻塞后面文件的下载而且会阻塞页面的渲染。

  为什么会这样呢?原因有两个:

  • JS文件中可能存在document.write修改页面的内容,因此页面会在脚本执行完成之后才可使渲染。
  • 不同JS文件不管大小如何,可能存在依赖关系,因此必须按照顺序进行执行,因此在加载脚本的时候并行下载是禁止的。

  所以,最好的方式是讲js文件放置在尾部,等页面所有可视化组件加载完成之后再进行请求,提高用户体验。

转载于:https://my.oschina.net/lenolong/blog/712814

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

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

相关文章

如何免费把网站从http升级到https

预备知识: 1.什么是https, 相对于https有什么优势/劣势?2.升级https需要准备的文件? 如何升级? 3.ssl证书类型? (EV/OV/通配符证书....)4.如何选择ssl证书? 如何选择供应商? (推荐一家:godaddy比较便宜,Versign/GlobalSign等都比较偏贵)5.如何免费获取信任的…

【运维小分享】记个人博客网站受针对xmlrpc.php的暴力破解***

起因:今天忽然打开个人blog,就发现打开很慢,然后出现了下图的反馈:服务器服务不可用!waht?刷新了几次都不行,赶紧登陆服务器后台查看情况。确认***:登陆后台后通过netstat发现连接数…

网站下面的文件找不到_老师傅个人珍藏3年的资源网站,就没有找不到的资源,请珍惜使用...

俗话说的好:靠人不如靠自己,自己动手丰衣足食,还是得自己搜索资源,但是苦于没有给力的资源搜索网站,不用担心啦!下面分享几个老师傅个人珍藏3年的资源网站,在网上就没有这几款网站找不到的资源&…

seo管理php源码_linux可视化管理工具-旗鱼云梯

对于经常操作linux的人来说,一款可视化管理工具是一个最好的选择,但是国内外这么多可视化工具,很多运维人员还是觉得外国的月亮圆,还是坚持用国外的插件工具,在这里我要说的是,你看看国内现在的网络环境&am…

ios12完美深色模式插件_让所有网站开启深色模式,试试这个浏览器插件

打从我第一次在用于开发的 IDE(Integrated Development Environment,集成开发环境)中了解并使用一个暗黑的主题之后,我就完完全全变成了 Dark Scheme 的死忠粉。尽管大众对程序员群体形成了「穿格子衫」的刻板印象;但在代码的世界里&#xff…

nextcloud网站不安全_nextcloud安装后常见问题及解决方法

系统:CentOS 7WEB环境:LNMP搭建问题一:PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(\”PATH\”) 测试时仅返回空结果.解决方法:在PHP-FPM配置文件:/usr/local/php/etc/php-fpm.conf 最后加上一句&#x…

利用Kali linux中的Dirbuster对网站进行渗透描目录

请自觉遵守网络安全法 1.进入kali linux,的Dirbuster 在URL中输入进行扫描的网站 工作方式选择自动切换 可以将Number of Threads的数值进行调节,在硬件允许的条件下‘ 在File with list of dirs/liles中找到相应的字典进行爆破 导入相应的字典文件 选择开启的方…

PyCharm开发Django网站搜索功能教程

搜索 搜索可以使用最原始的like的方式进行搜索。当然这种搜索方式对于一些小量的数据是非常合适的。但是随着数据量越来越大。这时候我们就需要使用搜索引擎了。搜索引擎会将所有需要搜索的数据使用算法做一个索引,以后搜索的时候就只需要根据这个索引即可找到相应的…

使用WebDeployment Project改善VS2005发布网站问题 (三) 常见问题

一、发布后网站浏览时出现乱码(http://www.cnblogs.com/chy710)如果页面编码是gb2312,可能会有此问题,请使用utf-8编码,vs2005中打开页面切换到HTML视图,选择[文件] / [高级保存选项],选择utf-8,保存,OK。二、发现不明…

Django搭建博客网站(1)

一、前言1.1.环境python版本:3.6Django版本:1.11.61.2.预览效果最终搭建的blog的样子,基本上满足需求了。框架搭好了,至于CSS,可以根据自己喜好随意搭配。二、建立博客应用2.1.建立项目和应用创建工程blogprojectdjang…

什么是最好的网站学习如何使用Linux系统?

2019独角兽企业重金招聘Python工程师标准>>> 其实不是很难使用Linux,由于有关系统的大量技术信息加上现在网上的信息鱼龙混杂,各种信息让我们分不清是真是假,您可能会被愚弄,但毕竟真的不是那么困难。为了给你一个开始…

Apache设置禁止访问网站目录

Apache默认在当前目录下没有index.html入口就会显示网站根目录,让网站目录文件都暴露在外面,是一件非常危险的事,例如:数据库密码泄露,隐藏页面暴露等严重安全问题! 例如,访问米扑网站根目录: h…

米扑科技的开源项目:sitemap-php 自动生成网站地图

米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml) 封装简化了许多功能模块,现在分享出来,源代码可在Github上下载,有简单的示例。Github 开源网址&a…

十大免费SSL证书:网站免费添加HTTPS加密

SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。 给自己的网…

十大免费SSL证书:网站免费添加HTTPS加密

SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。 给自己的网…

网站域名、备案、七牛云图床重新搭建与博客整理

最近碰上了一个问题,七牛云开始回收测试域名,结果导致我的图床有些失灵、一些软件资源都无法下载。其实这个问题在前一段不蒜子统计修改的博客里已经有兆头了。不过当时没注意。最后还是被逼得只能购买了域名,各类备案,重新搭建图…

python模拟用户浏览器登陆网站

2019独角兽企业重金招聘Python工程师标准>>> 【前置条件】 Python 2.7.13 |CentOS release 6.5 方案一:使用urllib2库 首先使用自己的账号和密码在浏览器登录,然后通过抓包拿到cookie,再将cookie放到请求之中发送请求即可&#xf…

LAMP架构部署和动态网站环境的配置

实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linuxapachephpmariadb(LAMP架构) 大型动态应用系统平台主要是针对于大流量、高…

10个帮助你优化网站的 .htaccess 技巧

“.htaccess”文件旺旺被网页设计师们忽略。假如你还不知道什么是htaccess的话,你可以去查一下wikipedia。它是目录级别的配置文件,有常用的网页服务器支持这种配置,例如Apache。下面我将列出10条有用的.htaccess配置技巧。 1. 反盗链 那些盗…

emlog rss.php,emlog伪静态设置-我的建站第一天 - 慕轲博客-建立自己的个人自媒体博客...

由于我住的地方网络比较卡,大的引擎比较卡,打开慢,果断选择emlog这款cms建了个个人博客,那么刚用问题就来了,什么问题呢?建站的人都知道,网站一般都要做静态或者伪静态的,emlog不支持…