《产品前端架构》笔记4_第1页
《产品前端架构》笔记4_第2页
《产品前端架构》笔记4_第3页
《产品前端架构》笔记4_第4页
《产品前端架构》笔记4_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Word可编辑?前端开发工程师? 学习笔记?产品前端架构?技术选型模块化以下讨论都是基于 JavaScript 的模块组织每个模块均以文件形式组织,而非工程的模块化。语言的模块支持l java: importl C#: usingl CSS: importl javascript: None! (JavaScript 中并不存在模块组织在并不支持,于是产生了很多,模块系统。)模块的职责:l 封装实现l 暴露接口l 声明依赖模块的使用:反模式Anti-Pattern:没有应用任何模块系统字面量Object LiteralIIFE(Immediately-invoked Function Expr

2、ession): 自执行函数表达式命名空间Namespace:命运空间可以解决全局变量的污染的问题。依赖管理dependency manage模块系统职责:l 依赖管理加载、分析、注入、初始化l 决定模块的写法。常用的模块系统有:commonjs, AMD, ES6 module语言级别的模块化)Commonjs/module它是一个模块标准,通常适用于非浏览器环境NodeJS优点l 依赖管理成熟可靠l 社区活泼,标准接受度高l 运行时支持,模块定义非常简单l 文件级别的模块作用域隔离l 可以处理循环依赖缺点l 不是标准组织标准l 同步的require,没有考虑浏览器环境可以使用 Browse

3、rify/webpack/component 来解决AMD(Asynchronous Module Definition):适合:作用于异步的IO环境Simplified CommonJS Wrapping使用同样的 CommonJS 的依赖管理书写方法,之后在使用正那么表达式来提取依赖列表。Loader Plugins允许调用处理脚本外的其他资源例如 HTML 与 CSS 文件,这样就可以形成一个完整的组件。完整组件 = 结构 + 逻辑 + 样式优点l 依赖管理成熟可靠l 社区活泼,标准接受度高l 转为异步IO环境打造,适合浏览器环境l 支持类似 Commonjs 的书写方式l 通过插件 A

4、PI 可支持加载非js资源l 成熟的打包构建工具,并可结合插件使用缺点l 模块定义繁琐,需要额外嵌套l 只是库级别的支持,需要引入额外的库l 无法处理循环依赖l 无法实现条件加载ES6 module未来的模块化标准,目前支持较少优点l 是真正的标准,未来的模块标准l 语言级别的关键字支持l 适用于所有JavaScript运行时,包括浏览器l 可处理循环依赖缺点l 标准未到达稳定级别l 根本还没有浏览器支持l 鲜有工程使用,即使有大量的6to5的transpilerSystemjs(动态模块加载器)l 支持加载 AMDl 支持加载 Commonjsl 支持加载 ES6l 支持加载 Transpi

5、ler 可支持任意资源模块系统比照l IIFE: 没有解决核心的依赖分析和依赖注入的问题。l AMD:可以直接使用,库根本的支持。l CommonJS:可以直接使用,在运行时的支持。l ES6:语言本身的支持。l 使用插件工具,可以将后三种模块管理系统打包成IIFE,也可以进行相互转换。问题:市面上这么多种模块系统, 它们之间可以相互转换吗?AMD、COMMONJS、CMD、UMD、ES6 Module、IIFE. 这么多的模块写法, 一旦你选择了一种模块写法,那它在另一个系统中就可能无法运行了。 值得庆幸的是,现在越来越多的工具可以帮助我们将js从一种模块写法转换为另一种写法, 你能帮助同学

6、们列举出一个或多个转换工具吗?browserify :实现浏览器读取CommonJS模块webpack :同时支持CommonJS和AMD形式的模块,对于不支持的模块格式,还可以对模块进行shimminguRequire :支持多种格式之间的互换,但暂时不包括ES6systemJS :几乎支持任意资源框架基于 JavaScript 的框架库(Library)l 针对特定问题的解答l 不控制应用程序l 被动的被调用框架Frameworkl Inverse of control:控制反转,l 决定应用程序生命周期l 一般会集成大量的库一个库是否是框架,取决于你从什么角度去看待它。解决方案l DOM

7、l Communication:通信l Utility: 工具库l Templating: 模板技术l Component: 组件l Routing:路由单页系统中尤其重要l Architecture:架构为什么使用外部解决方案?l 开发效率l 可靠性:浏览器兼容性/测试覆盖l 更好的配套:文档/DEMO/工具l 设计的更好l 专业性什么时候不去使用外部解决方案?l 问题过于简单l 备选框架质量与可控性无法保证l 无法满足当前业务需求l 团队中已有相关积累实际工程中如何使用?l 开发:基于一个外部模块系统,自由组合。l 半开放:基于一个定制过的模块系统,内容-外部的解决方案共存。l 大教堂:深

8、度定制的模块系统,很少需要引入外部模块。DOM与其相关的操作有: Selector选择器、ManipulationDOM操作、EventDOM、Animation。 DOM操作的职责:l 提供便利的 DOM 查询、操作、移动等操作l 提供事件绑定及事件代理等支持l 提供浏览器特性检测、 UserAgent 侦测l 提供节点属性、样式、类名的操作l 所有以上操作实现目标平台的跨浏览器支持常用的 DOM 库有 l jQuery:使用链式接口l zepto.JSl Mootools: 使用原生 DOM 对象,通过直接扩展了 DOM 原生对象,严格遵守Command-Query命令

9、查询标准。l mootools: 最好的源码阅读学习的资源l jQuery:最稳妥的方案l zepto.JS:移动端的备选品DOM专业领域选取标准:Issue总量与解决率比Star更关键Communication(通信)与其相关的有 XML Request、Form、JSONP、Socket。它的主要职责那么:l 处理与效劳器的请求与相应l 预处理请求数据/响应数据 Error/Success 的判断封装l 多种类型请求,统一接口XML Request1/2、JSONP、iFramel 处理浏览器兼容性Communication库:Reqwest: 优点:JSONP支持;稳定/IE6

10、 + support; CORS跨域; Promise/A支持。qwest:优点:更小的代码量; 支持Xml Request2; CORS跨域;支持高级数据类型,如ArrayBuffer,Blob和FormData.Socket.io 针对实时性要求高的需求优点:实时性;支持二进制数据流;智能自动的回退支持非二进制数据流;多种后端语言支持。UtilityLang:函数工具包与其相关的有 函数增强 & Shim保证实现与标准一致、Flow Control。 它的主要职责:l 提供 JavaScript 原生不提供的功能l 方法门面包装, 使其更易于使用l 异步列队/流程控制等等

11、Utility库:Templating:模板技术与其相关的有 String-based、DOM-based、Living Template。String-based:基于字符串的模板DOM-based: 基于DOM的模板Living-Template:活动模板技术Component:组件与其相关的有 Modal、Slider、DatePicker、Tabs、Editor其为产品开发中最耗时也是最必要的一局部。它的主要职责:l 提供根底组件 CSS 支持l 提供常用组件,如Slider,Modall 提供声明式的调用方式OptionalComponent:组件库:非jQuer

12、y版本的Bootstrapl Knockout-Bootstrapl AngularUI Bootstrapl React BootstrapRouter:路由与其相关的有 Client Side、Server Side。它的主要职责:l 监听 URL 变化,并通知注册的模块l 通过 JavaScript 进行主动跳转l 历史管理l 对目标浏览器的兼容性支持routing库:Architecture解耦:架构与其相关的有 MVC、MVVC、MV*,解耦又可以通过很多方式来实现例如事件、分层。它的主要职责l 提供一种范式帮助强制开发者进行模块解耦l 视图与模型别离l 更容易进

13、行单元测试l 更容易实现应用程序扩展以MVVM为例:Model :数据实体,比方Car、Person等,它们用于记录应用程序的数据View:展示友好的界面,它是数据的定制反映,它包含样式结构定义以及 VM 享有的声明式数据、数据绑定ViewModel: 其为 View 与 Model 的粘合剂,它通过绑定、事件与 View 交互,并可以调用 Service 处理数据持久化,当然也能通过数据绑定将 Model 的变动更新到 View 中。MV* != SPA(单页系统)Routing是MV*系统的可定位状态的信息来源。TodoMVC: :/todomvc /参考网站:1. s:/ javascr

14、ipting /2. s:/ javascriptoo /3. :/microjs /4. 一个对前端模板技术的全面总结: :/ tuicool /articles/qMJ77r开发实践系统设计综合运用课程案例-网易云音乐, 并且主要关注前端工程师的工作职责,不包含其他工程师的职责标准。交互文档说明通过交互文案来了解用户行为与异常提示。系统分解:l 注册登录密码l 系统主框架:n 顶栏:u 搜索u 账号u 消息u 设置n 边栏u 歌单操作u 其他n 底栏u 播放器u 播放列表u 歌曲详情n 内容区u 发现音乐u 朋友动态u 个人主页u 本地音乐u 系统分解必须对照交互稿做到百分之百的对应,不能

15、漏掉任何一个模块。 后续的开发与评估都需根据此分解进行。接口设计分析模块交互设计,设计前后端交互接口,并定义数据类型、模板资源、异步接口、以及页面摘要,并和其他端角色配合,完成不同的页面逻辑。以下以“发现音乐-推荐模块为例来说明:这个模块包含一系列列表:针对此模块定义内容标准:这些模板标准,需有前后端人员共同确认后,才能进行后续开发。工程构建工程结构l 后端模板l 前端实现初始代码:使用工具构建-rec.ftl模拟数据系统实现视觉说明:以“网易云音乐为例视觉稿定义了交互稿中的所有效果,如下列图包含各个情况下用户界面的显示样式:组件提取视觉稿之后那么需要从中提取出通用组件,其中包括:l 通用元件

16、Logo,提示,输入框,图标,按钮等l 通用列表l 复合组件比方评论控件l 浮层弹窗下列图为按钮原件:页面制作:以“网易云音乐-发现音乐-推荐模板为例,其包括:l Bannerl 推荐歌单l 最新专辑等根据视觉效果来设计静态页面。组件封装BannerSliderl 模板slider.htmll 例如demo.html逻辑实现l 数据层实现:节目数据program.jsl 页面模板实现:页面模板rec.ftll 控制层实现: 页面入口rec.js测试发布本地测试配置模拟数据1. 使用同步模拟数据2. 使用异步模拟数据:采用第三方代理软件:对接联调l 去除同步模拟数据l 去除异步数据:发布上线打包发布:选用nej构建工具打包配置:l 输入输出优化配置:l 优化图片l CDN配置l 代码压缩l 代码合并讨论区问答:前端架构师在一个工程中具体是做什么的?1 参与需求评审、交互评审、视觉评审,给出专业意见和建议

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论