前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:你是如何对前端项目进行优化的?

面试官:你是如何对前端项目进行优化的?

作者头像
用户1272076
发布2023-03-09 18:23:47
4350
发布2023-03-09 18:23:47
举报
文章被收录于专栏:张培跃张培跃

面试官:你认为前端工作中最重要的是什么?

答:用户体验!

面试官:如何可以提升用户体验?

答:从提升项目性能开始!

面试官:如何才能提升项目性能呢?

答:对项目进行优化!

面试官:如何对项目进行优化?

答:主要从项目加载时以及运行时两方面进行优化。

面试官:如何进行加载时的优化?

答:主要从以下几方面入手:

  • CSS 写头部,JavaScript 写底部:所有放在 head 标签里的 CSSJS 文件都会堵塞渲染。如果这些 CSSJS 需要加载和解析很久的话,那么页面就会空白了,所以 JS 文件要放在底部,等HTML解析完了再加载 JS 文件。那为什么 CSS 文件还要放在头部呢?因为先加载HTML再加载 CSS,会让用户第一时间看到的是无样式且丑陋的,为了避免这种粗鄙的情况发生,所以要将 CSS 文件放在头部了。
  • 使用服务器端渲染:在进行客户端渲染时,需要先获取HTML文件,然后再根据需要下载JS文件,并运行文件,然后生成DOM,最后再次渲染。这个过程会在无形中拖慢我们的性能。服务器端渲染是服务端直接返回HTML文件,客户端只需要解析HTML文件即可。
  • 减少HTTP请求:一个完整的http请求需要经历DNS查找,TCP握手,浏览器发出HTTP请求,服务器接收请求,服务器处理请求并给予响应,浏览器接收响应等等一系列复杂的过程。当请求资源较多时,直接体现在了性能消耗上面。这就是为何要将多个小文件合并成一个文件,从而减少http请求次数的原因。
  • 静态文件使用CDNCDN指的是内容分发网络,它是一个分布在多个不同地理位置的web服务器。我们都知道,当服务器离用户越远延迟越高。CDN就是为了解决这一问题而存在的。CDN 在多个位置布置服务器,让用户离服务器更近,从而缩短服务请求时间。
  • 字体图标代替图片图标:字体图标就是将图标制作成一个字体,使用时就跟字体一样,可以设置其属性,例如 font-sizecolor 等等,非常方便。并且字体图标是矢量图,不会失真。还有一个优点是生成的文件特别小。
  • 利用缓存不重复加载相同的资源:为了避免用户每次访问网站都得请求文件,我们可以通过添加Expires 来控制这一行为。Expires 设置了一个时间,只要在这个时间之前,浏览器都不会请求文件,而是直接使用缓存。
  • 图片优化:首先进行图片延迟加载,在页面中,先不给图片设置路径,只有当图片出现在浏览器的可视区域时,才去加载真正的图片;其次降低图片质量,图片100% 的质量和 90% 的质量通常肉眼是看不出来区别,尤其是用来当背景图的时候,我们可以将图片切成 JPG 格式,并且将它压缩到 60% 的质量。再次,尽可能利用 CSS3 效果代替图片,因为代码大小通常是图片大小的几分之一甚至几十分之一;最后一个就是使用雪碧图。
  • 通过 webpack 按需加载代码:懒加载是一种很好的优化方式,它可以加快应用的初始加载速度,减轻总体体积,因为某些代码块可能永远不会被加载到。

面试官:那如何进行运行时的优化?

答:主要从以下几方面入手:

  • 减少重绘重排:JS 修改样式几何属性(位置 ,大小)时,有可能产生大量重排重绘,所以可以通过 class 来改变样式。
  • 使用事件委托:事件委托利用事件冒泡,只需指定一个事件处理函数,就可以管理某一类型的所有事件,使用事件委托可以大量节省内存。
  • if-else 对比switch判断条件越多,越倾向于使用 switch 而不是 if-else。不过switch 只能用于 case 值为常量的分支结构,而if-else 更加灵活。
  • 不要覆盖原生方法:无论你的JS代码如何优化,执行效率都比不上原生方法。当原生方法可用时,我们尽量使用它们。
  • 降低CSS 选择器的复杂度:浏览器读取选择器,遵循的原则是从选择器的右边到左边读取。所以,尽可能降低CSS选择器的复杂性
  • 使用 flexbox 布局: flexbox布局方式,它比起早期的布局方式来说性能更好。不过flexbox 兼容性还不太友好,所以要谨慎使用。
  • 用 transform 和 opacity 属性实现动画:因为transformsopacity 这两个属性更改不会触发重排重绘。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档