目录
3、commonJS 中的 require/exports 和 ES6 中 import/export 的区别是什么
答:
1) 单线程
2) 原因:因为node.js的主线程 是程序员写的这个线程 这个线程的代码是v8在运行 js代码,它提供的异步函数是底层c/c++在开启线程执行任务
答:
1) 因为node.js的主线程 是程序员写的这个线程 这个线程的代码是v8在运行 js代码,它提供的异步函数是底层c/c++在开启线程执行任务。
2) 我们写的代码是js代码,是单线程。但是有一些异步函数是nodejs底层在开线程运行。
commonJS 中的 require/exports:
commonJS 模块的重要特性是 加载时执行,及脚本代码在 require 的时候,就会全部执
行。一 旦出现某个模块被“循环加载”就只输出已经执行的部分,还没有执行的部分是不输
出的。require可以用在函数、事件里面,跟懒加载相似
ES6 中 import/export:
ES6 模块是动态引用,如果使用 import 从一个模块加载变量,那些变量不会缓存,而
是成 为 一个指向被加载模块的引用,import/export 最终都是编译为 require/exports 来执
行的。 import它只能写在顶部、开始部分。
一个网页的渲染资源是一个个动态加载的数据组合而成的,不是一次就把整个渲染的页面加载了
1.用户浏览器地址栏输入网址==>请求后端(请求一次服务器),后端传输一份html编码的文本文档(返回一个数据包),然后就断开连接了
2.浏览器开始运行html文件的编码
(这个时候图片、js、css、字体库资源等)
解析时遇到了img-src属性 会异步的 再次请求另外一个网址(与上一次的是无关的,相互独立的)==>后端传输一份image编码的文件(一个数据包--图片编码),然后断开连接,浏览器把图片的编码按照CSS结构进行渲染
解析时遇到了 link-href属性 会异步的 会再次请求另外一个网址==>后端传输一份对应编码的文件(css编码),然后断开连接
解析时 xxxx-url会异步的 开始再次网络请求服务器 ,服务器返回数据包(对应编码) 然后加载
解析时script-src会异步的 开始再次网络请求服务器 ,服务器返回数据包(js编码) 然后用js引擎去执行编码
解析时遇到了 网络请求的代码等等....
3.页面渲染
页面按照解析好的 DOM模型 和 CSS层叠样式表 结合为renderTree,然后绘制页面
(所有的资源加载完毕后,才会触发winodw.onload)
经典面试题:用户从输入url到页面渲染过程发生了什么?
1) AJAX是在不刷新页面的情况下去请求数据,然后把这个数据局部刷新的页面上(DOM)的技术
2) 原生代码的大致步骤:
1.创建ajax对象 (创建一个能做网络请求的对象) 兼容性写法,前面是现代浏览器的写法,后面是低版本的IE浏览器
let xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP")
2.配置连接信息 ==> 请求方式是GET还是POST,以及要请求公司的网址url(绝对网络路径、相对网络路径(常用)都可以)和 是否异步请求,默认是true
xhr.open("GET", `http://192.168.6.60:8080/ajax1?name=karen&count=20`, true)
3.配置其他选项:xhr 还有很多方法和属性可以配置,也有默认配置
4.发送网络请求send 括号里只能填字符串,字符串不会发给后端,只有上面是POST的时候,才发给后端
xhr.send()
5.监听网络请求状态 ==> xhr对象里有一个readyState属性,用来监听管道
1:与其它电脑连接,并且连上了,建立了连接
2:后端正在处理信息
3:重新连另外一个管道了
4:后端将数据发过来了,我可以收了
6.判断如果网络状态为4 也就是后端返回数据包了 如果数据包中状态码为200说明数据正确
xhr.onreadystatechange=function(){
if(xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText) }
}
7.处理数据 操作页面
浏览器为了用户的信息安全,网页中有一个网络请求技术:AJAX 在网络请求时,请求的网址和当前页面的网址,不是同一台服务器,就会被拒绝接受服务器发送的数据
如果用户访问我们的A服务器的网页,网页内部的AJAX 去请求B服务器的数据接口
就算是B服务器把json数据发送给了用户的浏览器,但是浏览器因为同源策略的原因 会阻止数据使用
这种现象就是跨域了,具体的跨域的两个服务器的标识是: 协议 ip port
同源策略:
为了网络安全,浏览器有一个同源策略
两个网址的 协议、ip、port三者一样就代表同源,后面的pathname、query可以不一样
协议 ip 端口 三者只要有一个不一样 就不允许用ajax跨域访问数据异源资源
在这两个条件下,才会跨域:非同源、AJAX
在实际生产或者项目的开发阶段 有时候真的需要跨域访问资源
可以在后端发送数据包时 在数据包的头部配置 这个数据包被跨域请求时的 跨域资源共享 白名单,也就是:
res.setHeader("Access-Contrl-Allow-Origin","具体的白名单域,可以配置*")
res.setHeader( 'Access-Control-Allow-Origin' , 'http://192.168.1.10/8081')
res.setHeader( 'Access-Control-Allow-Origin' , '*')
Origin也可以写其它的,比如method
前端提前设置一个函数假设函数名为fn1,然后把fn1这个字符串用script标签的src属性发送给后端
后端解析出参数querystring中的fn1字符串 把后端的json数据 拼接成 'fn1(json数据)' 这个字符串发送给前端
前端因为是用的script请求的资源因此:不会有跨域限制,并且会把得到的资源用v8去运行 然后就会执行fn1这个函数
提前设定好的函数fn1就可以接受到网络请的数据 这种利用了script去跨域请求的设计就是JSONP
1)原理与理解
在开发阶段 最常用的手段,比如Vue,React,等前端框架中,常常有一个自己的开发服务器
如果用户访问我们的A服务器的网页,
网页内部的AJAX 去请求A服务器的数据接口,是不会跨域的
然后A服务器去请求B服务器的数据,再把返回给A服务器的数据 返回的用户
A服务器就是一个代理服务器
2)代理的常见的配置: