前端之旅前端架构

产品前端架构(持续修改)

2016-02-28  本文已影响1464人  7091a52ac9e5

以下是我在网易云课堂的关于产品前端架构方面的学习笔记,其实有很多也只是记下来了,但是我还没有真正的消化理解。所以本文将持续修改,对自己不理解的知识点,逐渐拓展补充。
本文主要涉及开发角色分类,版本管理,模型模块的选择以及一个具体的实例。
无意中看到另外一个同学在github上基于本课制作的电子书:也把链接附在此处,大家一个参考学习。
@(书籍阅读)[网易云课堂|前端架构]

产品前端架构

协作流程

Web系统

web系统

客户端与服务器端之间的相互交互;

Web系统在服务器端是如何组织的?
web系统在服务器端的组织实现方式
M:数据层,存储应用相关数据,封装对数据的管理;
V:数据模型,提供人机交互;
C:负责在模型和数据之间传递数据,根据用户的输入修改模型,根据修改后的数据更新视图;
视图层需要的技能;
老的前后端分离方法的弊端

前端包括视觉,交互逻辑,模板转换等;
随着技术的发展,控制层也可能部分由前端负责;

前后端负责方面

角色定义

前端工程师的知识技能
技能图谱

协作流程与规范

前后端协作规范
核心输出:
后期维护
后期维护流程

职责说明

角色与人的关系?

接口设计

概述
接口概述

URL地址:需要映射到那些模板,那些事API载入;
视图模板:
API接口:输入输出信息;
Model:数据模型,数据类型的格式等

页面入口的规范:

页面入口

同步数据

同步数据

异步接口:

异步接口

规范的应用

模拟同步数据

本地开发

开发

本地模拟服务器做的事情?
本地代理?Local Proxy,根据配置信息。

联调

去掉本地环境,通过配置文件进行控制。

版本管理

简介

版本控制系统

版本控制系统VCS(version control system):是一种记录若干文件的修订记录系统,它帮助我们查阅或者回到某个历史版本;

1.集中式版本控制系统
有一个中央服务器,干活的时候,用的都是自己的电脑,需要先从中央服务器获取最新的版本,然后开始干活,干完活了,再把自己的修改推动给中央服务器。
缺点:需要联网的情况下才能使用,上传速度慢。
2.分布式版本控制系统
分布式版本控制系统没有中央服务器,每个人的电脑上都用一个完整的版本库,只要交换对方的修改就行,把各自的修改推送给对方。
分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
优点:安全性高,不需要联网

分支模型

分支和分支模型

分支
从目标仓库获得一份项目拷贝,每条拷贝都有和原仓库功能一样的开发线
分支模型(branching model)/工作流(workflow)
一个围绕项目[开发/部署/测试]等工作流程的分支操作(创建,合并等)规范集合。

产品级的分支模型

分支模型-特性开发
特性分支
分支模型-发布线
发布线
涉及到的环境
涉及到的环境

git介绍

git是什么?
Git命令详解

help、config、status、init、add、rm、commit、log、diff、File级别的checkout、reset

git add:未跟踪变为已跟踪
git add.添加所有当前目录下的文件
忽略文件.gitignore
- 在添加时忽略匹配的文件
- 仅作用于未跟踪的文件
从暂存区删除git-rm

git commit
根据暂存区的内容提供一个提交命令
基于文件内容进行管理
git commit-a 工作目录已跟进
git log

git中别名的设置
git config alias.shortname<fullcommand>

dit diff:显示版本差异

撤销全部的改动
git checkout HEAD -- <file>

git操作

$ git checkout next

git stash
保存目前的工作目录和暂存状态,并返回干净的工作目录;
stash相当于一个栈
stash pop = stash apply + stash drop
git merge:合并分支

解决merge冲突

git rebase:任何状态上的提交,变基;
git rebase -- onto

rebase和merge的对比

rebase和merge的对比

git tag:对某个提交设置一个不变的别名;

push、remote、fetch、pull、clone

远程操作

Git支持本地协议,所以我们可以初始化一个本地的远程服务器
git init ~/git-server --
git push:提交本地历史到远程;
如何避免重复输入URL
git remote:配置远程映射;
push冲突(有人先提交了)
git fetch +merge
git pull=git fitch+fit merge
git clone克隆远程仓库作为本地仓库;

git fetch 从远程获取最新版本到本地,不会自动merge

git pull 从远程获取最新版本并merge到本地,git pull = git fetch + git merge
git pull 过程不可控,一旦出现问题,很难定位问题;另外,本地工作目录会被远程分支更新

其它参考资料

技术选型

模块组织(js脚本)

语言的模块支持

java:import
c#:using
css:@import
javascript:none!

模块和模块系统

命名空间:
返回所有模块
依赖管理

模块系统

模块转换工具:

browserify :实现浏览器读取CommonJS模块
webpack :同时支持CommonJS和AMD形式的模块,对于不支持的模块格式,还可以对模块进行shimming
uRequire :支持多种格式之间的互换,但暂时不包括ES6
systemJS :几乎支持任意资源

框架

库Lib

开发效率
可靠性:浏览器兼容性/测试覆盖

更好的配套:文档/DEMO/工具
设计得更好
专业性

不适合使用框架的情况:
问题过于简单,备选框架质量与可控性无法保证;
无法满足当前业务需求;
团队中已有相关积累;

开放:基于一个外部模块系统,自由组合;
半开放:基于一个定制过的模块系统,内部-外部解决方案共存;
大教堂:深度定制的模块系统,很少需要引入外部模块;

Dom、通信、模板、utility、组件、路由、MV*架构.分别推荐解决方案

DOM

常用Dom操作库的对比

手势:Hammer.js
局部滚动:iscroll.js

Velocity:高级动画

video.js:视频播放

其它常用库

Communication

Communication流程

Reqwest:非常小;
优点:

qwest:非常小,2.5k,支持浏览器少
优点:

实时性要求极高的产品?易信web版?
socket.io
实时性
支持二进制数据流
只能自动的回退支持(非二进制数据)
多种后端语言支持

Utility:

操作类库的对比
Template:

String-based:dustis.js,hogan(mustache实现之一)dot.js(速度快)
模板+数据=展现


基于数据的模板

Dom-based:Angularis.jsVue.js,Knockout
运行时性能更好,局部更新

基于DOM的模板

living-template:Regularjs,Ractivejs,htmlbar
拼接了字符串模板和dom模板

对比
Component:组件

Modal/Slidar/DataPicker/Tabs/Editor
职责:
提供基础组件CSS支持
提供常用组件Slider,Modal
提供声明式调用

Bootstrap/Foundation

B和F的对比
Routing

监听url变化,并通知注册的模块
通过JavaScript进行主动跳转
历史管理
对目标浏览器的支持
做什么的?
page.js:类似Express.Router
Director.js:前后端使用一套规则定义
stateman:深层
crossroads

路由的对比
Architecture(目的:解耦)

MVC/MVVM/MV*
提供一种范式,帮助(强制)开发者进行模块解耦
视图模型分离
更容易进行单元测试
更容易进行应用程序扩展

Modal:数据层,模型层
View:展示友好的界面,数据定制的反应
ViewModal:view和Modal的粘合剂
UnitTest:
SPA:单页系统;
引入路由,
TodoMVC
数十种常用框架的比较;

开发实践

网易云音乐
交互需求:内容结构,需求变更,信息架构,异常提示等
系统分解:

工程构建:
项目结构

视觉说明:

测试发布

本地测试
发布上线

一份更好的笔记

上一篇 下一篇

猜你喜欢

热点阅读