一:同步与异步的概念:
也可以简单的把他们理解为做一件事情的过程
当在同步机制:在做一件事情时侯,就死死的坐在那里等着结果出来,再做其他事情;
而异步机制,再做一件事情的同时,不会等待结果出来,会跳过此事件,进行下面的其他处理;
所以,在ajax的四个步骤中,sync很容易会在send()这里卡死,因为它要等待发送的请求返回,才可进行下一步操作;而async则不会被send()影响;
二:原生ajax(写法);
当type为get请求时;
var xhr=null;
if(window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.open("get",url,true),;
xhr.send(null);
xhr.onreadystatechange=function(){
if (xhr.readystate==4) {
if (xhr.state==200) {
var result=this.responseText;
console.log(result);
};
当type为post请求时;
var xhr=null;
if(window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.open("post",url, true);
//post与get的问题
//请求的参数
var parse = " ";
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(parse);
xhr.onreadystatechange=function(){
if (xhr.readystate==4) {
if (xhr.state==200) {
var result=this.responseText;
document.getElementById("result").innerText=result;
};
三:JQuery的ajax的相关API使用
引用外部文件:
<script type="text/javascript src="jquery.js"></script>
<script type="text/html">
window.οnlοad=function(){
var btn=document.getElementById("btn");
btn.οnclick=function(){
$.ajax({
url:"https://suggest.toabao.com/sug",
data:{q: textValue},
success:function(data){
console.log(data);
},
dataType:"jsonp",
jsonp:"callback",
jsoncallback:"nan"
});
}
}
</script>
四:底层原理分析:
关键词:js=>单线程 ; 事件队伍
async:顺序是从上往下执行的,当遇到function时,js做的唯一事情就是把function放到事件队伍中,
当线程内所有事件都执行完毕后,js空闲下来,会去事件队伍中
因为js是属于单线程的处理,事件执行的查看一下有没有方法达到可促发的事件;
sync:就是因为js是单线程的,它的顺序永远都是从上往下去执行的,因为是sync的工作机制,所以,遇到一个function方法时,
线程会停下下面的程序的解析,等待funcntion完成工作并返回值后,线程才会继续下面的活动;
五:缓存问题及处理方式
有三大问题:缓存穿透 缓存雪崩 缓存击穿
1/缓存的使用: 就是查找数据的过程;
当业务系统发出一个请求时候,会首先判断缓存中有没有这个数据,有则返回,没有则向数据库发出查询,然后返回数据;
2/什么是缓存的穿透?
就是业务系统访问数据压根就不存在;
在缓存中找不到,在数据库中也找不到;
3/缓存穿透的危害?
大大损失了数据库的性能;如果查询海量不存在的数据,这些数据请求在缓存中找不到,会全部查询会落在数据库身上,
致数据库压力暴增,严重会致数据库崩溃!
4/为什么会发生缓存穿透?
主要是代码的逻辑问题,由程序员背锅,后果:可导致别人对数据库的恶意攻击;
会穿透也是因为缓存中没有存储空数据的key,导致这些请求直接落在数据库身上!
总结:缓存的角色是为了帮数据库分担部分查询压力,起保护数据库的作用;
5/什么是缓存雪崩?
原本帮数据库抵挡大量查询的缓存,发生宕机,导致这些数据一窝蜂的涌向数据库,这时数据库受不了这突如起来的剧压,
就会崩溃!
宕机:停掉机器叫做down机,死机;
6/什么是缓存击穿?
就是热点数据集中失败;
7/为什么会有缓存击穿?
一般会给缓存设定一个失效时间,过了这个时间,该数据库会被缓存直接删掉,以保证数据的实时性!
六: 跨域请求及解决方法
跨域的目标:我们需要在自己的前端页面中,访问别人网址的数据;
跨域的本质:就是服务器返回一个方法的调用,这个方法是事先定义好的,而方法的参数就是我们想要数据;
利用script跨域能干什么?
1/ 访问外部的js文件
2/ 也可访问外部的php文件
3/ 动态创建script标签
4/ 前端界面决定方法名称
5/ 给window增加属性进行方法定义