一、前端数据存储?
Cookie,sessionStorage,localStorage 的介绍?
1. Cookie:Cookie在HTTP请求发送Set-Cookie 的时候作为HTTP头响应`的一部分,通过name=value的形式存储。
2. sessionStorage:针对一个 session 的数据存储,当用户关闭浏览器窗口后,数据会被删除。
3.localStorage : 没有时间限制的数据存储,第二天、第二周或下一年之后,数据依然可用。
sessionStorage 、localStorage 和 cookie 之间的区别?
1、**存储容量大小**:cookie在浏览器和服务器间来回传递,cookie数据不能超过4k,每次http请求都会携带cookie, sessionStorage和localStorage可以达到5M。
2、 **存储时间大小**:而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
sessionStorage:仅在当前浏览器窗口关闭前有效,localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据,cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
3、**作用域不同**,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。
H5 应用程序缓存和浏览器缓存的区别?
H5引入了应用程序缓存,意味着WEB应用可进行缓存,可在没有因特网时进行访问
应用程序缓存的优势:
离线缓存:用户可在离线时使用它们
速度:加载速度更快
减少服务器负载:浏览器只从服务器下载更新的或者更改过的资源
实现借助manifest文件
二、浏览器的相关知识
浏览器兼容都有那些?
常见浏览器都有那些?
IE浏览器:Trident内核,也称为IE内核 -ms
Chrome浏览器:Webkit内核,现在是Blink内核 -webkit
Firefox浏览器:Gecko内核,俗称Firefox内核 -moz
Safari浏览器:Webkit内核
Opera浏览器:最初是自己的Presto内核,后来加入谷歌大军,从Webkit又到了Blink内核; -o
360浏览器:IE+Chrome双内核
猎豹浏览器:IE+Chrome双内核
百度浏览器:IE内核
QQ浏览器:Trident(兼容模式)+Webkit(高速模式)
css兼容:
1.不同浏览器的margin,padding不同?==解决方案:css里增加通配符*{margin:0;padding:0}
2.IE6双边距问题;在IE6中设置了float,同时又设置margin,就会出现边距问题?==解决方案:设置display:inline;
3.当标签的高度设置小于10px,在IE6、IE7中会超出自己设置的高度?==解决方案:设置line-height的值小于你的设置高度
4..图片默认有间距==解决方案:使用float为img布局
5.IE9以下浏览器不能使用opacity?==解决方案:opacity:0.5;filter:alfha(opacity=50);
6.两个块级元素,父元素设置了overflow:auto;子元素设置了position:relative;且高度大于父元素,在IE6、IE7会被隐藏而不是溢出;解决方案:父级元素设置position:relative
js兼容:
1.window.event当前事件对象
IE有FF没有 function(ev){var oEvent = ev|event}
2.获取事件源
IE用srcElement获取事件源,而FF用target获取事件源
3.添加和去除事件
IE:attachEvent/detachEvent
FF:addEventListener/removeEventListener
4.标签的自定义属性
IE:div.value或div[value]或div.getAttribute('value')
FF:div.getAttribute('value')
5.innerText与textContent
FF:支持textContent
IE:支持innerText
6.计算样式
IE是computedStyle
firefox是getComputedSyle();
7. 滚动事件
IE是MouseWheel
firefox是onmousewheel
8、阻止事件冒泡
ie:ev.cancelBubble = true;
jquery : ev.stopPropagation();
9、阻止默认事件
w3c的方法是e.preventDefault(),
IE则是使用e.returnValue = false;
渐进增强:优先考虑老版本浏览器的可用性,最后才考虑新版本的可用性。在时期3前缀CSS3和正常CSS3都可用的情况下,正常CSS3会覆盖前缀CSS3。
.transition { /*渐进增强写法*/
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
优雅降级:优先考虑新版本浏览器的可用性,最后才考虑老版本的可用性。在时期3前缀CSS3和正常CSS3都可用的情况下,前缀CSS3会覆盖正常的CSS3。
.transition { /*优雅降级写法*/
transition: all .5s;
-o-transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
}
什么是渐进增强(progressive enhancement)、优雅降级(graceful degradation)呢?
渐进增强(progressive enhancement):针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。(从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面添加无害于基础浏览器的额外样式和功能。当浏览器支持时,它们会自动地呈现出来并发挥作用。)
优雅降级(graceful degradation):一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。(Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。)
区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的、能够起作用的版本开始,并不断扩充,以适应未来环境的需要。