前端网站性能优化

此情无计可消除,才下眉头,又上心头。

我的github: 李大玄
我的私人博客: 李大玄
我的npm开源库: 李大玄
我的简书: 李大玄
我的CSDN: 李大玄
我的掘金: 李大玄
哔哩哔哩: 李大玄

1. 首先减少http请求, 首先是图片请求
  1-1.将项目中的图片尽量使用为icon 
  1-2.图片地图<map><area/></map> 
  1-3.还有精灵图(css-sprites)  
  1-4.图片压缩 压缩后的图片大小会减少
  1-5.小于300k的图片进行压缩 减少http请求 在webpack中可以配置
  1-6.合并脚本和样式表 因为都是外联进来的 每一个文件都需要加载 合并之后减少请求量

2. 使用内容发布网络
  2-1.使用CDN, 将一些资源放在cdn进行引入,发布静态内容
  2-2.节省,将资源放在单独的服务器上

3.添加 Expires Header
  3-1.浏览器使用缓存来减少http请求的数量,减少http的响应大小
      如果为页面中的一个图片返回了这个头,浏览器在后续的页面浏览中会使用缓存的图片
  3-2.max-age  mod_expires 
    浏览器再次请求服务器时,浏览器会先判断max-age,如果到期则直接请求服务器,否则直接从缓存中取,
    mod_expires Apache模块,在使用ExpiresHeader 时能够像max_age那样设置日期,通过 Expires Default 指令来完成
    (如果在规定的时间内,需要发版,但是有缓存任务的时候,可以使用生成新连接的方法进行资源重新请求)
4.压缩组件
  4-1. Accept-Encoding: gzip, deflate (客户端列出来的方法中的一种进行压缩响应)
    很多浏览器不支持deflate,但是支持 gzip
    很多网站会压缩HTML文档,但是像脚本和样式表,XML和JSON 都值得压缩
    图片和PDF不应该压缩,因为都是压缩过的 压缩只会浪费CPU资源,还可能会增加文件大小
    gzip能将响应整体减少66%, deflate能减少60%
  4-2. 配置
    配置gzip时使用的模块取决于Apache的版本 
      Accept1.3使用mod_gzip
      Accept2.x使用mod_deflate 
  4-3.代理缓存
    Vary: Accept-Encoding
  4-4.边缘情形
    服务器和客户端的压缩对等性看似简单,但必须正确才行。无论是客户端还是服务器发生错误,页面都会被破坏,
    错误不会经常发生,但是需要考虑。

5.将样式表放在顶部
  5-1.将DHTML 特征的样式表放在文档顶部,加载更快, 反之放在后面加载更慢
  5-2.逐步呈现
    将样式表放在文档底部会导致浏览器中阻止内容逐步呈现,为避免当样式变化时重绘页面中的元素,
    浏览器会阻塞内容逐步呈现.
  5-3.sleep.cgi
  5-4.将css放在顶部
    为了避免页面白屏,将样式表放在顶部,这样叫做(css at the top),不管页面是如何加载的,窗口新开,重新加载,页面都会逐步呈现
    一个style模块可以包含多个@import 但是@import必须放在所有其他规则之前
    @import有可能导致白屏,即便把@import放在文档的head标签中也是如此
  5-5.无样式内容的闪烁
    样式表在页面中的位置并不影响下载时间,但是会影响页面的呈现

6.将脚本放在底部 可以提高下载的并行度
  6-1.脚本带来的问题
  6-2.并行下载
  6-3.脚本阻塞下载
  6-4.最差情况: 将脚本放在顶部
  6-5.最佳情况: 将脚本放在底部

7.避免css 表达式  CSS表达式是动态设置css属性的一种强大 并且危险的方式.
  7-1.一次性表达式 防抖节流
  7-2.事件处理
  7-3.没有深入了解底层影响的情况下使用css表达式是很危险的

8.使用外部JavaScript 和 css
  8-1.纯粹而言,在HTML文档中写js与css 加载更快,因为减少了http请求 30% ~ 50%
  8-2.组件重用
    如过网站每个页面使用了想通的js和css,那么使用外部文件可以提高这些组件重用率.Expires
    如果重用性底,还是内联更有意义
  8-3.典型的对比结果
    
9.减少DNS查找
  Internet是通过IP地址来查找服务器的,犹豫IP地址很难记,太长使用包含主机名的URL来取代她
  dns也是开销,通常浏览器查找一个给定的主机名的IP地址要花费20~120毫秒
  9-1.DNS缓存和TTL
    DNS查找可以被缓存起来以提高性能

10. 精简JavaScript
  10-1.混淆是可以应用在源代码上的另一种优化方式.和精简一样,他会移除注释和空白,同事他还会改写代码.
  也就是压缩js
  10-2.精简css #000000 => #000  0代替0px

11. 避免重定向
  每一个请求都是要消费时间的

12. 避免重复脚本
  12-1.在页面冲多次包含相同的脚本回事页面变慢
  12-2.在Internet Explorer中,如果脚本没有被缓存,或在重新加载页面时,会产生额外的HTTP请求
  12-3.在Firefox 和 Internet Explorer中,脚本会被多次请求

13. 使用ETag 没看

14. 使ajax 可缓存
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容