一套比较完整的前端技术选型,需要规整哪些东西,你知道不?

1. 背景及现状

随着前端开发复杂度的日益增加,各种优秀的组件框架也遍地开花。同时,我们面临业务规模的快速发展和工程师团队的不断扩张,如何解决资源整合、模块开发、项目部署、性能优化等问题势在必行。

2. 目标

根据背景和现状的分析,我们现制订一个规范化的前端工作流,很好地规范统一项目的模块化开发和前端资源,让代码的维护和互相协作更加容易更加方便,令前端开发自动化成为一种习惯。同时,让大家能够释放生产力,提高开发效率,更好更快地完成团队开发。

3. 技术路线

SVN是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

GIT是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。

GULP是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器。它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用各种工具自动完成,大大提高我们的工作效率。

WEBPACK是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块。

SASS是一种CSS预处理器。它是对CSS的语法的一种扩充,它可以使用巢状、混入、选择子继承等功能,可以更有效有弹性的写出Stylesheet。Sass最后还是会编译出合法的CSS让浏览可以使用,也就是说它本身的语法并不太容易让浏览器识别(虽然它和CSS的语法非常的像,几乎一样),因为它不是标准的CSS格式,在它的语法内部可以使用动态变量等,所以它更像一种极简单的动态语言。

RequireJS 是一个JavaScript模块加载器。它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJS加载模块化脚本将提高代码的加载速度和质量。

artTemplate是新一代javascript模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用javascript引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。在chrome下渲染效率测试中分别是知名引擎Mustache与micro tmpl的25、32倍。

ReactJS是Facebook推出的一个用来构建用户界面的JavaScript库。设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。从最早的UI引擎变成了一整套前后端通吃的 Web App 解决方案。

VueJS是开源的一个前端开发库,通过简洁API提供高效的数据绑定和灵活的组件系统。

4. 业内标准

W3C标准

5. 总体设计

5.1. 工作流总体架构

5.2. 详细设计图

5.2.1. 代码管理层

SVN:属于集中化的版本控制系统,使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等等。使用比较简单,这里不再赘述。

GIT:是分布式的版本控制系统。它采用了分布式版本库的方式,不必服务器端软件支持。操作命令包括:clone,pull,push,branch ,merge ,push,rebase等等,具体使用我也不赘述。

SVN和GIT的使用:SVN适用于项目管理。因为它简单易用。当代码涉及多组成员或者代码有一定的秘密性,用svn管理都是省事放心。

Git适用于代码管理。对于组内的一些公用组件,或者sdk之类的代码,用git更好管理,更新更快。

5.2.2. Images层

(1).图片可以按页面和公共模块来分着存放。
(2).一个页面独有的图片用一个文件夹存放,方便压缩和合成雪碧图。
(3).公用的图片元素或者出现多次的图片元素存放到public文件夹。
(4).pic文件夹用于存放静态页面时的demo图片,上正式环境的时候,这个文件里的东西可以清除。

格式使用:
GIF
GIF是一种正在逐渐被抛弃的图片格式。PNG格式的出现就是为了替代它。PNG 8除了不支持动画外,PNG8有GIF所有的特点,但是比GIF更加具有优势的是它支持alpha透明和更优的压缩(GIF仅支持索引透明)。
但是,当图片颜色简单到一定程度,大小小到一定程度的时候,gif格式图片大小要小于png8。

JPG
支持摄影图像或写实图像的高级压缩,并且可利用压缩比例控制图像文件大小。
有损压缩会使图像数据质量下降,并且在编辑和重新保存JPG格式图像时,这种下降损失会累积。
JPG和PNG8都适合颜色较少的图片,因为JPG在栅格化时精确记录少数点,其它点用差值补齐。但是当图像颜色数少于一定值比如256的时候,PNG8可能更合适。
JPG不适合具有大块颜色相近的区域或亮度("锐度")差异十分明显的较简单的图片。
JPG在存储摄影或写实图像一般能达到最佳的压缩效果,比如网站的背景图,轮播图,用户头像等等。

PNG
PNG可以细分为三种格式:PNG8,PNG24,PNG32。
后面的数字代表这种PNG格式最多可以索引和存储的颜色值。”8″代表2的8次方也就是256色,而24则代表2的24次方大概有1600多万色。
能在保证最不失真的情况下尽可能压缩图像文件的大小。
PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。
对于需要高保真的较复杂的图像,PNG虽然能无损压缩,但图片文件较大,不适合应用在Web页面上。

使用规则:
1、少用图片元素,尽量用css3代替。
2、尽量少用png24格式,要半透明的除外。
3、JPG适合摄影图像或写实图像,同时也适合颜色较少图像。
4、PNG8 适合所含颜色很少(少于256)、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片。
5、PNG24适合图片较为复杂且有透明效果且透明效果无法用css来实现的情况。
6、如果页面中有较多的小icon,首先考虑使用webfont,如果webfont不能满足需求,必须使用css sprite将图片合并,来压缩总体图片的大小,同时减少页面请求提高访问速度。参考见webfont字库
7、小于8k的图片请转化为base64。

5.2.3. CSS层

css层通过sass来管理,这样能更加灵活,方便和容易维护。具体规范参考css规范。
使用规则:
1、Include文件夹用来存放公共模块,reset或者重用性很高的mixin等等全局公用的样式。
2、Components文件夹用来存放组件级别的公用样式,例如公用的按钮样式,icon样式,弹窗的样式等等。
3、css命名最好就语义化。

5.2.4. HTML层

HTML层主要就是版本号的控制,这个放在下面GULP的使用时介绍。html的规范参考HTML规范。

5.2.5. JS层

js规范点击这里

5.2.5.1. JS模块化标准--RequireJS

通过使用大家熟悉的AMD规范,能统一大家的js标准。模块化的开发更方便代码的共享和按需加载,提高开发的效率。借助RequireJS可以实现js文件的异步加载,管理模块之间的依赖性,便于代码的编写和维护。
RequireJS使用原则:

新项目可以采取这个模板为基础去扩展代码。都在同一个区域定义变量,都在同一个区域定义事件,都在同一个地方绑定事件,最后初始化和暴露方法。套用代码标准模板可以做到大家的代码风格类似,以后接手的同学一看就知道代码在哪里,快速上手。

5.2.5.2. JS模板引擎--artTemplate

artTemplate这个模板引擎相对成熟,性能比较好。支持运行时调试,可精确定位异常模板所在语句,模板语句简洁,浏览器支持完整。
artTemplate的使用规则:
按照它的api来使用即可。

5.2.5.3. MVVM和类MVC框架

5.2.5.3.1. ReactJS

ReactJS是一个用来构建用户界面的 JavaScript 库,虚拟DOM的使用让它的性能优越。同时,它实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单的原因。
鉴于ReactJS对IE的支持不足,所以比较适合使用到移动端的项目中去。
接下来介绍ReactJS的基本使用。

5.2.5.3.1.1. HTML模板

5.2.5.3.1.2. ReactDOM.render()

ReactDOM.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。

5.2.5.3.1.3. JSX 语法

JSX的语法就是直接写在 JavaScript 语言之中,不加任何引号。它允许 HTML 与 JavaScript 的混写,简单方便。

5.2.5.3.1.4. 封装组件

React 允许将代码封装成组件,然后像插入普通 HTML 标签一样,在网页中插入这个组件。React.createClass 方法就用于生成一个组件类的。


5.2.5.3.1.5. PropTypes 属性

PropTypes属性,是用来验证组件实例的属性是否符合要求的一个利器。


Mytitle组件有一个title属性。PropTypes 告诉 React,这个 title 属性是必须的,而且它的值必须是字符串。如果实例化过程中,title不是字符串就会验证不通过,出现后台报错的信息。

5.2.5.3.1.6. this.state

React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染UI 。state就是状态的存取对象。


截图的例子中,getInitialState 方法用于定义初始状态,这个对象可以通过 this.state 属性读取。当用户点击组件,导致状态变化,this.setState 方法就修改状态值,每次修改以后,自动调用 this.render 方法,再次渲染组件。

5.2.5.3.2. VueJS

VueJs是一个短小精悍容易上手的MVVM框架。Api清晰,使用容易。支持ie8以上等其他主流的浏览器。适合在移动端和浏览器要求偏弱的项目。
VueJs的基本使用:

5.2.5.3.2.1. 数据绑定

5.2.5.3.2.2. 双向绑定

5.2.5.3.2.3. 渲染列表

5.2.6. 自动化构建工具

5.2.6.1. GULP

GULP简单易用,是前端自动化项目的构建利器。能把很多繁琐重复的工作简单化,命令化。作为前端工作流的利器,是一个不错的选择。加上丰富的组件,让它能干更多自动化的事情。

5.2.6.1.1. GULP的使用

1、全局安装


2、在项目根目录下创建一个名为 gulpfile.js 的文件

3、运行 gulp

具体的语法请参考官网。

5.2.6.1.2. GULP的插件使用
5.2.6.1.2.1. 合并css-- gulp-concat-css

5.2.6.1.2.2. 合并js-- gulp-concat

5.2.6.1.2.3. 压缩混淆js--gulp-uglify

5.2.6.1.2.4. 压缩css-- gulp-minify-css/gulp-clean-css

5.2.6.1.2.5. 监听文件的更新-- gulp-livereload


这个例子是监听样式的更新。

5.2.6.1.2.6. 图片压缩-- gulp-imagemin

5.2.6.1.2.7. 生成雪碧图-- gulp.spritesmith


Sprite.css是雪碧图生成的css。

5.2.6.1.2.8. 版本号的控制-- gulp-rev-append

gulp-rev-append 插件会通过正则(?:href|src)=”(.)[?]rev=(.)[“]查找并给指定链接填加版本号,默认根据文件MD5生成,因此文件未发生改变,这个版本号将不会改变。


运行后的结果:

5.2.6.1.2.9. 编译sass-- gulp-sass

还有其他很多插件不再一一介绍。

5.2.6.2. Webpack

webpack是目前用得最多的一款模块加载器兼打包工具。

webpack是以 commonJS 的形式来书写脚本滴,但对 AMD/CMD 的支持也很全面,方便旧项目进行代码迁移。
开发便捷,能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。
扩展性强,插件机制完善,特别是支持 React 热插拔的功能让人眼前一亮。
下面简单介绍Webpack的基本使用。

5.2.6.2.1. 全局安装

5.2.6.2.2. 简单使用


运行:

这样就会编译entry.js并打包到bundle.js。

5.2.6.2.3. Loader

Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换。
Loader可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为参数,返回转换的结果。这样,我们就可以通过 require 来加载任何类型的模块或文件,比如 CoffeeScript、 JSX、 SASS 或图片。

module.loaders 告知 webpack 每一种文件都需要使用什么加载器来处理。

5.2.6.2.4. GULP和Webpack的混合使用

在gulp里面,只需把配置写到webpack({ ... }) 中去即可,不用再写 webpack.config.js 。

5.2.6.2.5. 在ReactJS里面使用Webpack

在ReactJS里面安装react-hot-loader,再结合Webpack就可以实现修改即更新同步的效果。

6. 技术亮点

6.1. 统一标准,提高工作效率,有利团队合作

借鉴业内出名的诸如RequireJS、SASS等框架,统一前端代码的规范,有利于以后的团队合作,使用GULP、Webpack等高效的构建工具,能提高工作的效率,减少工作量。更有利于代码的维护和可扩展性。

6.2. 跨平台,支持灵活多变的场景

模块化的设计和可扩展的代码模式,加上灵活的自动化构建工具,适合各种场景的开发。也便于新成员的接入。

总结:这个其实是我2年前写出来的设计方案,现在看起来并不先进,甚至有点落后。扔出来只是给大家提供一个思路,技术选型和打包发布,还得看你们的具体业务。方案说得有点笼统,还望谅解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core2.0里的Nlog

Microsoft.Extensions.Logging,到了Version2.0.0.0,没了AddNlog() ? ——我找不到输出的日志! 。。。。。经过一番百度 step1:添加个Provider 这样,在Startup里Configure实现一个ILoger 如果在controller里使用?——…

golang jwt设置过期_听说你的JWT库用起来特别扭,推荐这款贼好用的!

以前一直使用的是jjwt这个JWT库,虽然小巧够用, 但对JWT的一些细节封装的不是很好。最近发现了一个更好用的JWT库nimbus-jose-jwt,简单易用,API非常易于理解,对称加密和非对称加密算法都支持,推荐给大家!简介…

随机验证码 pillow

安装 pip3 install pillow 基本使用 import PILfrom PIL import Imagefrom PIL import ImageDraw, ImageFontimport random 1.创建图片 from PIL import Image img Img.new(mode"RGB",size(120.30),color(255,255,255))# 在图片查看器中打开 # img.show()# 保存在本地…

微信小程序裁剪图片成圆形

前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆…

MFC控件编程之组合框跟列表框

MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添加一个字符串.放到最后面. DeleteString(索引); 删除指定索引的字符串. int GetCurSe…

多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

Python大星一、Python 类的封装、继承和多态封装继承Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Python 会从左至右搜索基类中是否包含该方法。一旦查找到则直…

前端也要会的数据结构 (不定期更新篇)

前端的软肋 一说到前端大家脑子里只有,布局、展示数据、修改样式等等。可是数据是哪里来的呢?后端给的后端给的。数据的结构呢?后端给啥用啥。 这就是前端的一个软肋。我们的业务让我们并不需要过深入的了解数据结构,数据结构和…

鸿蒙系统8月9日发布,8月9日,华为发布EMUI10.0系统+展示鸿蒙系统

8月9日,华为将召开华为全球开发者大会,本次大会邀请了5000名全球开发者、1500位合作伙伴,是华为历来规模最大的一次会议。在华为开发者大会上,华为将推出EMUI 10.0系统,由华为消费也业务软件总裁王成录主讲。EMUI是手机…

matlab main函数_Python 和MATLAB 制作Gif 图像

主要内容概述:预备知识MATLAB 代码实现GIF使用imageio 生成GIF使用animation 交互式方式生成GIF总结0,预备知识首先了解下什么是GIF 图片,以及常用的图片格式。GIF的全称是Graphics Interchange Format,可译为图形交换格式&#x…

ORB-SLAM2的特征提取算法

ORB-SLAM2跟踪线程对相机输入的每一帧图像进行跟踪处理,如下图所示,主要包括4步,提取ORB特征、从上一帧或者重定位来估计初始位姿、局部地图跟踪和关键帧处理。 以下结合相关理论知识,阅读ORB-SLAM2源代码,从而理解ORB…

引导界面图标好大_游戏里那些图标和界面,原来是这么设计出来的?

UI设计最硬核的思维 就是功能微信现在在做一种全面连接的功能,而游戏需要实现的是人机互动的功能。实现并完善功能,是互联网、游戏、网站、渴望UI人才的根本原因。如果说有电脑的世界是一片很大的面,那么可视化的操作,都是UI设计师…

爬格子呀9.17(图论)

刘汝佳的紫书差不多就告一段落吧,我觉得可以了,怎么说呢,这书也陪着自己走了一年多了吧,也目睹了从一个啥也不会的萌新到一个稍微会一点的萌新的转变。 差不多开始下本书吧,自己也大三了,时间真的有点紧啊w…

一个vue加egg.js的博客

之前自己的博客是用hexo做的,后面想做一个有后台的博客就打算用vue加node来试试,于是就有了这个博客。 项目地址 W-Blog W-Blog是一个基于vue和node的小小小博客 前端用vue,后端用egg.js 快速入门 技术栈 前端: 用户端&#…

android音量图标不见了,电脑声音图标不见了如何解决?

最近有电脑用户反映,看视频时觉得声音太小了,要调大点声,却发现任务栏上的声音图标不见了,想调个声音都难。那么,电脑声音图标不见了如何解决呢?我们一起往下看看。方法步骤一、XP系统下找回任务栏上的声音图标1、重启…

认识iOS系统架构

关于本文: 文章主要介绍iOS系统架构中的四层结构的内容、常用的框架、大致的功能,然后对iOS开发人员的发展提出自己的一些拙见。 一、iOS系统是基于UNIX系统,所有从系统稳定性上来说的确比其他操作系统的产品要好。 iOS在系统架构上分为4层&a…

Java泛型教程–示例类,接口,方法,通配符等

泛型是Java编程的核心功能之一,它是Java 5中引入的。如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它。 在集合类中使用泛型非常容易,但是它提供了比仅创建集合类型更多的功能,我们将在本文中…

html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签

我的音乐播放器HTML5中增加了Audio和Video标签,这两个标签的用法非常相似。功能却是相当强大,我们先来看一下Audio标签各个浏览器的支持情况。这里用的依然是Can I Use这个在线网站,相信学习前端的同学应该都不陌生。Can I Use我们可以看到&a…

初识react(四) react中异步解决方案之 redux-saga

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱初识react(二) 实现一个简版的html redux.js的demo初识react(三)在 react中使用redux来实现简版计数器初识react(四) react中异步解决方案之 redux-saga初识react(五) 数据流终极解决方案 dva(零配置) 今天demo是实现一个异步的计…

C# WinFrom 关于MDI

dev是一个牛B 到没边的控件 我们正常用winform做个原始mdi窗体 一点都不好看 但 用的dev只需要一个控件 就可让显示舒服多了 建一个项目 上边放一个 xtraTabbedMdiManager1 一个button1 button1.click如下: Form frm new Form(); frm.MdiParent this; frm.Text &…

Jfinal 文件上传

JFinal上传文件 uploadify 可以在http://www.uploadify.com/ 下载。 在原项目的基础上。 uploadify使用&#xff1a; <input id"file_upload_1" name"file_upload" type"file" multiple"true"> /** param uploader 文件上传方法…