Top Banner
Welefen 2011-09-25
48

前端编译平台

Jul 27, 2015

Download

Technology

Welefen Lee
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 前端编译平台

Welefen

2011-09-25

Page 2: 前端编译平台

• Welefen / 李成银

百度空间 百度新首页

• @welefen in twitter,微博,github

[email protected]

• http://www.welefen.com

Page 3: 前端编译平台

热爱标准化建设和 前端自动化工具的开发

Page 4: 前端编译平台

随着web应用越来越复杂

Web Page => Web App

Page 5: 前端编译平台

2004

2011

前端开发越来越复杂

Page 6: 前端编译平台
Page 7: 前端编译平台

同时前端人员也越来越多

Page 8: 前端编译平台

• 编码规范问题越来越严重

• 很多陷阱新人可能并不知道

• 很多优化并不是上线前都做了

• 多人同时开发冲突的问题

• 人多了,开发效率反而低了

Page 9: 前端编译平台

尝试过使用guideline和codereivew解决编码规范的问题。但由于时间和人力有限始终没能很好的开展,最终每个人有自己的风格。

Page 10: 前端编译平台

也在积极寻找第三方工具

• yui compressor

• css sprites generator

• smush it

• jslint

• …

Page 11: 前端编译平台

额。。。好吧,先这样吧。以后有时间在改。

这次图片优化没做啊,下次记得要优化。

杯具,静态文件缓存又忘记清。。。

Page 12: 前端编译平台

这谁写代码,太2了

我这次

都没法改了。。。

Page 13: 前端编译平台

<img src=“” />

<a href=“javascript:void(0)”></a>

Page 14: 前端编译平台

A方案行,B方案也支持中纠结

A OR B ? 那都支持吧

- 我们一直在妥协,时间长了,什么都乱了

Page 15: 前端编译平台
Page 16: 前端编译平台

开发中不应该妥协,要么0,要么是1。

- 上线前强制检测,有错误无法上线

让犯错变得困难

- 集成第三方和自主开发工具

能自动化的绝不人工

Page 17: 前端编译平台

前端编译平台

Page 18: 前端编译平台

即统一的执行脚本(如:build.sh),上线前对代码检测和自动化,发现有error的时候编译不让通过,无法上线。

- 开发的时候也可以手工执行这个脚本去检测

Page 19: 前端编译平台
Page 20: 前端编译平台

• 模块目录结构检查

• 文件命名检查

• HTML、JS、CSS编码规范检查

• JS、CSS文件合并

• CSS3样式自动补全

• JS、CSS等静态文件清除缓存

• HTML、JS、CSS压缩

• CSS Sprites

Page 21: 前端编译平台

• CSS背景图片转DataURI

• 图片优化

• XSS漏洞检查和自动修复

• JS、CSS代码Beautify

• 线下地址替换成线上地址

• 线下域名检测

• 多域名

• Smarty3性能优化

Page 22: 前端编译平台
Page 23: 前端编译平台

• 图片目录统一为img,不在为到底使用img, imgs, image, images哪一个而纠结

• js目录统一为js, 禁止使用javascript, scripts等名称

• 检测的时候发现多余的目录,直接编译不通过

Page 24: 前端编译平台

• HTML里含有模版语法(如:Smarty)

• 不能单靠正则去检测

• 词法分析也要考虑各种模版语法的情况

Page 25: 前端编译平台

支持模版语法的HTML分析、

检测、压缩工具

https://github.com/welefen/Fl

Page 26: 前端编译平台

词法分析

Page 27: 前端编译平台

检测

Page 28: 前端编译平台

• Web Server动态压缩有性能问题,虽然是ms级别

• 不够安全,用户输入的内容,无法完全覆盖测试

WEB SERVER压缩

Page 29: 前端编译平台

• 编译的时候去压缩

• 只将安全的内容压缩

- 非pre,textarea内的空行,多个空格

- 非IE条件注释

- 可去除的结束标签

- 可删除的标签数据默认值

- 无特殊字符属性值的左右引号

- 可删除属性值的属性

- 。。。

Page 30: 前端编译平台

百度新首页:http://www.baidu.com/home

Page 31: 前端编译平台

• 单一的文件多人开发时容易出现冲突

• js使用document.write

• css使用@import url

• 开发的时候使用小文件模式

• 编译的时候自动合并,去重

- 开发时容易定位问题,且不容易冲突

Page 32: 前端编译平台

将document.write封装成importScript函数

Page 33: 前端编译平台

我们终于说服PM,UE在某些地方使用CSS3

样式来渐进增强

Page 34: 前端编译平台

虽然有辅助性的工具,但修改起来还是麻烦

Page 35: 前端编译平台

编译

Page 36: 前端编译平台
Page 37: 前端编译平台

• 为了性能,设置了cache-control和

expires头

• 缓存时间内,正常访问不发生请求

• 代码改动后,需要通知客户端清缓存

Page 38: 前端编译平台

• 最原始的方法:手工改动版本号

- 经常发生忘记改的情况

base.js?v=1 base.js?v=2

Page 39: 前端编译平台

• 后端变量或者编译的时候加时间戳

- 能够自动清缓存

- 每次上线所有的缓存都清了,包括未改动的文件

base.js?v={=$var=} base.js?v=201109121215

Page 40: 前端编译平台

• md5方式

- 能够自动清缓存,且未改动的文件缓存不会清

- 有些代理可能不支持query

- 上线过程中可能引起服务不正常

base.js base.js?v=cfa05e53

文件md5值后8位

Page 41: 前端编译平台

• 更好的方式

base.js base_cfa05e53.js

文件md5值后8位

Page 42: 前端编译平台
Page 43: 前端编译平台

• 虽然能自动生成图片,并给出background-position

• 但要手工去改对应css文件

• 每次都要打包上传

• 有改动后要重新一次,还要注意缓存

- 其实也可以自动化,只要个简单的配置即可

Page 44: 前端编译平台

• 将要合并在一起的小图片放在同一个子文件夹下

• 配置

• 自动合并图,自动去修改css

Page 45: 前端编译平台

小图 合并图

修改的css

配置

Page 46: 前端编译平台

• XSS漏洞检查和自动修复

• 图片优化

• Smarty3性能优化

• CSS背景图片转DataURI

Page 47: 前端编译平台

• 让工程师减少犯错

• 尽量自动化,提高开发效率

• 既然不能反抗,那就好好享受吧

Page 48: 前端编译平台

Thank You