设为首页 收藏本站
查看: 2471|回复: 0

[经验分享] fis2的安装及使用

[复制链接]

尚未签到

发表于 2017-2-25 11:00:09 | 显示全部楼层 |阅读模式
  最近在研究移动端项目的优化问题,在无意中了解了fis,感觉fis在静态资源的优化方面做得还是挺不错的……故有了下面的内容……O(∩_∩)O哈哈~
  fis2的文档地址:
  http://fex.baidu.com/fis-site/docs/beginning/getting-started.html#combine
  
  1.Fis
  FIS是专为解决前端开发中自动化工具、性能优化、模块化框架、开发规范、代码部署、开发流程等问题的工具框架。
  工具框架:fis提供了非常简洁优雅的api,通过扩展可以打造出企业级的解决方案,fis官方提供的解决方案:Fis-plus,jello,yogurt等;
  官网:http://fex.baidu.com/
  解决方案官网:http://oak.baidu.com/
  FIS优势:
  Fis是一系列提升产品质量与开发效率的工程化方案;
  让前端团队可以快速进入角色,不用担心底层框架、性能优化等问题;
  可以减少人工管理静态资源的成本和风险,全自动化优化页面性能;
  简化开发、提测、部署流程,来达到更快、更可靠、低成本的自动化项目交付;
  三条命令,解决前端开发需求;
  2.工具安装:
  Fis使用node.js开发,发布在npm上的模块,因此使用fis需要先安装node.js,再通过npm安装命令进行fis的安装;
  Npm  install  -g  fis
  查看是否安装成功:fis –v
DSC0000.png

  遇到的问题
  FIS作为nodejs模块发布托管在npm上,npm是nodejs的包管理工具;用户需要使用npm install命令来安装FIS。更多npm使用,执行 npm -h 来查看; 由于npm经常被墙,安装FIS的时候会出现速度过慢,或者安装不上的问题 。可以通过 npm的--registry参数指定仓库。指定国内的npm镜像来解决npm被墙的问题。
  例如:

npm install some-npm-module -g --registry=国内镜像 --disturl=https://npm.taobao.org/dist
npm install some-npm-module -g --registry=http://registry.npm.taobao.org/ --disturl=https://npm.taobao.org/dist

  • 下面提供一个国内镜像。其他镜像大家可以自己找找
  • --registry=http://registry.npm.taobao.org/
  即你可以通过下面的命令使用cnpmjs仓库安装FIS

npm install fis -g --registry=http://registry.npm.taobao.org/ --disturl=https://npm.taobao.org/dist
  3.针对举一个简单的例子:使fis运行起来
  相关文件如下:
DSC0001.png

  Map.json:静态资源产出的静态资源表
  Fis发布:fis release
  启动服务器:Fis server start –p 端口号(修改端口号的时候的命令)
  Fis在构建过程中基本的功能
  4.静态资源的压缩与合并
  通过fis官网上的demo:
  安装demo:
  首先安装fis的包管理工具lights:
  Npn  install  –g  lights
DSC0002.png

  Lights install fis-quickstart-demo
DSC0003.png

  我安装到了E:\fis3\fis2\project\fis-quickstart-demo目录下;也可以直接从github上下载
  预览页面效果:
DSC0004.png

DSC0005.png

  如何对页面中的静态资源进行压缩:
DSC0006.png

  查看页面中的css和js文件被压缩,(也可以通过配置对某些资源不进行压缩)
  静态资源的合并:
  FIS可以通过pack来进行资源文件的合并,比如我们需要将DEMO中的公共库文件打包在一起,可以修改 fis-conf.js 配置,加入pack配置
  合并成lib.js,支持通配符和正则表达式的形式
DSC0007.png

  静态资源的合并通过-p参数使用;
  发布到另外一个文件夹,-d参数配置:
  Fis release –pd ./output
  Lib.js就是合并产出的js
DSC0008.png

  Css的合并:(修改配置文件,重新构建)
DSC0009.png

  静态资源合并的第二步,如何在渲染页面的时候把散列的资源直接请求成合并之后的资源
  设置完pack后,FIS默认只会进行文件打包,不会对页面中的静态资源引用进行替换,我们可以通过引入后端静态资源管理来加载打包模块。不过也可以利用fis-postpackager-simple插件,可以自动将页面中独立的资源引用替换为打包资源。
  安装插件:
  npm install -g fis-postpackager-simple
  启用插件:
DSC00010.png

DSC00011.png

  命令:压缩: fis  release  -o
  合并:fis  release -op
DSC00012.png

  5.fis为所有静态资源添加MD5版本号
  Fis在构建过程中会对所有的静态资源自动添加MD5版本号,同时会自动更新资源应用的路径,从而解决缓存更新的问题,以一种最优的方案使缓存的利用率达到最高;
  通过开启—md5参数,为项目中的静态资源添加md5版本号:
  fis release --optimize --md5
  命令:fis release –m
  同时css中的background也添加了md5版本号:
DSC00013.png

DSC00014.png

  MD5静态资源版本:
  MD5-------基于文件内容的hash版本冗余机制
  用户代码不需要做任何改变,编译后会自动替换成带有版本号的文件
  以MD5戳为静态资源的好处:
  1.线上的静态资源不是同名文件覆盖,而是文件名加hash的冗余,所以可以先上线静态资源,再上线html页面,不存在间隙间隔(老版本的静态文件依然留在服务器上,新版本的静态资源文件重新上线);
  
  2.遇到问题回滚版本的时候,无需回滚静态资源,只需回滚页面即可
  
  3.由于静态资源版本号是文件内容的hash,因此所有静态资源可以开启永久强缓存,只有更新了内容的静态资源文件才会缓存失效,缓存利用率大增
  4.修改静态资源后会在线上产生新的文件,一个文件对应一个版本,因此不会受到构造cdn缓存形式的攻击;
  
  时间戳的配置:
  https://github.com/fex-team/fis/issues/73
  
  6.fis图片css sprite和base64码嵌入
  Css sprite
  通过fis的-p参数控制(如果不想之前的命令影响现在的内容,可以重启服务----fis  server  start)
  开启图片合并功能:
  在css中添加?__sprite标示(在FIS中,如果样式文件中引用图片时,添加了 ?__sprite,那么将样式文件使用 pack 设置进行合并后,不仅仅会合并样式文件,还会将所有标识了合并的图片进行合并处理。)
  使用文档:
  https://github.com/fex-team/fis-spriter-csssprites
DSC00015.png

DSC00016.png

  图片内嵌(base64编码):优化方式
  Fis在构建过程中可以直接将图片编译成对应的64位base编码,嵌入到页面,这样子可以在页面请求的过程中节约一次请求,减少一次与服务器的交互,从而提高性能;
  在图片的后面加inline后缀:
DSC00017.png

  7.在fis中使用less(进阶使用----更多插件---语言扩展类插件)
  Less是一个css的编译器,意思指的是它可以扩展css语言,添加功能如允许变量,混合,函数和许多其他技术,让你的css更具维护性,主题性、扩展性;(less可运行在node环境,浏览器环境和Rhino环境)
  新建less文件,引入页面中:
DSC00018.png

  Fis在构建过程中,调用less插件将less文件编译成源生的css代码
  Box.less被编译成了源生的css代码:
DSC00019.png

  在页面引用的时候若是将less文件引用为css文件:修改配置
DSC00020.png

  Roadmap配置编译前以及编译后所有路径的对应情况,设置less结尾的文件修改为css结尾的文件;
DSC00021.png

语言类插件:

DSC00022.png

地址:https://www.npmjs.com/search?q=fis+parser

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346975-1-1.html 上篇帖子: 在.NET Core 里使用 BouncyCastle 的DES加密算法 下篇帖子: gulp 使用介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表