历时144000000毫秒出山的前端优化篇,若你问我有什么感悟?
那我告诉你,看到毫秒啊,火箭啊,这些与优化相关的词,都有莫名的亲切感。
本文主要从工做效率、速度性能、稳定性、响应式、兼容性、搜索SEO、信息无障碍等方面进行讲解。
前端优化是一个让人技术提高的point,但愿你也能从这里学到一些东西。javascript
你是否常常处于这样的场景:从早上忙到晚上八九点,一会与产品经理沟通,一会在部门群聊一下新奇的东西,一会被设计美眉纠缠住拖不了身,有时还开不了部门的会议由于页面急着上线,而后继续加班~~~css
怎么提升咱们的工做效率?下面从四个方面讲解:html
凡是时间管理,都会联想到计划这个词。咱们先看看别人家的月计划表和周计划表,之因此周计划表为空,是但愿你能把它下载并打印出来,行动从计划开始:
月计划表:
周计划表:前端
固然计划不要作得过于琐碎,且不要占用本身太多时间。作好计划之余,在执行过程当中须要注意几点:html5
第同样工具,好比程序员杯子:java
利用工具备什么好处呢?css3
选择好一个前端编辑器是比较重要的。目前sublime、webstorm和vim是比较常见的,建议不使用Dreamweaver。
sublime目前仍是不错的选择,能够安装插件,好比BracketHighlighter 高亮显示、JsFormat、Emmet html/CSS快速编辑以及DocBlockr插件,快速输入jsDoc注释等,还能够自定义代码段snippets。
不管你使用哪一种编辑器,你须要的是熟悉这个编辑器并熟练它的快捷键。程序员
做为前端人员,首选的浏览器固然是chrome。推荐阅读Chrome开发者工具不彻底指南一系列文章,它从一些基础的功能开始到它的一些高级性能分析器(Timeline、Profiles),熟悉chrome对咱们的开发工做有很大的做用。web
切图工具:photoshop cc切图之智能切图、 cutterman
量色、测距工具:FastStone Capture、马克鳗 - 设计稿标注
图片压缩:tinypng、智图
生成雪碧图:spritebox、CSS Sprite Generator、cssgaga
调试工具:Fiddler 、weinre 、微信调试工具;chrome
凡是重复的,必须使用工具自动完成。
工具众多,咱们就有一种想法,能不能有一种工具能帮咱们自动生成雪碧图、 css压缩、图片压缩等等,而后就出现了前端工程化。前端工程化通常可分为五个步骤:
(1) 初始,生成基础目录结构和样式库。
(2) 开发,实时预览、预编译。
(3) 构建,预编译、合并、压缩。
(4) 发布,将构建后静态文件发布上线。
(5) 打包,资源路径转换,源码打包 。
这里推荐一个工具fis,解决前端开发中自动化工具、性能优化、模块化框架、开发规范、代码部署、开发流程等问题。还有凹凸实验室研发的athena,O2Team构建项目流程工具,能够生成相应目录和代码,同时对项目进行编译, 一次安装,处处运行。
我所理解的程序员兼并聪明以及“懒惰”精神,推崇懒惰式开发,即把问题理解清楚,确保将要写的代码能真正的解决问题,这将会避免以后写出大量无用的代码,正所谓“懒”出效率。
咱们的阅历和经验能够大大提升开发效率,思考代码的时间增长从而选出最优方案,所以写代码速度更快以及代码长度更短,对问题的透彻理解使调试代码的速度也更快。
根据阅历和经验,或借助其余人的,咱们进行整理从而造成本身或团队的规范,这可大大提升咱们的写码速度。
使用新技术如何提升咱们的工做效率。一向咱们都使用咱们熟悉的技术去开发一个技术处理方案,毕竟学习新技术的时间成本仍是存在的。可是仍是不能忽略一些新技术的存在,通常新技术包含了一些很棒的新特性,能够更加方便的实现不少复杂的操做,提升开发人员的效率,好比ES6。用你的慧眼去积累新技术,会派上用场的。
为何须要前端性能优化?性能优化能够从哪几个方面入手?
遇到一个页面,5秒还没加载完成,那个菊花转啊转,或者页面彻底白屏,那简直把人逼疯了。从用户体验的角度看,前端性能优化是很是有必要的。网页最长加载时间通常不能超过3秒。
首先咱们须要肯定网页的性能指标,可量化的目标以及可持续跟踪的优化数据是性能优化工做得以持续进行的保障,同时也是源动力!好比:
咱们通常经过三种方式来检验咱们的网页性能:
可喜可贺,W3C推出了一套性能API标准,目的是简化开发者对网站性能进行精确分析与控制的过程,最终实现性能的提升。好比经过Navigation Timing记录的关键时间点来统计页面完成所用的时间,部分使用方法:
1
2
3
4
5
6
|
var timing = window.performance.timing
timing.domLoading
//浏览器开始解析 HTML 文档第一批收到的字节
timing.domInteractive
// 浏览器完成解析而且全部 HTML 和 DOM 构建完毕
timing.domContentLoadedEventStart
//DOM 解析完成后,网页内资源加载开始的时间
timing.domContentLoadedEventEnd
// DOM 解析完成后,网页内资源加载完成的时间(如 JS 脚本加载执行完毕)
timing.domComplete
//网页上全部资源(图片等)下载完成,且准备就绪的时间
|
持续追踪性能数据,要选择合适的页面性能测量工具或API,一旦选定后,再也不更换,以保证历史数据的可参照性。咱们还要造成一种意识,达成性能联盟小组,对于重要的业务或者页面,必定要从性能的角度考虑问题,有理有据地拒绝有损于前端性能的业务需求或改动。
人人都知道雅虎军规,那我就来个截图吧!
如下,咱们从服务端、网络、客户端三个方面来一一突破速度性能的提高。
经过在现有的Internet中增长一层新的网络架构,将网站的内容发布到最接近用户的 cache服务器内,经过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需的内容。深圳用户访问遥远的美国服务器,固然不理想了。把静态内容分布到CDN能够减小用户响应时间20%或更多。
若是能够减小服务端的负担,在应用离线时可以使用资源或加载资源更快,岂不乐哉?
缓存利用可包括:添加 Expires 头,配置 ETag,使 Ajax 可缓存等。其实,恰当的缓存设置能够大大的减小 HTTP请求,也能够节省带宽 。
AppCache:
AppCache主要利用manifest 文本文件,告知浏览器被缓存的内容以及不缓存的内容。
manifest 文件可分为三个部分:
(1) CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存,等价于CACHE
(2) NETWORK - 在此标题下列出的文件须要与服务器的链接,且不会被缓存
(3) FALLBACK - 在此标题下列出的文件规定当页面没法访问时的回退页面
使用AppCache方案的步骤:
(1) 整理出须要缓存的静态文件列表,如juqery.js和gb.css。
(2) 配置服务器支持。
(3) 肯定内容更新机制和浏览器兼容方案。
可经过如下方式减小请求数:
减小请求数对于速度优化来讲最重要最有效的,特别是网络差的用户。一个完整的请求须要通过域名解析以及DNS寻址、与服务器创建链接、发送数据、等待服务器响应、接收数据的过程;每一个请求都须要携带数据,所以每一个请求都须要占用带宽;浏览器进行并发请求的请求数是有上限的。请求多了的状况,明显增长了网页的响应时间。一个页面由多个模块拼接而成,几个模块中请求了一样的资源时,就会致使资源的重复请求。
域名的要求是短小且独立。
短小能够减小头部开销,由于域名越短请求头起始行的 URI 就越短。之因此要求独立,由于独立域名不会共享主域的 Cookie,能够有效减少请求头大小,这个策略通常称之为 Cookie-Free Domain;另一个缘由是浏览器对相同域名的并发链接数限制,通常容许同域名并发 6~8 个链接,域名不是越多越好,每一个域名的第一个链接都要经历 DNS 查询(DNS Lookup),致使会耗费必定的时间,控制域名使用在2-4个之间。另外注意:同一静态资源在不一样页面被散列到不一样子域下,会致使没法利用 HTTP 缓存。
HTTP 2 相比 HTTP 1.1 的更新大部分集中于:
稳定性的第一要求是可用。最起码的要求是页面得出来,要否则无法用了。
其次讲究的是页面的可维护性,假如页面挂了,多久能够恢复过来,另外考虑页面挂的期间是否能够采起静态页面处理等方式。
页面的稳定性其实和前端安全挂钩,即便页面能够出来了,可是不能保证不会被黑掉,下文从前端安全的方面讲解。
XSS (Cross Site Script) ,跨站脚本攻击,往Web页面里插入恶意html代码。特色是攻击者的代码必须能获取用户浏览器端的执行权限,要杜绝此类攻击出现能够在入口和出口进行严格的过滤。
三种类型:
(1) 反射型XSS:一次性;将包含注入脚本的恶意连接发送给受害者。
(2) 持久型XSS:用户输入的数据“存储”在服务器端,好比一条包含XSS代码的留言。
(3) DOM XSS:使用一些eval等有输出的语句意味着多了一份被XSS的风险。
应对策略:
CSRF(Cross Site Request Forgery),跨站点伪造请求,经过伪造链接请求在用户不知情的状况下,让用户以本身的身份来完成攻击者须要达到的一些目的。
cookie劫持,经过获取页面的权限,在页面中写一个简单的到恶意站点的请求,并获取用户的cookie登陆某些站点。
对于crsf 和cookie 劫持的策略:
国内的众多网站都没有实现全站HTTPS。这是目前为止最重要的一步,全部的数据在发送以前就会被加密,攻击者没法查看或篡改数据包的内容。HTTPS能够理解为HTTP+SSL/TLS,经过数据加密、校验数据完整性和身份认证三种机制来保障安全。HTTPS的缺点是网站在加上TLS证书时,可能致使RTT往返时延增长,而且 HTTPS通讯过程的非对称和对称加解密计算会产生更多的服务器性能和时间上的消耗,可是这是能够优化的,这里就不细说了。
首先了解一下同源策略:
不建议使用JSONP,由于JSONP一般在脚本中写一个回调函数,而后把回调函数的名字写在请求的URL中,所以若是请求数据的服务器被黑了,那么黑客就能在返回的数据中植入恶意代码,从而窃取用户的隐私信息。
跨域资源共享CORS容许资源提供方在响应头中加入一个特殊的标记,使你能经过XHR来获取、解析并验证数据。这样就能避免恶意代码在你的应用中执行。在响应头中加入的标记以下:
1
|
Access-Control-Allow-Origin: allowed origins
|
若是对Access–Control-Allow-Origin设置为*实际上是比较危险的,若是没有携带会话认证意味着信息被公开在全网,建议设置具体的域名,并且跨域的时候记得带上session id;严格审查请求信息,好比请求参数,还有http头信息,由于 http头能够伪造。
CSP指定网站上全部脚本和图片等资源的源站点,也能阻止全部内联(inline)的脚本和样式。即便有人在页面评论或者留言中嵌入了脚本标签,这些脚本代码也不会被执行。可经过两种方式设置,若是 HTTP 头与 Meta 定义同时存在,则优先采用 HTTP 头中的定义:
经过HTML的Meta标签,好比只容许脚本从本源加载:
1
|
<meta
http-equiv="Content-Security-Policy" content="script-src 'self'">
|
其余策略:
缺点:
默认状况下,全部的内联JavaScript脚本都不会被执行,由于浏览器没法区分本身的内联脚本和黑客注入的脚本。
CSP还会默认阻止全部eval()风格的代码的执行,包括setInterval/setTimeout中的字符串和相似于new Function(‘return false’)之类的代码。
利用iframe进行跨源:HTML5为iframe提供了安全属性 sandbox,iframe的能力将会被限制。
Secure能确保cookie的内容只能经过SSL链接进行传输。Secure和HttpOnly属性告诉浏览器cookie的内容只能分别经过HTTP(S)协议进行访问,从而避免了被轻易窃取,好比禁止从JavaScript中的document.cookie访问,所以cookie在浏览器document中不可见了。若是单独使用的话,没法全面抵御跨站点脚本攻击,一般和其余技术组合使用。使用方法以下:
1
|
Set-Cookie:
<name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>][; path=<some_path>][; secure][; HttpOnly]
|
X-Content-Type-Options 告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。
HPKP(Public Key Pinning) Public Key Pinning 是一个response 头,用来检测一个证书的公钥是否发生了改变,防止中间人攻击。
HSTS (HTTP Strict-Transport-Security) 强制使用TSL做为数据通道。
html5有不少新的特性能力,然而能力越大,被攻破后的危险就越大。
HTML5 对xss的影响主要体如今:
<video>,<audio>,<canvas>
等;好比localstorage只能经过js设置和获取,致使的结果是不能像cookie同样设置httponly等属性,因此localstorage中不能存放敏感信息,最好可以在服务端进行加密,能够配合CORS来获取网站的localstorage的信息。
响应式布局简而言之,就是一个网站可以兼容多个终端,能够为不一样终端的用户提供更加温馨的界面和更好的用户体验。
好比凹凸实验室博客页面在PC端、iPad、手机端的排版:
PC端:
iPad:
手机端:
估计不少人对这句话都有体会:IE虐我千百遍,我待IE如初恋。固然,除了 IE 上有兼容性问题,其余浏览器好比 Android 上的低版本浏览器也有较多问题。
是否继续保持对低端浏览器的兼容性,咱们能够用数据跟产品经理或者老板说话,减小咱们的工做量,最好在项目以前就定下来支持最低支持的版本是什么,而后设计一个对应兼容方案。如下是百度统计的2015年的浏览器市场份额数据:
兼容性的原则:渐进加强与平稳退化。就是说,在低级浏览器可以保证其可用性和可访问性;渐进加强,在保证代码、页面在低级浏览器中的可用性及可访问性的基础上,逐步增长功能及用户体验。
若是出现兼容性问题了,怎么处理:
淘宝首页在兼容性上作了一个小创新:Html钩子
在html上加上操做系统、浏览器内核、浏览器类型、CSS3动画支持、IE各版本类,好处在于:
淘宝首页html钩子:
兼容性问题是老生常谈的问题了,团队之间共同努力造成一个bug兼容性积累文档,是最好不过的了。
网站须要有一个良好的导航,控制根目录和各子目录的关键,经过sitemap能够帮助网站主了解网站结构,也方便搜索引擎收录整个站点。
信息无障碍通常能够从如下几点入手:
具体可参考无障碍阅读
经过前端动画技术给页面进行优化,好比:
requireJs框架特性:
场景以下:
页面一:去一个网站买东西,未登陆状态下,进入首页;
页面二:而后新窗口打开任意页面,登陆并成功返回。
再次访问页面一,发现页面仍是未登陆状态,实际上用户已经登陆了,这种体验是不好的。咱们是否是有什么办法能够实现多标签状态同步呢?有的,利用Page Visibility:
能提升前端工做效率的那些事
基于Gulp的前端自动化
繁星网的前端性能优化之路
前端性能优化—-yahoo前端性能团队总结的35条黄金定律
前端性能数据之采集和分析
Web性能API——帮你分析Web前端性能
前端工程师如何系统地整理和累积兼容性相关的知识?
玩转HTML5移动页面(优化篇)
HTTP/2 与 WEB 性能优化(一)
HTTP/2 与 WEB 性能优化(二)
HTTP/2 与 WEB 性能优化(三)
HTTP/2 头部压缩技术介绍
从零开始学web安全(1)
关于Web安全,99%的网站都忽略了这些
网页前端常见的攻击方式和预防攻击的方法
Web客户端安全性最佳实践
HTML5 安全问题解析
10步大幅提高网站可访问性
Page Visibility(页面可见性)API介绍、微拓展