`
agevs
  • 浏览: 70544 次
  • 来自: 北京
博客专栏
924aba1e-229a-352e-b6d4-f15f3159a438
各种Web前端技巧经验分享...
浏览量:0
文章分类
社区版块
存档分类
最新评论

我的架构经验系列文章 - 前端架构

阅读更多

框架层面:近几年前端发展很快,前端之所以叫前端因为前端是已经可以独立成为一种职业了,js也不再是十年前的玩具了,以前富客户端RIA的应用可能会用flash/flex或是silverlight,现在可以使用js来完成大部分的功能,因此js作为一门前端的支撑语言也不仅仅是进行的简单的编码,越来越多框架性的东西出现了。越来越多的开发模式转变为后端只是吐json的数据源,而前端做所有UI的事情。

MVC
MVC实现职责分离是很好的,大多数网站在后端都会引入MVC框架,对于一个前端负责所有呈现和前端业务逻辑的网站来说,使用MVC框架也是很有好处的。Javascript的MVC框架现在很多。每一个框架其实都有其特点的,但是前端的MVC框架会和后端的有些不同的。比如前端的MVC框架可能会做一些M和V元素的双向绑定,对于后端来说往往是单向的比较多。通过引入MVC框架我们可以让同一个页面做很多事情,通过一个不刷新的页面实现一个应用程序的根基,还可以很清晰地进行MVC的分离并且突出M的概念,这是没有框架所办不到的。

通讯
对于一个比较复杂的页面可能会有比较多的Javascript模块,如果要进行模块之间通讯的话(比如一个页面有左边菜单和导航以及列表,左边菜单点选一级分类之后要通知导航加上去这项,并且通知列表重新读取数据并刷新,然后从导航删除这个选择的话要通知列表重新获取数据,通知菜单显示所有)。对于比较复杂的通讯,如果把模块模块之间进行强耦合直接调用其它模块的函数的话是不利于可维护性的,我觉得可以引入发布订阅机制,每一个模块做了什么修改把信息发布出去,关心这个信息的人订阅这个信息,并且在回调函数里面做相应的操作就可以了。可以使用Amplifyjs作为发布订阅的框架。

模板
对于前端来说和后端一样一个比较麻烦的问题就是往往会在脚本里面把html也混在一起,个人觉得是这样的,如果对于非常琐碎一些dom修改问题倒不大,如果是大块的html拼接的话,数据和html甚至是css混合在一起,那么代码的可维护程度非常差。此时可以考虑使用一些模板引擎来分离数据和表现,比如Twitter hoganjs。由于很多模板引擎,比如大胡子引擎不仅仅是针对前端的,后端语言也有相应的引擎,因此甚至可以把模板放在文本文件中,前端后端共同使用一套模板引擎,也就是说现在的代码偏向于服务端渲染的那么就在后端使用模板,如果要以后改为客户端渲染了这套模板可以直接被前端使用。资源示例

类库
除了框架之外还有很多类库,比如jquery,underscore,linq.js(linq to javascript),jscex(wind)反正后端有啥现在前端也有啥,尽情发挥想象吧。用好这些框架可以大大改善生产力的,脚本能做的事情真的比想象的要多的多。我是做后端的前端知道的不多在这里列出的可能只是九牛一毛。

依赖
可以使用Requirejs、Commonjs之类的组件来管理脚本之间的依赖,好处很多的,我们的模块只需要写清楚需要依赖什么,Requirejs自然会帮我们按照一定的次序加载进来,这样我们既不用担心顺序问题也不用担心组件的版本号问题。基于Requirejs它具有丰富的配置,即使是我们进行了静态资源合并也完全能处理,只要通过配置把组件配置到相同的服务端生成的一个路径上即可,不过以前在做的时候发现它会自动加上.js 扩展名,不过完全可以通过改Requirejs源代码解决。在架构上我的观点是既然使用开源的东西,遇到问题了就不要去怕改源代码。我们一定不能停留在框架的使用者,定制框架甚至向作者贡献自己的代码没有这么难。 设计层面:

职责分离的理念
虽然我们都知道CSS样式、JS行为以及HTML结构。个人觉得只有HTML是必须的,也就是说如果一个页面没有样式没有脚本的话它应该是一个清晰的页面,可以大致表现出页面需要表现的内容,只不过样子比较难看,并且也是交互的。如果说很多功能是ajax实现的话那么就把交互工作转到服务端实现服务端的渲染。多了样式只是布局上样子上更好看,多了脚本只是交互性上更友好,不需要刷新页面,但是少了也不代表这个网站就是废物了,现在有很多理念其实目的是一样的。如果达不到这个境界至少我们要很明确的让css、js和html履行自己的职责,不要把过多的事情赋予不相关的组件。比如尽量不要在html中包含操作性的脚本代码,而是应该直接在脚本中选择dom元素进行操作,尽量不要在脚本中包含大段的html代码而是应该从模板读取然后把数据填充进去,也尽量不要在html代码中包含大量内嵌的样式而是应该通过选择器选择进行样式赋值。资源示例

分层和目录结构
对于一个比较复杂的大型的项目,合理规划目录结构也是很重要的,你可能会说脚本和样式分两个目录就可以了,但是如果一个复杂的项目有几百个脚本都列在一个文件夹下吗?后端有分层的概念其实前端完全也可以有分层的概念,有表现层、业务逻辑层和模型层,然后是下面的数据访问ajax层,当然还会有常量的文件,我反问觉得前端的分层可以超大型项目的ios或android程序来靠。比如之前我做的一个ios程序的示例,个人觉得这样的分层就比较一目了然的。

合并和拆分的平衡
很多时候架构上的东西就是一种权衡,如果有固定的标准的话也就不需要架构师了,我们只需要按照固定的标准去做就行了。比如,一个页面上使用了10个脚本文件,5个样式文件,按道理说合并成两个文件可以达到最小的请求数,但这样一定是好的吗?这个10个脚本和5个样式文件中有很多或许是其它页面也需要公用的,如果仅仅简单的合并在一起反而可能增加用户的下载流量,因此怎么规划通用的东西合成一个文件,框架的文件单独,而每一个页面都有自己独特的脚本和样式,也是一种学问。 性能层面:

性能检测
诸如YSlow和PageSpeed等工具可以分析出前端的性能问题,在这里就不展开讨论了。对于前端来说由于涉及到用户的客户端环境和网络环境所以情况不是这么单纯,但是我们可以做到的就是在我们的可控范围之内尽量减少用户域名解析数量,减少用户下载的数据量,增加并发等等。其实说白了,我们就是清理管道使得管道更大,或者增加更多的管道,或者就是尽量让管道之内的水少一点了,这样就可以更顺畅。资源示例

性能分析

现在有一些工具可以对Javascript的性能甚至是DOM解析的情况进行细致的分析,比如dynaTrace AJAX Edition,通过这样的工具我们可以分析我们的脚本代码以及页面布局是否合理,从开发的角度来全面了解和优化我们的前端代码。客户端的资源虽然不像服务端的资源这么重要,但是为了给用户的机制体验最好还是对客户端的性能消耗有所优化。

最后分享关于这个主题的一个小的精美组件:这里

分享到:
评论
2 楼 james_lover 2014-07-28  
GWT则尝试让后端语言(java)统一前端语言(js)。
相信不久,也许用不了2年,前端会出现新的工具,用来解决已经到来的问题: 开发成本问题。
前端越来越复杂,对人员能力要求越来越高,造成前端开发人员不足,人员成本太高。大家都知道java是个码农语言(一个低成本语言,能速成),有成千上万的java码农在支撑着软件工程建设。我觉得再培养一批“前端码农”实在不经济。
1 楼 james_lover 2014-07-28  
前端在以前真的是小打小闹:写一些特效,交互。
但自从Gmail之后,前端也开始往工程化的方向上走,前端开始越来越重要。工程化面临的问题(以前只有后端才有),前端也一样不落的全都遇到了。

最首要的问题:多人协作问题。
不得不“模块化”,以减少冲突,能让每个开发人员各司其职,互不打扰。
前端mvc是模块化的一个体现,更大的工程,m,v ,c要再进行更深入细化的模块划分,于是有了类库,模版,JsUnit,

即而又引入新的问题:模块间依赖,众多模块如果打包发布

还有开发人员多了以后,不得不制定“开发规范”

好不容易前端工程化的问题解决的差不多了,又面临新的问题:如此多的前端开发人员,该如何与后端进行沟通协调。(妈的工程越来越大,越来越复杂)
nodejs试图从语言层面统一两端。 但后端发展几十年了,积累了庞大的工具集来解决工程化问题,nodejs不可能把所有轮子重新复制一遍。

相关推荐

    云衡博客,一个基于微服务架构的前后端分离博客系统。 - 前端使用Vue + Eleme-yunheng_blog.zip

    《云衡博客:Vue与Eleme的前端实践与微服务架构解析》 云衡博客是一个典型的应用了现代Web开发技术的前后端分离博客系统,它的核心特性在于采用微服务架构,这种架构方式使得系统具有高度的可扩展性和独立性。在...

    Java微服务架构163课

    全套微服务架构,视频学习java微服务架构,包括如下 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows ...

    Java微服务架构l零从基础到精通高清视频教程全套 163课

    113 文章管理功能-前端 Datatable 控件分页处理2 114 文章管理功能-补充内容(关于 PageHelper 的依赖问题) 115 文章管理功能-Thymeleaf 自定义标签1 115 文章管理功能-Thymeleaf 自定义标签2 116 文章管理功能-...

    前端工程师-淘宝数据架构设计案例经验.docx

    文章中讨论了淘宝数据架构设计案例,包括商品属性设计、数据统计和搜索等方面的经验。 首先,文章讨论了商品属性设计的重要性。淘宝的商品属性设计需要考虑多种因素,如商品的品牌、系列、颜色、尺码等。作者提出了...

    使用 AngularJS 构建RIA前端架构实践

    贺天卓是Worktile的前端架构师,拥有10年的编程经验,曾涉足设计师、后端业务编写和产品原型绘制等多个角色,他的邮箱地址为***。他的专业背景和个人经历为RIA前端架构的实践和探索提供了坚实的基础。 小调查与议题...

    Archsummit2018 架构师大会-精彩文章.zip

    在2018年的Archsummit全球架构师峰会上,一系列深入且富有洞见的文章引起了广泛关注。这个名为"Archsummit2018 架构师大会-精彩文章.zip"的压缩包文件,包含了那次大会的精华内容,是IT领域的专业人士不可多得的学习...

    Palment--前端性能监控系统,主要基于Egg、Koa2

    **Palment:前端性能监控系统概述** Palment是一款前端性能监控系统,它的核心构建基于Egg.js和Koa2这两个成熟的Node.js框架。Egg.js是阿里云开发的一个企业级Node.js应用框架,旨在提高开发效率,提供稳定、可扩展...

    大型门户网站站架构心得-腾讯-百度-新浪-谷歌网站

    本篇文章将深入探讨大型网站架构的核心要点,并借鉴这些公司的成功案例。 首先,大型网站架构的核心原则之一是“分层”。这意味着将系统分解为多个独立的层次,如前端展示层、应用逻辑层、数据访问层等,每一层都...

    vue加springboot前后端分离架构.zip

    百分百完善的vue+springboot前后端分离架构,可直接拿去做前后端分离项目的底层架构,包含3个部分,应用springboot框架的java后端代码,vue前端代码,mysql数据库脚本,已完成反向代理,跨域,数据库连接等基础参数...

    前端开发简历模板-web前端开发-三年-北京.docx

    1、负责前端架构的建立和实施,并据此制定合理有效的开发规范,解决各类技术难点。 2、解决主流浏览器及其不同版本之间的兼容性问题。 3、与后端开发人员沟通数据接口。 项目经历 项目一:智奇健身房管理系统 (后台...

    08-基于LAMP架构部署商城系统

    ### 08-基于LAMP架构部署商城系统 ...这种架构使得前端与后端分工明确,既保证了系统的稳定性,又提高了开发效率。在部署电商项目时,LAMP架构能够很好地满足项目的需求,提供高效、稳定的Web服务。

    管理系统系列--php 内容管理系统.zip

    内容管理系统通常包括文章发布、用户管理、权限控制、模板编辑等功能,能够使非技术背景的用户也能方便地添加、修改和删除网站内容。 【标签】:由于没有提供具体的标签,我们可以根据标题推断,这个项目可能涉及到...

    项目需求定义书-网站架构.pdf

    该网站架构不仅包含传统的新闻资讯发布,还涉及个人求职者和企业招聘者的一系列互动和服务,同时提供招聘会的组织和管理功能,形成一个完整的招聘生态系统。通过这个平台,用户可以方便地获取信息、寻找工作机会,而...

    micro-front-template:微前端架构模板

    微前端架构模板 2021.4.26 更新说明 将 Static 应用的网络请求更换成 mock 请求。 梳理微前端新系列文章大纲 2021.3.3 更新说明 因服务器到期,所有网络请求均已更换成 mock 请求。 教程案例统一以最新的 master ...

    IA-32架构的Linux网络并行计算机群的配置及组建.pdf

    每个计算节点是由IA-32架构的32位CPU(如Intel 386及其兼容型号)组成的普通微机,其中一台配置较高的节点作为前端文件服务器,其他为普通节点机。所有节点通过高速通用网络相互连接。由于Linux技术的应用,IA-32...

    管理系统系列--博客管理系统.zip

    2. **后端架构**:后端负责处理数据、业务逻辑和服务器交互。常见的技术栈可能是Node.js(Express或Koa)、Java(Spring Boot)、Python(Django或Flask)或PHP(Laravel)。数据库方面,MySQL、PostgreSQL或MongoDB...

    管理系统系列--ThinkPHP5+Vue2.5的CMS后台内容管理系统.zip

    总结,"管理系统系列--ThinkPHP5+Vue2.5的CMS后台内容管理系统"充分利用了ThinkPHP5的后端能力和Vue2.5的前端优势,构建了一个高效、灵活的内容管理平台。通过理解并掌握这两个框架的结合应用,开发者可以快速搭建...

Global site tag (gtag.js) - Google Analytics