前端提高篇(135):网络优化一些知识点

网络优化:同域名并发连接限制
1.如何更快请求:

  • 域名发散,同时避免不必要的cookie传输,但会需要更多的dns查询——用DNS预解析/预链接(预创建TCP链接)
  • http2多路复用
  • cdn 资源服务器离用户更近,多个资源服务器,一个中心服务器,更高容错性
  • http缓存,适用于重复资源,注意资源更新,新鲜度检测/强缓存/服务器再验证/协商缓存/正常请求
  • service worker缓存 控制页面发送请求的次数,用cache storage缓存请求,可离线运行,

2.何时请求:资源声明
资源不仅只有js/css,还有如img,可以用资源提示:preload/prefetch/prerender

  • 预加载preload:使用高优先级加载
  • 预提取prefetch:在空闲时加载
  • 预渲染prerender:在空闲时加载并渲染html

后两个多用于加载接下来可能会用到的内容,比如翻页,但兼容性比较差;
加载的功能不会马上应用,只会缓存下来,所以使用时还是要声明资源;
预加载的内容,如果没有使用,会警告,这是对带宽的浪费

chrome资源优先级:先css再js
1.html、 css、 font、 同步XHR请求
2.preload资源、脚本、异步XHR请求、可见图片
3.异步脚本、图片、音频、视频
4.prefetch资源

异步js脚本加载 async /defer:
将script放在body最后,虽然可以避免dom还没解析,脚本操作就结束的错误,但在总时间上,耗时很长

defer会等dom解析完成之后再执行js
async一边解析dom,一边执行js

async可以用来加载与dom无关的脚本
其余脚本应该都用defer

另:http2服务器推送,本意是减少链接请求,无需声明就推送其他资源,但有了cdn/缓存等机制,浏览器获取资源不一定要直接通过服务器,设置这个功能反而浪费了带宽,且影响下一次链接,也不利于后续维护

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一又一以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识树中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践出来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛出一个老生常谈的面试问题: > 从输入 URL 到页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典的过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛出我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛出 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨出用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数
在准备前端找工作时,以下是一些适合练习的知识点: 1. HTML和CSS:掌握HTML和CSS的基本语法和常用标签,了解盒模型、选择器、布局等概念,熟悉响应式设计和常见的CSS框架(如Bootstrap)。 2. JavaScript:掌握JavaScript的基本语法、数据类型、DOM操作、事件处理、异步编程(如Promise和async/await)、面向对象编程等概念,熟悉ES6+的新特性。 3. 前端框架:熟悉至少一种主流前端框架,如Vue.js、React或Angular,理解其核心概念、组件化开发和路由管理,能够使用框架进行项目开发。 4. 网络请求:了解HTTP协议、RESTful API设计原则,能够使用fetch或axios等工具发送网络请求,并处理响应数据。 5. 前端工具链:了解Node.js和npm的基本使用,掌握常用的构建工具(如Webpack或Vite)、打包工具(如Babel)、版本控制工具(如Git)等,能够配置和使用这些工具进行项目开发和部署。 6. 跨平台开发:熟悉移动端开发框架(如React Native或Flutter)或桌面应用开发框架(如Electron),能够开发跨平台的应用程序。 7. 浏览器兼容性:了解不同浏览器的特性和兼容性问题,能够解决常见的浏览器兼容性Bug。 8. 性能优化:了解前端性能优化的基本原则和常用技巧,包括减少HTTP请求数量、压缩和缓存静态资源、懒加载、代码分割等。 9. 调试和测试:熟悉浏览器开发者工具的使用,能够进行调试和排查代码问题,了解单元测试和集成测试的基本概念,能够编写简单的测试用例。 10. 前端安全:了解常见的前端安全漏洞(如XSS和CSRF),并了解相应的防御措施。 以上是一些前端找工作时适合练习的知识点,当然还可以根据具体职位要求和公司需求进行针对性的学习和练习。祝你找到理想的前端工作!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值