a. 域名解析php
b. 发起TCP的3次握手css
c. 创建TCP链接后发起http请求html
d. 服务器端响应http请求,浏览器获得html代码前端
e. 浏览器解析html代码,并请求html代码中的资源html5
f. 浏览器对页面进行渲染呈现给用户git
a. 请求数量:合并脚本和样式表,CSS Sprites,拆分初始化负载,划分主域程序员
b. 请求带宽:开启GZip,精简JavaScript,移除重复脚本,图像优化,将icon作成字体github
c. 缓存利用:使用CDN,使用外部JavaScript和CSS,添加Expires头,减小DNS查找,配置ETag,使AjaX可缓存web
d. 页面结构:将样式表放在顶部,将脚本放在底部,尽早刷新文档的输出面试
e. 代码校验:避免CSS表达式,避免重定向
早期前端都是比较简单,基本以页面为工做单元,内容以浏览型为主,也偶尔有简单的表单操做,基本不太须要框架.
随着 AJAX 的出现,Web2.0的兴起,人们能够在页面上能够作比较复杂的事情了,而后前端框架才真正出现了。
若是是页面型产品,多数确实不太须要它,由于页面中的 JavaScript代码,处理交互的绝对远远超过处理模型的,可是若是是应用软件类产品,这就太须要了。
长期作某个行业软件的公司,通常都会沉淀下来一些业务组件,主要体如今数据模型、业务规则和业务流程,这些组件基本都存在于后端,在前端不多有相应的组织。
从协做关系上讲,不少前端开发团队每一个成员的职责不是很清晰,有了前端的 MV框架,这个情况会大有改观。
之因此感觉不到 MV*框架的重要性,是由于Model部分代码较少,View的相对多一些。若是主要在操做View和Controller,那固然 jQuery 这类库比较好用了。
IE6盒子模型与W3C盒子模型。
文档中的每一个元素被描绘为矩形盒子。盒子有四个边界:外边距边界margin, 边框边界border, 内边距边界padding与内容边界content。
CSS3中有个box-sizing属性能够控制盒子的计算方式,
content-box:padding和border不被包含在定义的width和height以内。对象的实际宽度等于设置的width值和border、padding之和。(W3C盒子模型)
border-box:padding和border被包含在定义的width和height以内。对象的实际宽度就等于设置的width值。(IE6盒子模型)
a. 每一个特定的域名下最多生成的cookie个数有限制
b. IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie
c. cookie的最大大约为4096字节,为了兼容性,通常不能超过4095字节
d. 安全性问题。若是cookie被人拦截了,那人就能够取得全部的session信息。
在HTML5中提供了sessionStorage和localStorage.
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁,是会话级别的存储。
localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。
a. Cookie的大小是受限的
b. 每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽
c. cookie还须要指定做用域,不能够跨域调用
d. Web Storage拥有setItem,getItem等方法,cookie须要前端开发者本身封装setCookie,getCookie
e. Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生
f. IE7、IE6中的UserData经过简单的代码封装能够统一到全部的浏览器都支持web storage
a. 一个程序至少有一个进程,一个进程至少有一个线程
b. 线程的划分尺度小于进程,使得多线程程序的并发性高
c. 进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率
d. 每一个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
e. 多线程的意义在于一个应用程序中,有多个执行部分能够同时执行。但操做系统并无将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配
a. 尽可能减小页面中重复的HTTP请求数量
b. 服务器开启gzip压缩
c. css样式的定义放置在文件头部
d. Javascript脚本放在文件末尾
e. 压缩合并Javascript、CSS代码
f. 使用多域名负载网页内的多个文件、图片
JSPerf, Dromaeo
a. IE的排版引擎是Trident (又称为MSHTML)
b. Trident内核曾经几乎与W3C标准脱节(2005年)
c. Trident内核的大量 Bug等安全性问题没有获得及时解决
d. JS方面,有不少独立的方法,例如绑定事件的attachEvent、建立事件的createEventObject等
e. CSS方面,也有本身独有的处理方式,例如设置透明,低版本IE中使用滤镜的方式
渐进加强 progressive enhancement:
针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:
一开始就构建完整的功能,而后再针对低版本浏览器进行兼容。
区别:
a. 优雅降级是从复杂的现状开始,并试图减小用户体验的供给
b. 渐进加强则是从一个很是基础的,可以起做用的版本开始,并不断扩充,以适应将来环境的须要
c. 降级(功能衰减)意味着往回看;而渐进加强则意味着朝前看,同时保证其根基处于安全地带
a. html5 websoket
b. WebSocket 经过 Flash
c. XHR长时间链接
d. XHR Multipart Streaming
e. 不可见的Iframe
f. <script>标签的长时间链接(可跨域)
a. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好
b. 参与项目,快速高质量完成实现效果图,精确到1px;
c. 与团队成员,UI设计,产品经理的沟通;
d. 作好的页面结构,页面重构和用户体验;
e. 处理hack,兼容、写出优美的代码格式;
f. 针对服务器的优化、拥抱最新前端技术。
a. 先期团队必须肯定好全局样式(globe.css),编码模式(utf-8) 等;
b. 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
c. 标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
d. 页面进行标注(例如 页面 模块 开始和结束);
e. CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);
f. JS 分文件夹存放 命名以该JS功能为准的英文翻译。
g. 图片采用整合的 images.png png8 格式文件使用 尽可能整合在一块儿使用方便未来的管理
CSDN、SegmentFault、php.net、MDN、css参考手册、iconfont、
underscore、github、Bootstrap、W3Shool、W3Cplus、caniuse
同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。
指一段脚本只能读取来自同一来源的窗口和文档的属性。
AMD 提早执行依赖 - 尽早执行,requireJS 是它的实现
CMD 按需执行依赖 - 懒执行,seaJS 是它的实现
重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。
a. 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)
b. 对于移动平台的优化,针对于SEO进行优化
c. 减小代码间的耦合,让代码保持弹性
d. 压缩或合并JS、CSS、image等前端资源
IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;
每一个资源均可以经过 Cache-Control HTTP 头来定义本身的缓存策略
Cache-Control 指令控制谁在什么条件下能够缓存响应以及能够缓存多久
Cache-Control 头在 HTTP/1.1 规范中定义,取代了以前用来定义响应缓存策略的头(例如 Expires)。
a. 结构层:由 HTML 或 XHTML 之类的标记语言负责建立,仅负责语义的表达。解决了页面“内容是什么”的问题。
b. 表示层:由CSS负责建立,解决了页面“如何显示内容”的问题。
c. 行为层:由脚本负责。解决了页面上“内容应该如何对事件做出反应”的问题。
png-8,png-24,jpeg,gif,svg
Webp:谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。
Apng:全称是“Animated Portable Network Graphics”, 是PNG的位图动画扩展,能够实现png格式的动态图片效果。04年诞生,但一直得不到各大浏览器厂商的支持,直到日前获得 iOS safari 8的支持,有望代替GIF成为下一代动态图标准。
a. 浏览器端存储
b. 浏览器端文件缓存
c. HTTP缓存304
d. 服务器端文件类型缓存
e. 表现层&DOM缓存
a. 图片懒加载,滚动到相应位置才加载图片。
b. 图片预加载,若是为幻灯片、相册等,将当前展现图片的前一张和后一张优先下载。
c. 使用CSSsprite,SVGsprite,Iconfont、Base64等技术,若是图片为css图片的话。
d. 若是图片过大,可使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提升用户体验。
a. 了解搜索引擎如何抓取网页和如何索引网页
b. meta标签优化
c. 关键词分析
d. 付费给搜索引擎
e. 连接交换和连接普遍度(Link Popularity)
f. 合理的标签使用
alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明的。且长度必须少于100个英文字符或者用户必须保证替换文字尽量的短。
这包括那些使用原本就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户等。
title属性为设置该属性的元素提供建议性的信息。使用title属性提供非本质的额外信息。
加粗:<b>、<strong>
下标:<sub>
居中:<center>
字体:<font>、<basefont>、参考《HTML标签列表》
section:定义文档中的一个章节
nav:定义只包含导航连接的章节
header:定义页面或章节的头部。它常常包含 logo、页面标题和导航性的目录。
footer:定义页面或章节的尾部。它常常包含版权信息、法律信息连接和反馈建议用的地址。
aside:定义和页面内容关联度较低的内容——若是被删除,剩下的内容仍然很合理。
a. 去掉或者丢失样式的时候可以让页面呈现出清晰的结构
b. 有利于SEO:和搜索引擎创建良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来肯定上下文和各个关键字的权重;
c. 方便其余设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
d. 便于团队开发和维护,语义化更具可读性,遵循W3C标准的团队都遵循这个标准,能够减小差别化。
<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签以前。告知浏览器以何种模式来渲染文档。
严格模式的排版和 JS 运做模式是,以该浏览器支持的最高标准运行。
在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点没法工做。
DOCTYPE不存在或格式不正确会致使文档以混杂模式呈现。
标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。
XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,
Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。
a. XHTML 元素必须被正确地嵌套。
b. XHTML 元素必须被关闭。
c. 标签名必须用小写字母。
d. XHTML 文档必须拥有根元素。
a. HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。
b. 拖拽释放(Drag and drop) API
c. 语义化更好的内容标签(header,nav,footer,aside,article,section)
d. 音频、视频API(audio,video)
e. 画布(Canvas) API
f. 地理(Geolocation) API
g. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失
h. sessionStorage 的数据在页面会话结束时会被清除
i. 表单控件,calendar、date、time、email、url、search
j. 新的技术webworker, websocket等
移除的元素:
a. 纯表现的元素:basefont,big,center, s,strike,tt,u;
b. 对可用性产生负面影响的元素:frame,frameset,noframes;
优势:
a. 解决加载缓慢的第三方内容如图标和广告等的加载问题
b. iframe无刷新文件上传
c. iframe跨域通讯
缺点:
a. iframe会阻塞主页面的Onload事件
b. 没法被一些搜索引擎索引到
c. 页面会增长服务器的http请求
d. 会产生不少页面,不容易管理。
在写程序时咱们也会常常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤为是新功能不兼容旧功能时。IE6之前的页面你们都不会去写DTD,因此IE6就假定 若是写了DTD,就意味着这个页面将采用对CSS支持更好的布局,而若是没有,则采用兼容以前的布局方式。这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。
区别:整体会有布局、样式解析和脚本执行三个方面的区别。
a. 盒模型:在W3C标准中,若是设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在Quirks 模式下,IE的宽度和高度还包含了padding和border。
b. 设置行内元素的高宽:在Standards模式下,给<span>等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。
c. 设置百分比的高度:在standards模式下,一个元素的高度是由其包含的内容来决定的,若是父元素没有设置百分比的高度,子元素设置一个百分比的高度是无效的用
d. 设置水平居中:使用margin:0 auto在standards模式下可使元素水平居中,但在quirks模式下却会失效。
a. 太深的嵌套,好比table>tr>td>h3,会致使搜索引擎读取困难,并且,最直接的损失就是大大增长了冗余代码量。
b. 灵活性差,好比要将tr设置border等属性,是不行的,得经过td
c. 代码臃肿,当在table中套用table的时候,阅读代码会显得异常混乱
d. 混乱的colspan与rowspan,用来布局时,频繁使用他们会形成整个文档顺序混乱。
e. table须要屡次计算才能肯定好其在渲染树中节点的属性,一般要花3倍于同等元素的时间。
f. 不够语义
src用于替换当前元素;href用于在当前文档和引用资源之间确立联系。
src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置
href是Hypertext Reference的缩写,指向网络资源所在位置,创建和当前元素(锚点)或当前文档(连接)之间的连接
1、新特性:
a.HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。
b. 拖拽释放(Drag and drop) API
c.语义化更好的内容标签(header,nav,footer,aside,article,section)
d.音频、视频API(audio,video)
e.画布(Canvas) API
f.地理(Geolocation) API
g.本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
h.sessionStorage 的数据在浏览器关闭后自动删除
i.表单控件,calendar、date、time、email、url、search
j.新的技术webworker, websocket, Geolocation
2、移除元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
3、h5新标签兼容:
IE8/IE7/IE6支持经过document.createElement方法产生的标签,
能够利用这一特性让这些浏览器支持HTML5新标签,
固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
如何区分:
DOCTYPE声明\新增的结构元素\功能元素
CSS 选择符:
1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul > li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = "external"])
9.伪类选择器(a: hover, li:nth-child)
能够继承的属性:
可继承的样式: font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height ;
优先级:
!important > id > class > tag
important 比 内联优先级高,但内联比 id 要高
CSS3新增伪类举例:
p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p> 元素。
p:last-of-type 选择属于其父元素的最后 <p> 元素的每一个 <p> 元素。
p:only-of-type 选择属于其父元素惟一的 <p> 元素的每一个 <p> 元素。
p:only-child 选择属于其父元素的惟一子元素的每一个 <p> 元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每一个 <p> 元素。
:enabled :disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。
1、CSS3实现圆角(border-radius),阴影(box-shadow),
2、对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
3、transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
4、增长了更多的CSS选择器 多背景 rgba
5、在CSS3中惟一引入的伪元素是::selection.
6、媒体查询,多栏布局
7、border-image
1. 盒模型:IE 678 下(不添加doctype) 使用ie盒模型,宽度 = 边框 + padding + 内容宽度; chrom、IE9+、(添加doctype) 使用标准盒模型, 宽度 = 内容宽度。
2. box-sizing : 为了解决标准黑子和IE盒子的不一样,CSS3增添了盒模型属性box-sizing,content-box(默认),border-box 让元素维持IE传统盒子模型, inherit 继承 父盒子模型;
3. 边界塌陷:块元素的 top 与 bottom 外边距有时会合并(塌陷)为单个外边距(合并后最大的外边距),这样的现象称之为 外边距塌陷。
4. 负值做用:负margin会改变浮动元素的显示位置,即便个人元素写在DOM的后面,我也能让它显示在最前面。
1. BFC 就是 ‘块级格式上下文’ 的格式,建立了BFC的元素就是一个独立的盒子,不过只有BLock-level box能够参与建立BFC,它规定了内部的Bloc-level Box 如何布局,而且与这个独立盒子里的布局不受外部影响,固然它也不会影响到外面的元素。
2. 应用场景:
1. 解决margin叠加的问题
2. 用于布局(overflow: hidden),BFC不会与浮动盒子叠加。
3. 用于清除浮动,计算BFC高度。
调用localstorge、cookies等本地存储方式
块级元素:div,p,h1,form,ul,li;
行内元素 : span,a,label,input,img,strong,em;
浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。
1.使用空标签清除浮动。
这种方法是在全部浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增长了无心义标签。
2.使用after伪对象清除浮动
该方法只适用于非IE浏览器。具体写法可参照如下示例。使用中需注意如下几点。1、该方法中必须为须要清除浮动元素的伪对象中设置 height:0,不然该元素会比实际高出若干像素;
#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}
3.设置overflow为hidden或者auto
4.浮动外部元素
Opacity:元素自己依然占据它本身的位置并对网页的布局起做用。它也将响应用户交互;
Visibility:与 opacity 惟一不一样的是它不会响应任何用户交互。此外,元素在读屏软件中也会被隐藏;
Display:display 设为 none 任何对该元素直接打用户交互操做都不可能生效。此外,读屏软件也不会读到元素的内容。这种方式产生的效果就像元素彻底不存在;
Position:不会影响布局,能让元素保持能够操做;
Clip-path:clip-path 属性尚未在 IE 或者 Edge 下被彻底支持。若是要在你的 clip-path 中使用外部的 SVG 文件,浏览器支持度还要低;
相同点:都会在浏览器端保存,有大小和同源限制。
不一样点:
1、cookie会随请求发送到服务器,做为会话表示,服务器可修改cookie。web storage不会随请求大宋到服务器。
2、cookie有path的概念,子路径能够访问父路径的cookie,父路径不能够访问子路径的cookie。
3、有效期: cookie在设置的有效期内有效,默认为浏览器关闭消失。sessionStorage在会话窗口关闭后失效,localStorage长期有效,需主动删除。
4、sessionStorage不能共享,localStorage在同源文档之间能够共享,cookie在同源且符合path规则的文档之间能够共享。
5、localStorage的修改会触发其余文档的update事件。
6、cookie有secure属性要求HTTPS传输。
7、浏览器不能保存超过300个cookie,单个服务器不能超过20个,每一个cookie不能超过4k。webStorage能够支持5M的存储。
直观的认识标签 对于搜索引擎的抓取有好处,用正确的标签作正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS状况下也以一种文档格式显示,而且是容易阅读的。搜索引擎的爬虫依赖于标记来肯定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel链接属性等做用;而@import是CSS提供的,只能用于加载CSS;
页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]
JSONP、CORS、经过修改document.domain来跨子域、使用window.name来进行跨域、HTML5中新引进的window.postMessage方法、在服务器上设置代理页面
1、JSONP
原理是:动态插入script标签,经过script标签引入一个js文件,这个js文件载入成功后会执行咱们在url参数中指定的函数,而且会把咱们须要的json数据做为参数传入。
因为同源策略的限制,XmlHttpRequest只容许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,能够经过script标签实现跨域请求,而后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。
优势是兼容性好,简单易用,支持浏览器与服务器双向通讯。缺点是只支持GET请求。
2、CORS
服务器端对于CORS的支持,主要就是经过设置Access-Control-Allow-Origin来进行的。若是浏览器检测到相应的设置,就能够容许Ajax进行跨域的访问。
3、经过修改document.domain来跨子域
将子域和主域的document.domain设为同一个主域.前提条件:这两个域名必须属于同一个基础域名!并且所用的协议,端口都要一致,不然没法利用document.domain进行跨域
主域相同的使用document.domain
4、使用window.name来进行跨域
window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的全部的页面都是共享一个window.name的,每一个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的全部页面中的
1、减小DOM操做
2、部署前,图片压缩,代码压缩
3、优化js代码结构,减小冗余代码
4、减小http请求,合理设置HTTP缓存
5、使用内容分发cdn加速
6、静态资源缓存
7、图片延迟加载
1、开发规范
2、模块化开发
3、组件化开发
4、开发仓库
5、性能优化
6、项目部署
7、开发流程
8、开发工具