Web前端最新100条终极前端优化大全,三面美团web前端岗位怎么样

总结

  • 框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。

  • 算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

喜欢这篇文章文章的小伙伴们点赞+转发支持,你们的支持是我最大的动力!

一、页面内容


(1)减少HTTP请求数

Web 前端 80% 的响应时间花在图片、样式、脚本等资源下载上。最直接的方式是减少页面所需资源,但并不现实。所以,减少HTTP请求数主要的途径是:

合并JS/CSS文件。服务器端(CDN)自动合并,基于Node.js的文件合并工具,通过把所有脚本放在一个文件中的方式来减少请求数。

使用CSS Sprite将背景图片合并成一个文件,通过background-image 和 background-position 控制显示

行内图片(Base64编码)。使用Data URI scheme将图片嵌入HTML或者CSS中;或者将CSS、JS、图片直接嵌入HTML中,会增加文件大小,也可能产生浏览器兼容及其他性能问题。

减少页面的HTTP请求数是个起点,这是提升站点首次访问速度的重要指导原则。

(2)减少DNS查询

用户输入URL以后,浏览器首先要查询域名(hostname)对应服务器的IP地址,一般需要耗费20-120毫秒时间。DNS查询完成之前,浏览器无法从服务器下载任何数据。

基于性能考虑,ISP、局域网、操作系统、浏览器都会有相应的DNS缓存机制。

IE缓存30分钟,可以通过注册表中DnsCacheTimeout项设置;

Firefox缓存1分钟,通过network.dnsCacheExpiration配置;

另外减少不同的主机名可减少DNS查找,减少不同主机名的数量同时也减少了页面能够并行下载的组件数量,避免DNS查找削减了响应时间,而减少并行下载数量却增加了响应时间。原则是把组件分散在2到4个主机名下,这是同时减少DNS>查找和允许高并发下载的折中方案。

(3)避免重定向

HTTP重定向通过301/302状态码实现。下面是一个有301状态码的HTTP头

浏览器会自动跳转到Location域指明的URL。重定向需要的所有信息都在HTTP头部,而响应体一般是空的。其实额外的HTTP头,比如Expires和Cache-Control也表示重定向。除此之外还有别的跳转方式:refresh元标签和JavaScript,但如果你必须得做重定向,最好用标准的3xxHTTP状态码,主要是为了让返回按钮能正常使用。

客户端收到服务器的重定向响应后,会根据响应头中Location的地址再次发送请求。重定向会影响用户体验,尤其是多次重定向时,用户在一段时间内看不到任何内容,只看到浏览器进度条一直在刷新。

最浪费的重定向经常发生、而且很容易被忽略:URL

末尾应该添加/但未添加。比如,访问http://astrology.yahoo.com/astrology将被301重定向到

http://astrology.yahoo.com/astrology/(注意末尾的 /)。如果使用

Apache,可以通过Alias或mod_rewrite或DirectorySlash解决这个问题。

网站域名变更:CNAME结合Alias或mod_rewrite或者其他服务器类似功能实现跳转。

(4)缓存Ajax请求

最重要的的优化方式是缓存响应结果。有尚未过期的Expires或者Cache-Control

HTTP头,那么之前的资源就可以从缓存中读出。必须通知浏览器,应该继续使用之前缓存的资源响应,还是去请求一个新的。可以通过给资源的Ajax

URL里添加一个表明用户资源最后修改时间的时间戳来实现。如果资源从上一次下载之后再没有被修改过,时间戳不变,资源就将从浏览器缓存中直接读出,从而避免一次额外的HTTP往返消耗。详见服务器-添加Expires或Cache响应头。

(5)延迟加载

页面初始加载时哪些内容是绝对必需的?不在答案之列的资源都可以延迟加载。比如:

非首屏使用的数据、样式、脚本、图片等; 用户交互时才会显示的内容。

遵循「渐进增强」理念开发的网站:JavaScript用于增强用用户体验,但没有(不支持)

JavaScript也能正常工作,完全可以延迟加载JavaScript。

将首屏以外的HTML放在不渲染的元素中,如隐藏的<textarea>,或者type属性为非执行脚本的<script>标签中,减少初始渲染的DOM元素数量,提高速度。等首屏加载完成或者用户操作时,再去渲染剩余的页面内容。

(6)预加载

预先加载利用浏览器空闲时间请求将来要使用的资源,以便用户访问下一页面时更快地响应。

无条件预先加载:页面加载完成(load)后,马上获取其他资源。以 google.com 为例,首页加载完成后会立即下载一个 Sprite

图片,此图首页不需要,但是搜索结果页要用到。

有条件预先加载:根据用户行为预判用户去向,预载相关资源。比如search.yahoo.com开始输入时会有额外的资源加载。Chrome等浏览器的地址栏也有类似的机制。

有「阴谋」的预先加载:页面即将上线新版前预先加载新版内容。网站改版后由于缓存、使用习惯等原因,会有旧版的网站更快更流畅的反馈。为缓解这一问题,在新版上线之前,旧版可以利用空闲提前加载一些新版的资源缓存到客户端,以便新版正式上线后更快的载入。

比如

preload 是告诉浏览器页面必定需要的资源,浏览器一定会加载这些资源.

prefetch 是告诉浏览器页面可能需要的资源,浏览器不一定会加载这些资源

所以,对于当前页面很有必要的资源使用 preload,对于可能在将来的页面中使用的资源使用 prefetch

(7)减少DOM元素数量

复杂的页面不仅下载的字节更多,JavaScript

DOM操作也更慢。例如,同是添加一个事件处理器,500个元素和5000个元素的页面速度上会有很大区别。 从以下几个角度考虑移除不必要的标记:

是否还在使用表格布局? 塞进去更多的

仅为了处理布局问题?也许有更好、更语义化的标记。

能通过伪元素实现的功能,就没必要添加额外元素,如清除浮动。

浏览器控制台中输入以下代码可以计算出页面中有多少 DOM 元素:

document.getElementsByTagName(’*’).length;

为什么不使用表格布局?

更多的标签,增加文件大小; 不易维护,无法适应响应式设计; 性能考量,默认的表格布局算法会产生大量重绘

(8)划分内容到不同域名

浏览器一般会限制每个域的并行线程(一般为6个,甚至更少),使用不同的域名可以最大化下载线程,但注意保持在2-4个域名内,以避免DNS查询损耗。

例如,动态内容放在csspod.com上,静态资源放在static.csspod.com上。这样还可以禁用静态资源域下的Cookie,减少数据传输,详见Cookie 优化。

(9)尽量减少iframe的使用

用iframe可以把一个HTML文档插入到父文档里,重要的是明白iframe是如何工作的并高效地使用它。

的优点: 可以用来加载速度较慢的第三方资源,如广告、徽章; 可用作安全沙箱; 可以并行下载脚本。
的缺点:加载代价昂贵,即使是空的页面; 阻塞页面 load 事件触发;

Iframe 完全加载以后,父页面才会触发 load 事件。 Safari、Chrome 中通过 JavaScript 动态设置 iframe src 可以避免这个问题。

(10)避免404错误

HTTP请求很昂贵,返回无效的响应(如404未找到)完全没必要,降低用户体验而且毫无益处。

一些网站设计很酷炫、有提示信息的404页面,有助于提高用户体验,但还是浪费服务器资源。尤其糟糕的是外部脚本返回404,不仅阻塞其他资源下载,浏览器还会尝试把404页面内容当作JavaScript解析,消耗更多资源。

二、服务器


(1)使用CDN

内容分发网络(CDN)是一组分散在不同地理位置的web服务器,用来给用户更高效地发送内容。将资源缓存在比较靠近用户的地方,

CDN预热,通过预热功能,将资源包推送到各CDN节点,提前先缓存起来。防止用户第一次下载的时候,下载速度过慢

(2)添加Expires或Cache-Control响应头

静态内容:将 Expires 响应头设置为将来很远的时间,实现「永不过期」策略;

动态内容:设置合适的 Cache-Control 响应头,让浏览器有条件地发起请求。

Cache-Control头在HTTP/1.1规范中定义,取代了之前用来定义响应缓存策略的头(例如

Expires、Pragma)。当前的所有浏览器都支持Cache-Control,因此,使用它就够了

(3)启用Gzip

前端工程师可以想办法明显地缩短通过网络传输HTTP请求和响应的时间。毫无疑问,终端用户的带宽速度,网络服务商,对等交换点的距离等等,都是开发团队所无法控制的。但还有别的能够影响响应时间的因素,压缩可以通过减少HTTP响应的大小来缩短响应时间。

Gzip压缩通常可以减少70%的响应大小,对某些文件更可能高达90%,比Deflate更高效。主流 Web 服务器都有相应模块,而且绝大多数浏览器支持gzip解码。所以,应该对HTML、CSS、JS、XML、JSON等文本类型的内容启用压缩。

注意!!! 图片和 PDF 文件不要使用 gzip。它们本身已经压缩过,再使用 gzip 压缩不仅浪费 CPU

资源,而且还可能增加文件体积。

从HTTP/1.1开始,web客户端就有了支持压缩的Accept-Encoding HTTP请求头。

Accept-Encoding: gzip, deflate

如果web服务器看到这个请求头,它就会用客户端列出的一种方式来压缩响应。web服务器通过Content-Encoding响应头来通知客户端。

Content-Encoding: gzip

(4)配置 Etag

实体标签(ETags),是服务器和浏览器用来决定浏览器缓存中组件与源服务器中的组件是否匹配的一种机制(“实体”也就是组件:图片,脚本,样式表等等)。添加ETags可以提供一种实体验证机制,比最后修改日期更加灵活。一个ETag是一个字符串,作为一个组件某一具体版本的唯一标识符。唯一的格式约束是字符串必须用引号括起来,源服务器用相应头中的ETag来指定组件的ETag

HTTP/1.1 200 OK

Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT

ETag: “10c24bc-4ab-457e1c1f”

Content-Length: 12195

复制代码然后,如果浏览器必须验证一个组件,它用If-None-Match请求头来把ETag传回源服务器。如果ETags匹配成功,会返回一个304状态码,这样就减少了12195个字节的响应体。Etag

通过文件版本标识,方便服务器判断请求的内容是否有更新,如果没有就响应 304,避免重新下载。

GET /i/yahoo.gif HTTP/1.1

Host: us.yimg.com

If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT

If-None-Match: “10c24bc-4ab-457e1c1f”

HTTP/1.1 304 Not Modified

(5)尽早输出(flush)缓冲

用户请求页面时,服务器通常需要花费200 ~ 500毫秒来组合 HTML

页面。在此期间,浏览器处于空闲、等待数据状态。使用PHP中的flush()函数,可以发送部分已经准备好的

HTML到浏览器,以便服务器还在忙于处理剩余页面时,浏览器可以提前开始获取资源。 可以考虑在之后输出一次缓冲,HTML

head一般比较容易生成,先发送以便浏览器开始获取里引用的CSS等资源。 Example:

<?php flush(); ?>

(6)Ajax请求使用GET方法

浏览器执行XMLHttpRequest POST请求时分成两步,先发送Http

Header,再发送data。而GET只使用一个TCP数据包(Http Header与data)发送数据,所以首选GET方法。

根据HTTP规范,GET用于获取数据,POST则用于向服务器发送数据,所以Ajax请求数据时使用GET更符合规范。

(7)避免图片src为空

图片src属性值为空字符串可能以下面两种形式出现: HTML: 复制代码JavaScript: var img = new Image(); img.src = “”;

复制代码虽然src属性为空字符串,但浏览器仍然会向服务器发起一个HTTP请求:

IE 向页面所在的目录发送请求; Safari、Chrome、Firefox向页面本身发送请求; Opera不执行任何操作。

空src产生请求的后果不容小觑:

给服务器造成意外的流量负担,尤其时日 PV 较大时; 浪费服务器计算资源; 可能产生报错。

空的href属性也存在类似问题。用户点击空链接时,浏览器也会向服务器发送HTTP请求,可以通过JavaScript阻止空链接的默认的行为。

三、Cookie


(1)减少 Cookie 大小

Cookie被用于身份认证、个性化设置等诸多用途。Cookie通过HTTP头在服务器和浏览器间来回传送,减少Cookie大小可以降低其对响应速度的影响。

去除不必要的 Cookie; 尽量压缩 Cookie 大小; 注意设置 Cookie 的 domain 级别,如无必要,不要影响到

sub-domain; 设置合适的过期时间。

(2)静态资源使用无Cookie域名

静态资源一般无需使用Cookie,可以把它们放在使用二级域名或者专门域名的无Cookie服务器上,降低Cookie传送的造成的流量浪费,提高响应速度。

四、CSS


(1)把样式表放在中

把样式表放在中可以让页面渐进渲染,尽早呈现视觉反馈,给用户加载速度很快的感觉。

这对内容比较多的页面尤为重要,用户可以先查看已经下载渲染的内容,而不是盯着白屏等待。 如果把样式表放在页面底部,一些浏览器为减少重绘,会在

CSS 加载完成以后才渲染页面,用户只能对着白屏干瞪眼,用户体验极差。把样式表放到文档的HEAD部分能让页面看起来加载地更快。

(2)不要使用CSS表达式

CSS表达式可以在CSS里执行JavaScript,仅IE5-IE7支持,IE8标准模式已经废弃。

CSS表达式超出预期的频繁执行,页面滚动、鼠标移动时都会不断执行,带来很大的性能损耗。

(3)使用替代@import

最后

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

96道前端面试题:

常用算法面试题:

前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化

很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

96道前端面试题:

  • [外链图片转存中…(img-xD09dTZs-1715898829041)]

常用算法面试题:

  • [外链图片转存中…(img-d3fMgsMY-1715898829042)]

前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化

  • [外链图片转存中…(img-vixpkET0-1715898829042)]
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值