JavaScript代码的执行会阻塞页面的解析渲染以及其余资源的下载javascript
script标签的位置:html
传统全部script元素都放在head元素中,必须等到所有js代码都被下载、解析、执行完毕后,才能开始呈现网页的内容(浏览器在遇到标签时才开始呈现内容),这在须要不少js代码的页面来讲,会形成浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。所以。通常把script标签放在标签前面。java
defer&async:数组
共同点浏览器
不一样点缓存
不支持async的浏览器能够动态建立script,经过window.onload方法确保页面加载完毕再将script标签插入到DOM中。实现脚本的异步载入和执行。服务器
window.onload = function(){
var script = document.createElement('script');
script.setAttribute("type","text/javascript");
script.src = url;
document.body.appendChild(script);
}
复制代码
ES6的Object.keys()方法cookie
var data = {};
var arr = Object.keys(data);
console.log(arr.length == 0);// true
复制代码
Object.getOwnPropertyNames()方法网络
var data = {};
var arr = Object.getOwnPropertyNames(data);
console.log(arr.length == 0);// true
复制代码
JSON.stringify()app
var data = {};
var result = (JSON.stringify(data) == "{}");
console.log(result);// true
复制代码
for in遍历
var data = {};
var result = function() {
for(var key in data) {
return false;
}
return true;
}
alert(result);// true
复制代码
事件流:指从页面中接收事件的顺序,有冒泡流和捕获流。
DOM2级事件流:事件捕获阶段、处于目标阶段、事件冒泡阶段
假设定义的事件绑定在图中div上,实际的div元素在捕获阶段不会接收到事件,意味着在捕获阶段,事件从document到
DOM2级事件处理程序:
addEventListener(eventName,handlers,boolean)和removeEventListener(),两个方法都同样接收三个参数,要处理的事件名,第二个是事件处理程序函数,第三个值为布尔值。布尔值是true,表示在捕获阶段调用事件处理程序。false时表示在事件冒泡阶段调用事件处理程序,通常建议在冒泡阶段使用,特殊状况才在捕获阶段。
经过addEventListener()添加的事件处理程序只能用removeEventListener()来移除,而且须要参数彻底一致,好比参数都是同一个函数的引用。
事件对象:
事件被触发时,会默认给事件处理程序传入一个参数e , 表示事件对象。在事件处理程序内部,对象this始终等于currentTarget的值,target包含事件的实际目标。(e.currentTarget === this)
事件委托:
利用事件冒泡,只在外层父元素指定一个事件处理程序,就能够管理某一类型的全部事件。
优势:
例子:
<ul id="myLinks">
<li id="goSomewhere">Go somewhere</li>
<li id="doSomething">Do something</li>
<li id="sayHi">Say hi</li>
</ul>
复制代码
var item1 = document.getElementById("goSomewhere");
var item2 = document.getElementById("doSomething");
var item3 = document.getElementById("sayHi");
document.addEventListener("click", function (event) {
var target = event.target;
switch (target.id) {
case "doSomething":
document.title = "事件委托";
break;
case "goSomewhere":
location.href = "http://www.baidu.com";
break;
case "sayHi":
alert("hi");
break;
}
})
复制代码
注意事项:
使用“事件委托”时,并非说把事件委托给的元素越靠近顶层就越好。事件冒泡的过程也须要耗时,越靠近顶层,事件的”事件传播链”越长,也就越耗时。若是DOM嵌套结构很深,事件冒泡经过大量祖先元素会致使性能损失。
Dom文档加载步骤:
应用场景:
给元素绑定事件处理函数,将绑定的函数放在这两个事件的回调中,保证能在页面元素加载完毕以后再绑定事件的函数。
touchstart: 当手指触摸屏幕时候触发;
touchmove: 当手指在屏幕上滑动的时候连续触发;能够调用阻止默认事件event.preventDefault()阻止屏幕滚动;
touchend: 手指离开屏幕时触发;
touchcancel: 系统中止跟踪触摸时触发;
以上事件都会冒泡,并且均可以取消冒泡。
触摸事件属性:
Touch对象包含的属性:
name/content属性:
keywords告诉搜索引擎网页的关键字
description告诉搜索引擎网站的主要内容
robots告诉搜索机器人哪些页面须要索引,哪些页面不须要索引
对应的content有all,none,index,noindex,follow,nofollow。默认是all
author
renderer告诉浏览器渲染模式
viewport视图模式
http-equiv/content属性:
X-UA-Compatible浏览模式
expires设定网页到期时间,到期后必须到服务器上从新传输,必须使用GMT时间格式
<meta http-equiv="expires"content="Fri,01Jan201618:18:18GMT">
复制代码
Pragma(cache模式)
若是禁止浏览器从本地缓存访问则将content设为no-cache
Refresh自动刷新并在多少秒后且指向新的页面
<meta http-equiv="Refresh" content="2;URL=http://www.lbw.com">
复制代码
Set-cookie 网页若是过时,存盘的cookie也将被删除,GMT时间格式
<meta http-equiv="Set-Cookie"content="cookievalue=xxx;expires=Friday,12-Jan-200118:18:18GMT;path=/">
复制代码
Window-target 当content为_blank,强制当前窗口以独立页面显示
content-Type 显示字符集
content-Language 显示语言
Cache-Control 指定请求和响应遵循的缓存机制
七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP:面向链接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,创建链接须要开销较多(时间,系统资源)
UDP:面向非链接、传输不可靠、用于传输少许数据(数据包模式)、速度快
TCP通常用于文件传输(FTP HTTP 对数据准确性要求高,速度能够相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登陆(TELNET SSH 对数据准确性有必定要求,有链接的概念)等等;UDP通常用于即时通讯(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP 速度必定要快,保证视频连续,可是偶尔花了一个图像帧,人们仍是能接受的),网络语音电话(VoIP 语音数据包通常比较小,须要高速发送,偶尔断音或串音也没有问题)等等。
HTTPS即加密的HTTP,HTTPS并非一个新协议,而是HTTP+SSL(TLS)。本来HTTP先和TCP(假定传输层是TCP协议)直接通讯,而加了SSL后,就变成HTTP先和SSL通讯,再由SSL和TCP通讯,至关于SSL被嵌在了HTTP和TCP之间
线程和进程:
线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,彻底由操做系统决定,程序本身不能决定何时执行,执行多长时间。 进程指计算机中已运行的程序。 线程指操做系统可以进行运算调度的最小单位。
死锁:当两个以上的运算单元,双方都在等待对方中止运行,以获取系统资源,可是没有一方提早退出时,就称为死锁。