promise 浏览器实现的源码_【更新中】浏览器相关的汇总
大家好,我是lz!这次是一篇记录文(总结的文章会持续更新,直到这章节结束,大家也可以关注我一起学习)
接下来会把浏览器,http 网络相关的内容进行一个汇总。这也是我面试最薄弱的一块。
1. 先从熟悉的开始,http。
通读axios源码 预计2 - 4 天
读源码之前不要盲目,先从会用开始。不会谈什么看源码。就算看了效果不大工欲善其事,必先利其器。
axios官网的描述是可以支持node端和浏览器端、使用Promise管理异步,告别传统 callback方式。那其实看到这块描述的时候。
我们可以自己手动写一个 xhr 利用promise封装的形式。
function axios(option){ return new Promise((resolve,reject) => { const xhr = new XMLHttpRequest() const async = option.async || false const type= option.methods || 'GET' const url = option.url const data = option.data const dataType = option.dataType || 'JSON' xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { switch (dataType.toUpperCase()) { case 'JSON': resolve(JSON.parse(xhr.responseText)); break; default: resolve(JSON.parse(xhr.responseText)); } } else { reject(); } } } xhr.open(type, url, async) type === 'POST' && xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded') xhr.send(type === 'GET' ? null : formatDatas(data)) })}
这个比较简单。而axios内部实现功能有很多。大致如下:
1. 支持浏览器和node.js
2. 支持promise
3. 能拦截请求和响应
4. 能转换请求和响应数据
5. 能取消请求
6. 自动转换JSON数据
7. 浏览器支持防止CSRF(跨站请求伪造)
axios的拦截器就是:请求前做一些操作,和响应的时候做操作。例如下面这样:
// 添加请求拦截器 —— 处理请求配置对象axios.interceptors.request.use(function (config) { config.headers.token = ''; return config;});// 添加响应拦截器 —— 处理响应对象axios.interceptors.response.use(function (data) { data.data = data.data + ''; return data;});axios({ url: '/hello', method: 'get',}).then(res =>{ console.log('data: ', res.data)});
其实axios参考的地方有很多,这几天我看完之后会给大家做个大致过程解读和总结。
------------------------------------------------------------------------------------------------------
script 标签的defer 和 async
defer
这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在script元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。
HTML5规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本会先于DOMContentLoaded事件执行。在现实当中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoad时间触发前执行,因此最好只包含一个延迟脚本。
对于不支持的浏览器,如safari,并不会延迟执行,还是会阻塞浏览器渲染。
async
这个属性与defer类似,都用于改变处理脚本的行为。同样与defer类似,async只适用于外部脚本文件,并告诉浏览器立即下载文件。但与defer不同的是,标记为async的脚本并不保证按照它们的先后顺序执行。
第二个脚本文件可能会在第一个脚本文件之前执行。因此确保两者之间互不依赖非常重要。指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。
总结
async 和 defer 虽然都是异步的,也还是有一些差异,使用 async 的脚本文件一旦加载完成,会立即执行,而使用了 defer 的,需要在 DOMContentLoaded 事件之前执行。
promise 浏览器实现的源码_【更新中】浏览器相关的汇总相关推荐
- promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
[简答题]一.谈谈你是如何理解JS异步编程的,EventLoop.消息队列都是做什么的,什么是宏任务.什么是微任务? 如何理解JS异步编程 众所周知JavaScript语言执行环境是"单线程 ...
- 编写代码、打印图4-2所示的图形python_Python之turtle库画各种有趣的图及源码(更新中)_一个超会写Bug的程序猿的博客-CSDN博客...
原文作者:一个超会写Bug的安太狼 原文标题:Python之turtle库画各种有趣的图及源码(更新中) 发布时间:2021-02-09 03:35:11 Turtle库是Python语言中一个很流行 ...
- Python之turtle库画各种有趣的图及源码(更新中)
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...
- python二手交易平台代码_PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)...
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- 2023新版 多功能去水印工具微信小程序源码_带流量主功能(已更新)
简介: 2023新版 多功能去水印工具微信小程序源码_带流量主功能 自带去水印接口的多功能小程序 支持各大平台短视频去水印 支持保存封面,图集,标题等等 支持本地图片去水印 支持图片拼接 支持九宫格切 ...
- 【Chrome浏览器插件开发】浏览器插件运行机制03之实战使用Vue.js 3 + Vite 2开发出简易的浏览器插件(含源码)
文章目录 知识点: 一.使用 vite 创建项目 1.1 环境搭建 1.2 安装vite工具 1.3 创建vite项目 1.4 进入项目并安装依赖 1.5 修改端口 1.6 运行项目 二.创建项目资源 ...
- 赚多多V10自动抢单系统源码_派单连单管理新增设置订单佣金
收到用户反馈需要连单设置时需要单独设置佣金,于是针对派单连单管理这一块做了个调整,新增了设置佣金栏目. 功能说明:派单时有设置佣金会按照设置的佣金进行计算,设置佣金为单商品价格的百分比,比如设置价格为 ...
- 宝宝起名神器小程序源码_支持多种流量主模式
2022年马上到了,还不知道怎么给虎宝宝取名字么? 那么这款小程序源码就可以帮到你了,这款小程序支持输入姓氏自动起名. 不满意还可以点击换一换来找到满意的,支持起两个字或者三个字的名字. 另外也给该款 ...
- 新动态视频壁纸微信小程序源码_支持多种分类短视频-也有静态壁纸
这是一款主打动态视频壁纸的一款微信小程序源码,当然啦,里面也是有静态壁纸的. 其实这款小程序也可以说是短视频小程序都可以,该款小程序全采集,另外支持多种流量主!! 下载链接: 新动态视频壁纸微信小程序 ...
最新文章
- “它将改变一切”,DeepMind AI解决生物学50年来重大挑战,破解蛋白质分子折叠问题...
- 让div margin属性消失_margin 和 padding
- 计算机应用基础形成性考核册答案,2019年最新(电大秋)计算机应用基础形成性考核册题目及答案.doc...
- dedecms上传图片不自动改名,以利于seo图片优化
- javascript event详解
- [SAP FI] Bank Master Vendor Master Creation Related Knowledge
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...
- 普林斯顿大学计算机科学研究生条件,普林斯顿大学之计算机科学系
- 解决fullgc_CMS发生FullGc分析
- 1.从Paxos到Zookeeper分布式一致性原理与实践---分布式架构
- 2018网易内推测试工程师面试记录
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
- 「 C++ 通讯 」“Socket通信原理(TCP/IP)”研究
- QQ开放平台调用示例--QQ登录,分享(JS环境)
- Intellij IDEA集成sencha插件开发Extjs应用
- 5G+工业互联网发展探讨
- 如何在Vue3中使用router
- 某鱼的兼职并不是那么好做,要钱也不是漫天要价
- JavaScript DOM操作案例点击按钮修改ul背景颜色
- 网络协议分析(第二版)期末复习资料一
热门文章
- matlab图像去噪最好方法,基于MATLAB软件的图像去噪方法比较_王姣斐
- 计算机图形及分类的相关知识,“计算机图形学”课程教与学
- Nexus 6P 刷入Android 9.0
- draft-editor实现粘贴上传图片
- amos里CFA可行性辨别结果怎么看_论文用问卷调查法,数据分析怎么做?
- 江苏区块链产业发展试点公示 点燃苏州数字经济新引擎
- 海尔微型计算机机箱如何拆解,自己动手维修海尔小神童洗衣机,上盖如何拆卸?-海尔洗衣机 拆上盖 888...
- iphone怎么使用排水功能?这项功能在哪
- 时统ptp_无压缩4K超高清EFP系统中PTP精确时钟同步技术解析
- 福昕阅读器PDF合并方法