对前端开发知识的一些梳理,主要参考前端开发面试题及对它的补充,持续完善…
HTML
- 理解web标准
浏览器内核
主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。JS引擎则:解析和执行javascript来实现网页的动态效果。
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
Doctype
<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 标签之前。
这个标签是一种通用标记语言的文档类型声明,它主要就是告诉标准通用标记语言解析器应该使用什么样的文档类型定义 Document Type Definition(DTD)来解析文档。DTD定义了文档中的元素(标记和属性)和实体,以及相互关系。数据和结构分离。 通俗的来说,DTD就是一套关于标记符的语法规则,是html的验证机制。
DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!DOCTYPE html>
在HTML4.01中,<!DOCTYPE>声明引用DTD,因为HTML4.01基于标准通用标记语言(SGML)。DTD规定了标记语言的规则,这样浏览器才能正确地呈现内容。
然而现在的HTML5不基于SGML,所以不需要引用DTD,因此没有声明DTD。
总的来说,Doctype的作用就是声明文档的解析类型(document.compatMode),也就是告知浏览器的解析器用什么文档标准解析这个文档。如果DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。- 页面的渲染模式
页面的渲染模式document.compatMode有两种可能的返回值:BackCompat和CSS1CompatBackCompat:怪异模式(兼容模式),浏览器使用自己的怪异模式解析渲染页面。
CSS1Compat:标准模式,浏览器使用W3C的标准解析渲染页面。
所谓的怪异模式就是没有页面的DOCTYPE声明,标准模式具有DOCTYPE声明。
标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行。
在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。 - 元素
行内元素:a b span img input select strong
块级元素:div ul ol li dl dt dd h1~h6 p
空元素: “br hr img input link meta area base col command embed keygen param source track wbr “ - link和@import
- 导入的语法不相同
link (链接式)语法为:<link rel="stylesheet" href="style.css" type="text/css"/> @import (导入式)语法为: <style type="text/css"> @import url("style.css"); </style> - link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
- 加载顺序的差别。当一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再被加载。所以有时候浏览@import加载CSS的页面时开始会没有样式(就是闪烁),网速慢的时候还挺明显
- 兼容性的差别。由于@import是CSS2.1提出的所以老的浏览器不支持,@import只有在IE5以上的才能识别,而link标签无此问题。
- 使用dom控制样式时的差别。当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的。
- @import可以在css中再次引入其他样式表,比如可以创建一个主样式表,在主样式表中再引入其他的样式表
- 导入的语法不相同
- HTML语义化
用正确的标签做正确的事情。
代码更简洁,复用性更高。使用合适的标签,可以少些很多css或者js
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
更多 - 页面可见性
- label
label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上 - form关闭自动完成
给不想要提示的 form 或某个 input 设置为 autocomplete=off 圆形可点击区域
area+map
1
2
3
4
5
6
7<img src ="planets.gif" alt="Planets" usemap ="#planetmap" />
<map id ="planetmap">
<area shape ="rect" coords ="0,0,82,126" href ="sun.htm" alt="Sun" />
<area shape ="circle" coords ="90,58,3" href ="mercur.htm" alt="Mercury" />
<area shape ="circle" coords ="124,58,8" href ="venus.htm" alt="Venus" />
</map>svg
- border-radius
- js
- 不使用 border 画出1px高的线
<div style="height:1px;overflow:hidden;background:red"></div> table&h1 b&strong i&em
title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:会重读,而是展示强调内容。
i内容展示为斜体,em表示强调的文本;
Physical Style Elements – 自然样式标签
b, i, u, s, pre
Semantic Style Elements – 语义样式标签
strong, em, ins, del, code
应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。ie各版本和chrome可以并行下载资源数
IE6 两个并发,iE7升级之后的6个并发,之后版本也是6个
Firefox,chrome也是6个
HTML5新特性
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加
绘画 canvas;
用于媒介回放的 video 和 audio 元素;
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除;语意化更好的内容元素,比如 article、footer、header、nav、section;
表单控件,calendar、date、time、email、url、search;
新的技术webworker, websocket, Geolocation;移除的元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
可以使用 html5shim 兼容IE6/7/8
- 离线存储
- webSocket如何兼容低浏览器
Adobe Flash Socket、AJAX长轮询、AJAX multipart streaming、持久Iframe、JSONP轮询等 cookies,sessionStorage、localStorage
cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。极高的扩展性和可用性
cookie的弊端:
每个特定的域名下最多生成20个cookie(不同浏览器不同)<=IE6(20)、>=IE7(50)、Firefox(50)、chrome && Safari(无硬性限制)IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。
cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。IE 提供了一种存储可以持久化用户数据,叫做userdata,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
存储大小:
cookie数据大小不能超过4k。 sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。有期时间:
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
sessionStorage 数据在当前浏览器窗口关闭后自动删除。在同源的同窗口(或tab)中,始终存在的数据。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后,sessionStorage即被销毁。同时“独立”打开的不同窗口,即使是同一页面,sessionStorage对象也是不同的cookies会发送到服务器端
cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie
总的来说,应该根据具体需求选择,cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生
- Web Workers
MDN 深入理解web Workers
通过Web Workers可以创建一个不会影响前台处理的后台线程,并且在这个后台线程中创建多个子线程。在后台线程中不能访问页面或窗口对象的1
2
3
4
5
6
71.通过 worker = new Worker( url ) 加载一个JS文件来创建一个worker,同时返回一个worker实例。
2.通过worker.postMessage( data ) 方法来向worker发送数据。
3.绑定worker.onmessage方法来接收worker发送过来的数据。
4.可以使用 worker.terminate() 来终止一个worker的执行。
- HTTP和HTTPS
在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。