时间线
javascript 单线程,解释型,弱类型
get和post的区别:
1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
2、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击
时间线的步骤
1.创建document对象,开始解析web页面、html元素以及文本内容,之后添加Element对象和Text节点到文档中。Document.readyState = “loading”。
2.(1)遇到外部css,创建线程加载,并继续解析文档。
(2)遇到script外部js,(没有设置async , defer )等待js加载完成并执行该脚本,然后继续解析文档
(3)遇到script外部js,(设置有async,defer)浏览器创建线程加载,并继续解析文档,对于async属性的脚本,脚本加载完成后立即执行(异步禁止使用docuemnt.write())。
(4)遇到img标签等,浏览器异步加载src,并继续解析文档
3.文档解析完成,document.readyState = “interactive”;
4.所有设置有defer的脚本会按照顺序执行。
5…document对象触发DOMContentLoaded事件
6.所有saync的脚本和img加载完成并执行后,document.readyState = “complete” window对象触发load事件
7.从此,页面以异步响应方式处理用户输入,网络事件等。
总的来分可以分为四个阶段:
1.解析中 构建dom树 document.readyState = loading
创建document对象,浏览器开始去解析你的html界面,document.readyState = “loading”
2.解析完成 dom树已经构建完成 document.readyState = interactive
当遇到外部资源(外部的js文件,外部的css文件,外部的图片,a标签,iframe标签)的时候,除了script标签中的src(当没有设置异步的属性async,defer)为同步,其余的全部为异步(主线程去调度子线程完成)。有且只有这一个script标签中的src为同步dom解析完成以后 document.readyState = “interactive” 同时触发DOMContentLoaded(jquery中ready方法的封装),这是唯一一个有大写字母的事件名称
3.下载中 下载外部的代码(外部css文件,外部的图片,iframe…)
除了script标签中的,其他的所有外部资源下载完成
4.下载完成 所有的资源全部完成以后,图片呀,文件呀,全部下载完成 document.readyState = complete || loaded
下载完成以后,document.readyState = "complete"window触发load事件
Javascript异步加载的三种方式:
1.defer IE才能使用
2.async html5中的新属性
3.按需加载:创建script标签,设置src属性,变成了异步的。插入到dom中
Ajax全称:
async JavaScript and xml
其中javascript是核心语言,xml为前后台传递数据的格式,JSON.parse()为将json字符串转换成json对象,JSON.stringify()为将json对象转换成json字符串