前端性能优化

前端性能优化,目的是为什么?让用户有更友好的体验,让服务商节省可观的资源。

对优化方向进行分类,直接来看表:

优化方向 优化手段
请求数量 CSS Sprites,合并脚本和样式表
请求带宽 使用Gzip压缩传输文件,精简JS文件
缓存利用 使用http缓存,使用CDN,ajax,减少DNS查找
页面结构 样式表放顶部,脚本放底部
代码校验 避免CSS表达式,避免重定向
减少Repaint和Reflow 设置class,脱离文档流,减少dom操作

BFC

首先明确BFC是什么

BFC(Block Formatting Context)就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。IE中是hasLayout

然后什么情况会触发BFC:

  1. float的值不为none

  2. overflow的值为auto,scroll或hidden

  3. display的值为table-cell, table-caption, inline-block中的任何一个

  4. position的值不为relative和static

Cookie

cookie的产生与使用

browser第一次请求server,server提供web页面,还附带一些键值对,也就是cookie。browser在本地存储cookie,之后每次请求和响应中都会来回发送cookie,仅限4k数据。

cookie与一个域相关联,而且只能发送给这个域。

cookie一般存储的是用户的登陆信息包括用户名、认证信息、登陆时间等,以便于下次免登陆,但一般不会将密码放在cookie中。

JS Prototype

JS原型是前端面试时总会问到的知识点,这里具体总结一下。

缘于问题:对JS原型有什么了解,用原型创建对象和普通new一个对象的区别,下面具体说明创建对象的几种方法。

创建对象

工厂模式

1
2
3
4
5
6
7
function person(name){
var o = new Object();
o.name = name;
return o;
}
var p = person("kad");

WebSocket

WebSocket是Html5新增的协议,目的就是为了在浏览器和服务器之间建立不受限的双向通信通道,使得服务器能够主动向客户端发送数据。

传统的HTTP协议不能实现WebSocket的功能吗?

HTTP是一个请求-响应协议,必须是浏览器向服务器发起请求,服务器才能响应这个请求,再把数据发送给客户端。也就是说浏览器不主动请求,服务器是没法主动发数据给浏览器的。

HTTP协议

从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,然后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请求头信息通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求后处理发回响应。浏览器从服务器接收到text/html类型的代码,浏览器开始显示此html。

HTTP是互联网上应用最广泛的一种网络协议,也是浏览器和服务器通信时所采用的协议。HTTP是基于TCP传输,无连接(每次连接只处理一个请求,响应后断开),无状态(服务器不会保存客户的任何信息)的应用层协议。

HTTP的报文格式

请求报文(从客户端发到服务器)

JS伪协议

总能看到网页上一些a标签的链接是javascript:;,点击之后页面并没有跳转。下面详细说明:

伪协议

伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://,伪协议是为关联应用程序而使用的,如:tencent://(关联QQ)mailto:kad108@foxmail.com(关联电脑中Email软件),还有就是javascript:;

javascript:这个特殊的协议类型声明了URL的主体是javascript代码,由javascript解释器执行。在浏览器打开javascript:URL的时候,它会先运行URL中的代码,当返回值不为undefined的时候,前页链接会替换为这段代码的返回值。可以在浏览器地址栏输入以下URL查看效果:

1
javascript:var now = new Date(); "<h1>The time is:</h1>" + now;

隐藏页面元素的几种方法

1. opacity

从视觉上隐藏元素,但元素依然占位,响应用户交互。

1
opacity: 0;

2. position

将元素移出可视区域,不影响页面布局,还可以与用户交互。应用:用Dom模拟复选框和单选框,使用这个方法来隐藏真正的checkbox和radio元素来接收焦点切换。

完善博客功能

域名绑定

使用Hexo搭建了静态博客,托管到了github上可通过kad0108.github.io访问。然而GitHub 屏蔽了百度爬虫,GitHub Pages 中的内容无法被百度索引。

然后自己也申请了域名,下面是github绑定域名时间——————

  1. source文件夹中新建CNAME文件(无后缀名),首行添加域名,我的是kadong.space,注意前面不加http://或www,然后使用hexo g && hexo d部署。

  2. 在域名解析提供商,我的域名是在万网购买。步骤:进入工作台-》域名-》解析-》域名解析-》解析设置-》添加解析。

|