[软技能] 谈一谈你知道的前端性能优化方案有哪些?

AnsonZnl
2019-05-21 04:42:42 星期二
软技能
                    
                        
谈一谈你知道的前端性能优化方案有哪些?
Comments per page
< Page 1 / 1 >
AnsonZnl 2019-05-21 03:00:25

这个优化的范围挺大,但是总归可以分为服务端优化和客户端优化。

整理如下

客户端优化

  • 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
  • 使用CSS雪碧图(CSS Sprites)CSS Sprites一句话:将多个图片合并到一张单独的图片,这样就大大减少了页面中图片的HTTP请求。
  • 减少DOM操作次数,优化javascript性能。
  • 少用全局变量、减少DOM操作、缓存DOM节点查找的结果。减少IO读取操作。
  • 延迟加载 | 延迟渲染
  • 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
  • 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。

服务端优化

  • 尽量减少响应的体积,比如用 gzip 压缩,优化图片字节数,压缩 css 和 js;或加快文件读取速度,优化服务端的缓存策略。
  • 客户端优化 dom、css 和 js 的代码和加载顺序;或进行服务器端渲染,减轻客户端渲染的压力。
  • 优化网络路由,比如增加 CDN 缓存;或增加并发处理能力,比如服务端设置多个域名,客户端使用多个域名同时请求资源,增加并发量。

最后

  对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。
  减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

涉及的知识点太多,从客户端浏览器、渲染机制、缓存、 网络请求、代码压缩合并、图片格式、服务器代理、数据库的查询.....
暂时只能想到这么多,觉得自己答得并不是很好,希望有大佬回答一下这个问题。

fxxqq 2019-05-21 03:06:49

splitchunk 代码拆分,不经常改的ui库和框架可以设置缓存。

myprelude 2019-05-23 02:11:29

缓存

http缓存 设置好cache-control expires Last-modified;
前端缓存 对于一些页面今天配置直接存储到localStorage中;对于长期不发生改变的代码可以直接通过server-work存储到本地;

优化加载

webpack 开启 tree-shaking 减少代码体积
通过preload prefetch优化加载资源的时间
import('').then()异步加载资源
图片小于30k的图片直接做成base64;
对于首屏的样式可以直接内嵌到html中;

服务端渲染

SSR
对于首页可以直接通过node jade模板引擎输出,其他页面继续使用前端渲染,优化首屏、SEO

tzjoke 2019-05-28 08:55:09

lighthouse 的一些tip

yandongSS 2019-09-04 17:14:38
blueRoach 2020-07-07 09:12:20

减少HTTP请求次数和大小:

  • 压缩js、css和图片
  • tree-shaking(可以将没有使用的模板打上标记,然后被压缩删除)
  • CDN托管
  • 缓存

DOM:

  • 减少DOM操作
  • 将要获取的DOM结果,用变量保存

CSS:

  • 减少重绘和重排

如果实在有的时候数据量很大、或则图片很多,无法避免

  • 图片的预加载
  • 加loading效果
smile-2008 2020-10-21 09:38:04

缓存

http缓存 设置好cache-control expires Last-modified;
前端缓存 对于一些页面今天配置直接存储到localStorage中;对于长期不发生改变的代码可以直接通过server-work存储到本地;

优化加载

webpack 开启 tree-shaking 减少代码体积
通过preload prefetch优化加载资源的时间
import('').then()异步加载资源
图片小于30k的图片直接做成base64;
对于首屏的样式可以直接内嵌到html中;

服务端渲染

SSR
对于首页可以直接通过node jade模板引擎输出,其他页面继续使用前端渲染,优化首屏、SEO

Comments per page
< Page 1 / 1 >

学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!

【关注官方公众号】 每天4:30-5:00推送
【公众号推荐】 一起折腾前端算法
【微信学习群】 备注3+1