<meta http-equiv="X-UA-Compatible" content="IE=7,9,10,11">
这条配置是让IE走7、9、10、11渲染
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
这条配置是让IE走最高级的Edge去渲染,如果有Chrome浏览器就用Chrome
<meta name="renderer" content="webkit">
这一条配置是让双核浏览器优先用webkit
渲染
<link rel="dns-prefetch" href="//pcsdata.baidu.com">
头部的这一条就是DNS与解析,可以提升网站性能
<meta name="keywords" content="酒店,机票,火车票,汽车票,旅行,旅游,攻略">
和<meta name="description" content="艺龙旅行网是中国领先的在线旅行服务提供商,纳斯达克上市公司(NASDAQ: LONG)。提供全球57万家酒店预订服务,2015年艺龙用户入住了4000万以上的间夜。低价有房保障,到店无房赔付。">
都是做SEO的
content
决定,不包括border和paddingcontent
+ padding
+ border
共同决定box-sizing
属性,当值为content-box
时为标准盒模型,当值为border-box
时为IE盒模型通过dom.style.width/height
只能获取内联样式(无法获取在header中style标签内定义的样式和通过link标签引用的样式
)
通过dom.currentStyle.width/height
可以获取及时在浏览器上渲染出来的宽高,没有了第一个方法的限制,但是弊端就是只有IE支持
window.getComputedStyle(dom).width/height
可以兼容Chrome和Firefox
dom.getBoundingClientRect().width/height
也是及时渲染完之后获取的宽高,是根据浏览器视窗左顶点去计算的
渲染规则
BFC元素垂直方向的边距发生重叠
BFC元素的区域不会和浮动元素的box重叠
BFC在页面上是独立的,与外面的元素互不影响
计算BFC的高度的时候,浮动元素也会参与计算
float 不为 none
position的值不是relative或static
display属性table、table-cell
overflow为auto、hidden
解决边距重叠
清除浮动
DOM0
dom.onclick = function(){}
DOM2
dom.addEventListener('click', function(){}, false/true)
dom.attachEvent('onclick', function(){})
DOM3
捕获:从上往下
冒泡:从下往上
捕获
window
document
目标阶段
冒泡
event.preventDefault
阻止默认事件event.stopPropagation
阻止冒泡event.target
事件代理常常使用new Event()
来生成一个事件CustomEvent:除了可以指定事件名,后面还可以跟一个对象,增加自定义参数
1 | obj.addEventListener("cat", function(e) { process(e.detail) }) |
请求报文
响应报文
kepp-alive
模式,每次连接之后都会断开kepp-alive
模式,,使客户端到服务器的链接持续有效,当对服务器出现后续请求的时候,避免了建联或重新建联在持久连接的情况下
常规消息传递请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
管线化会将请求打包一次请发出,并且服务端也将响应打包一次发出,类似请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
管线化机制通过持久连接完成,仅http/1.1支持此技术
只有GET和HEAD请求可以进行管线化,而POST则有所限制
初次建联的时候不应启动管线化,因为服务器可能不支持
管线化不会影响响应到达的顺序
创建对象有几种方法
var obj = { a: 'xxx' }
var obj = new Object({a: 'xxx'})
var M = function (){ this.a = 'xxx' }; var m3 = new M()
var obj = Object.create({a: 'xxx'})
ES5继承
call
、apply
构造函数实现继承: 通过将子元素的上下文绑定到父元素上,缺点无法继承父元素的原型链
1 | function Parent() { |
原型链实现继承: 可以继承父元素的原型链,缺点如果父元素同时实例化了两个对象,一个对象修改了父元素的属性,另一个也会被修改
1 | function Parent() { |
通过组合方式实现继承: 既不会被影响,又继承原型链,缺点:父类被实例化了两次
1 | function Parent() { |
组合继承优化1: 既不会被影响,又继承原型链且父元素只被实例化一次,缺点:无法区别实例化对象是被父类直接实例化还是被子类实例化,因为Child.constructor
被父类替换掉了
1 | function Parent() { |
组合继承优化2: 实现了父类和子类原型对象的隔离,且保留了子类本身
1 | function Parent() { |
同源策略及限制
以上三个是同源策略中的源,有一个不同就不是同源,这是安全保护机制,同时我们不能获取不同源的
前后端如何通信
如何创建Ajax
XMLHttpRequest
对象的工作流程XMLHttpRequest
ActiveXObject
跨域通信的几种方式
jsonp
hash
postmessage(H5标准)
window.postMessage('data','*')
*
号表示源,如果不写源,只写*
号表示所有源window.addEventListener('message', function (oEvent){console.log(oEvent.origin);console.log(oEvent.data)}, false)
websocket
1 | var wx = new WebSocket('ws://xxxxxx.org') // wss 是加密 |
cors
1 | fetch('http://xxxxx.com/xxxx', { |
origin
的请求头,服务端配置了这个请求头就可以访问了csrf
攻击原理(两个因素)
html entity
编码DOCTYPE及作用
<!DOCTYPE html>
浏览器渲染过程
DOM tree
CSSOM tree
DOM tree
和CSSOM tree
结合attach之后生成render tree
render tree
去绘制重排reflow
重绘repaint
document.createElement
生成一个script
标签,最后把这个标签加载到文档里)<meta http-equiv="x-dns-prefetch-control" content="on">
在高级浏览器内,a标签的url默认开启DNS预解析,但是https
开头的网站,默认是关闭的,这个语句就是要求浏览器打开对a标签的url进行默认的DNS预解析<link rel="dns-prefetch" href="xxx">
Script Error
,所以要在script里添加crossorigin
属性Access-Control-Allow-Origin: *
(new Image()).src="xxxxxx"