Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
haizhilin2013 opened this issue May 20, 2019 · 7 comments
Labels
软技能 软技能

Comments

@haizhilin2013
Copy link
Collaborator

第35天 谈一谈你知道的前端性能优化方案有哪些?

@haizhilin2013 haizhilin2013 added the 软技能 软技能 label May 20, 2019
@AnsonZnl
Copy link
Contributor

AnsonZnl commented May 21, 2019

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

整理如下

客户端优化

  • 减少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
Copy link

fxxqq commented May 21, 2019

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

@myprelude
Copy link

缓存

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

优化加载

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

服务端渲染

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

@tzjoke
Copy link

tzjoke commented May 28, 2019

lighthouse 的一些tip

@yandongSS
Copy link

参考雅虎前端优化35条军规https://github.com/yingnian/Yahoo-35

@blueRoach
Copy link

减少HTTP请求次数和大小:

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

DOM:

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

CSS:

  • 减少重绘和重排

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

  • 图片的预加载
  • 加loading效果

@MrZ2019
Copy link

MrZ2019 commented Oct 21, 2020

缓存

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

优化加载

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

服务端渲染

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
软技能 软技能
Projects
None yet
Development

No branches or pull requests

8 participants