我的编程空间,编程开发者的网络收藏夹
学习永远不晚

web前端:前端架构那些事儿

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

web前端:前端架构那些事儿

  前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,完美的动效设计,给用户带来极高的用户体验。

  在谈前端架构之前,需要先探讨一下不同人群对前端产生的困惑。前端这个职业最近几年才逐渐被认可,之前一直是低端的代名词,所以多数高手很不屑搞这个。之前的很多项目,人们对前端这块的要求也只是能用就行,所以很少会在上面去细致、深入地建立一套完善体系。而多数产品的技术经理也会是后端出身的,往往对前端的认识还停留在JavaStruts那个原始的MVC模型上,或者首先想到的就是GWT和JSF,这是从后端角度出发的一种视角。用这类思维方式做出来的产品,一般用户体验都不会很好。

  另一方面,从界面层上手的人群,他对用户体验这方面会把控得比较好,但通常缺架构意识,或者说是软件工程的意识。在界面层比较复杂的情况下,很可能会有失控的趋势。对整个系统结构的认知程度通常不够深入,也缺乏设计模式等方面的知识。

  开发人员会有一些困惑:

  创建项目的时候,一般没有人作前端的技术选型

  拿到项目之后,没有直接可复制的基础版本

  习惯于引用第三方组件

  赶功能,需要某个组件或者特效

  上网搜到一个合适的,加进来

  它还依赖一些别的库

  文件大还是次要的

  可能会产生冲突,样式也不一致

  开发经理也会有一些困惑:

  协作过程感觉有问题

  前端人员写原始界面,包含静态界面和特效

  开发人员接着改,加逻辑

  发现有问题要返工了

  在谁的代码基础上继续改?如何合并?

  2014年了,为什么还有这么多人工环节?

  能自动单元测试吗?

  能自动发布打包吗?

  用户会对这些事情感到烦恼:

  长得丑

  界面老土

  风格不一致

  速度慢

  加载慢

  渲染慢

  执行慢

  出错

  架构的本质是什么?其实也是一种管理。通常我们所说的管理,都是指对于任务和人员的管理,而架构管的是机器和代码。比如说,机器的部署属于运维的物理架构,SOA属于服务架构,那么,前端的架构指什么呢?

  长期以来,前端所处的位置是比较偏应用层,而且是很薄的一层,而架构又要求深度和广度,所以之前在前端里面做架构,好比在小水塘里游泳,稍微扑腾两下就到处碰壁。但最近这几年来,前端的范围被大大拓展了,所以这一层逐渐变得大有可为。

  怎样去理解架构呢?在早期的文字MUD游戏里,有这么一句话:“你感觉哪里不对,但是又说不上来。”在我们开发和使用软件系统的过程中,或多或少会遇到这样的感觉,有这种感觉就说明架构方面可能有些问题。

  在狭义的前端领域,架构要处理的很重要的事情是组件的集成。由于Javascript本身缺乏命名空间这样的机制,多数框架都倾向于自己搞一套,所以这方面的碎片化是很严重的。如果一个公司的实力不足以自研所有用到的组件,就会一直面临这方面的问题。

  比如说,在做某个功能的过程中,发现需要一个组件,时间来不及做,就到网上搜了个,加到代码里面,先运行起来再说。一不小心,等功能做完的时候,已经引入了无数种组件了,有很多代码是重叠的,可能有的还有冲突,外观也不一致。

  环顾四周的大型互联网公司,基本上都有自己的前端框架,比如阿里的Kissy和Arale,腾讯的JX,百度的Tangram,360的QWrap等,为什么?因为要整合别的框架,并且在此基础上发展适合自己的组件库,代价非常大,初期没办法的时候只能凑合,长期来说,所有代码都可控的意义非常重要。

  那么,是不是一套框架可以包打天下呢,这个真的很难。对于不同的产品形态,如果想要用一套框架去适应,有的会偏轻,有的又偏重,有的要兼容低端浏览器,有的又不要,很难取舍。

  常见的前端产品形态包括:

  内容型Web站点侧重渲染方面的优化,前端逻辑比重小

  操作型B/S系统以数据和逻辑为中心,界面较规整

  内嵌Web的本地应用要处理缓存和一些本地接口,包括PC客户端和移动端

  另外有Web游戏,因为跟我们的企业形态关系不大,而且也比较独特,所以不包含在内。这三种产品的前端框架要处理的事情显然是不太一样的,所以可以细分成2-3种项目模板,整理出对应的种子项目,供同类产品初始化用。

  最近我们经常在前端领域听说两个词:全端、全栈。

  全端的意思是,原来的只做在浏览器中运行的Web程序不够,还要做各种终端,包括iOS,Android等本地应用,甚至PC桌面应用。

  为什么广义的前端应当包含本地应用呢?因为现在的本地应用,基于很多考虑,都变成了混合应用,也就是说,开发这个应用的技术,既包含原生的代码,也包含了嵌入的HTML5代码。这么一来,就造成了开发本地应用的人技能要求较广,能够根据产品的场景,合理选择每个功能应当使用的技术。

  现在有一些PC端的混合应用开发技术,比如node-webkit和hex,前者的典型应用是Intel®XDK,后者的典型应用是有道词典,此外,豌豆荚的PC客户端也是采用类似技术的,也有一些产品是用的qt-webkit。这类技术可以方便做跨平台,极大减少开发工作量。

  所以,我们可以看到,在很多公司,开发安卓、iOS应用的人员跟Web前端的处于同一个团队中,这很大程度上就是考虑到这种情况。

  全栈的意思是,除了只做在浏览器中运行的代码,还写一些服务端的代码,这个需求又是从哪里来的呢?

  这个需求其实来自优化。我们要优化一个系统的前端部分,有这么一些事情可以做:

  HTML结构的优化,减少DOM树的层次等等

  CSS渲染性能的优化,批量写入DOM变更之类

  资源文件的优化,比如小图片的合并,图像格式的处理,图标字体的使用等

  JavaScript逻辑的优化,模块化,异步加载,性能优化

  加载字节量的优化,主要是分摊的策略

  HTTP请求的优化

  这里面,除了前三条,其他都可能跟后端有些关系,尤其是最后一条。但是前端的人没法去优化后端的东西,这是不同的协作环节,所以就很麻烦。

  那么,如果有了全栈,这个问题可以怎么解决呢?

  比如说,我们要做最原始的小文件合并,可以在服务器做一些配置,把多个合并成一个请求,比如天猫的某个url:

  这个就很明显是多个文件合并而成的,9个小文件的请求,合并成了一个64k的文件请求。

  这种简单的事情可以在静态代理服务器上配置出来,更复杂的就比较难了,需要一定的服务端逻辑。比如说,我们有多个ajax请求,请求不同的服务,每个请求的数据量都非常少,但因为请求数很多,可能会影响加载性能,如果能把它们在服务端就合并成一个就好了。但这个优化是前端发起的,传统模式下,他的职责范围有限,优化不到服务端去,而这多个服务很可能是跨产品模块的,想要合并,放在哪个后端团队都很怪异。

  这可真难办,就像老虎追猴子,猴子上了树,老虎只能在下面干瞪眼。但是如果我们能让老虎上树,这就不是个问题了。如果有这么一层NodeJS,这一层完全由前端程序员控制,他就可以在这个地方做这种合并,非常的合理。

  除此之外,我们常常会用到HTML模板,但使用它的最佳位置是随着产品的场景而不同的,可能某个地方在前端更好,可能某个地方在后端好些。到底放在哪合适,只有前端开发人员才会知道,如果前端开发人员不能参与一部分后端代码的开发,优化工作也还是做不彻底。有NodeJS之后会怎样呢,因为不管前端模板还是后端模板,都是JavaScript的,可以使用同一套库,这样在做调整的时候不会有代码迁移的烦恼,直接把模板换地方即可。

  现在,也有很多业务场景有实时通信的需求,目前来说最合适的方案是Socket.io,它默认使用NodeJS来当服务端,这也是NodeJS的一个重要使用场景。

  这样,前端开发人员也部分参与了运行在服务端的代码,他的工作范围从原先客户端浏览器,向后拓展了一个薄层,所以就有了全栈的称呼。至于说这个称呼还继续扩展,一个前端开发人员从视觉到交互到静态HTML到JavaScript包办的情况,这个就有些过头了。

  以上这些,主要解决的都是代码层面的事情。另外有一个方面,也是需要关注,但却常常不能引起重视的,那就是前端的工程化问题。

  早期为什么没有这些问题?因为那时候前端很简单,复杂度不高,现在整个很复杂了,就带来了很多管理问题。比如说整个系统的前端都组件化了之后,HTML会拆分成各种模板,JavaScript会拆分成各种模块,而CSS也通过LESS或者SASS这种方式,变成了一种编译式的语言。

  这时候,我们考虑一个所谓的组件,它就比较麻烦了。它可能是一个或者多个HTML模板,加上一个或者多个JavaScript模块,再包含CSS中的一部分构成的,而前两者都可能有依赖项,三个部分也都要避免与其他组件的冲突。

  这些东西都需要管理,并且提供一种比较好的方案去维护。在JavaScript被模块化之后,也可以通过单元测试来控制它们的质量,并且把这个过程自动化,每次版本有变更之前,保证它们最基本的正确性。最终,需要有一种自动化的发布机制,把这几类代码提取,打包合并,压缩,发布。

  这个主题展开可以讲很多,所以我们不在本次分享中涉及。在我之前的几篇文章中,也阐述过观点。

  目前这方面研究最深入的是之前百度FIS团队的张云龙,他的几篇文章在这里,强烈推荐阅读。

  后记:

  这篇文章是我入职苏宁之后第一次公开分享,目标受众主要是后端出身的技术经理,目的是让这个群体能有更多的前端意识。现在公司的项目基本都有前端模块,但人员专职程度较低,水平也参差不齐。苏宁的战略口号之一是提升用户体验,从产品角度看,用户体验的提升并非是UI做几个图,搞一些花哨效果就可以了,它是一个系统工程,涉及从用户习惯调研、产品设计、前端开发、甚至后端服务等一系列环节,需要从易用度、观感、加载性能、流畅度等各方面共同提升。

  这些东西都需要从全局角度作规划,从源头控制起,否则只能是头疼医头,脚痛医脚。为此,基础技术中心会逐步整合几套适合不同场景的基础前端框架,作为种子项目供今后的技术选型使用。此外,还会从前端开发的各种主题组织一些技术分享,并且逐步形成一套制度化,流程化的培训体系。

  前端技术一般分为前端设计和前端开发,前端设计一般可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括基本的HTML和CSS以及JavaScript/ajax,最新的高级版本HTML5、CSS3,以及SVG等。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

web前端:前端架构那些事儿

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

web前端:前端架构那些事儿

编程学习网:前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,完美的动效设计,给用户带来极高的用户体验。
web前端:前端架构那些事儿

Web前端:前端工程师必须了解的主流前端框架

编程学习网:Web前端工程师的职责是编写网页标准优化代码,并增加交互动态功能,开发Javascript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web开发,致力于通过技术改善用户体验。
Web前端:前端工程师必须了解的主流前端框架

Web前端:Web前端页面设计流程及注意事项

编程学习网:以前会Photoshop和Dreamweaver就可以制作网页,随着网站开发难度加到、开发方式多样,网页制作更接近传统的网站后台开发,网页制作更多被称为Web前端开发。前端技术包括4个部分:前端美工、浏览器兼容、CSS、HTML传统技术与AdobeAIR、GoogleGears,以及概念性较强的交互式设计,艺术性较强的视觉设计等。
Web前端:Web前端页面设计流程及注意事项

web前端:javaScript 一些小技巧

编程学习网:Javascript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
web前端:javaScript 一些小技巧

web前端:自学前端需要掌握哪些知识点?

编程学习网:前端开发是创建Web页面或app等前端界面呈现给用户的过程。前端开发通过HTML,CSS及Javascript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。它从网页制作演变而来,名称上有很明显的时代特征。
web前端:自学前端需要掌握哪些知识点?
HTML5CSSJS2024-04-23

web前端:layui提示框事件

编程学习网:layui,是一款采用自身模块规范编写的前端UI框架,遵循原生Html/CSS/JS的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到API的每一处细节都经过精心雕琢,非常适合界面的快速开发。
web前端:layui提示框事件
HtmlCSSlayui2024-04-23

web前端:jquery的点击事件

编程学习网:jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口具有高效灵活的css选择器,并且可对CSS选择器进行扩展拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE6.0+、FF1.5+、Safari2.0+、Opera9.0+等。
web前端:jquery的点击事件

web前端:vue中的事件修饰符

编程学习网:修饰符是用于限定类型以及类型成员的声明的一种符号。
web前端:vue中的事件修饰符
htmlvueweb2024-04-23

web前端:html网页基本结构

编程学习网:从08年开始,国内网页游戏开始不断兴起,网页游戏(Webgame)又称web游戏,无端网游,简称页游。网页游戏也是需要重视水平的,如音效的筛选、恰到好处的乐曲与音效搭配、以及良好的结构平台等等,有了这些元素,才能做出一个好的网页游戏,同时也会引来更多的浏览人数。网页游戏的出现让中国进入了一个新的网络游戏平台,也进入了一个页游发展的竞争时代。
web前端:html网页基本结构
HTML5html网页2024-04-23

web前端:鼠标悬浮事件

编程学习网:编程语言(programminglanguage),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
web前端:鼠标悬浮事件

web前端:前端 js 页面加载完成事件 - onload,五种写法

编程学习网:window是一个英语单词,其意思是:一,窗,窗户(商店)橱窗二,窗玻璃三,电脑窗口,视见区四气大气窗五,(信封上的)透明纸窗TC函数名window定义活动文本模式窗口Javascript中的window对象表示浏览器中打开的窗口。
web前端:前端 js 页面加载完成事件 - onload,五种写法

Web前端:JavaScript中的构造函数

编程学习网:构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。
Web前端:JavaScript中的构造函数

web前端:JavaScript重构之JavaScript的测试

编程学习网:单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
web前端:JavaScript重构之JavaScript的测试

web前端:jQuery---事件解绑与事件触发

编程学习网:2007年7月,jQuery1.1.3版发布,这次小版本的变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类Javascript库的水平。同年9月,jQuery1.2版发布,它去掉了对XPath选择符的支持,原因是相对于css语法它已经变得多余了。
web前端:jQuery---事件解绑与事件触发
开发jQuerycss2024-04-23

web前端:基于WEB的实时事件通知方案

编程学习网:web技术中最热门的一个流行术语,它的别名叫Comet(彗星)。它是继AJAX之后又一个倍受追捧的Web技术。服务器推送技术与最近的流行与AJAX有着密切的关系。
web前端:基于WEB的实时事件通知方案

web前端:数据结构与算法之绪论

编程学习网:一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。
web前端:数据结构与算法之绪论

web前端:如何给div、p添加onload事件?

编程学习网:body元素是定义文档的主体。body元素包含文档的所有内容(比如文本、超链接、图像、表格和列表等等。)body是用在网页中的一种html标签,标签是用在网页中的一种HTML标签,表示网页的主体部分,也就是用户可以看到的内容,可以包含文本、图片、音频、视频等各种内容!
web前端:如何给div、p添加onload事件?
htmldiv网站2024-04-23

web前端:html data-xx 及 data()注意事项

编程学习网:所谓数据就是描述事物的符号。在我们的日常生活中,数据无所不在。数字、文字、图表、图象、声音等都是数据。人们通过数据来认识世界,交流信息。
web前端:html data-xx 及 data()注意事项
jQuerydatahtml2024-04-23

web前端:常见的浏览器内核有哪些?

编程学习网:内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
web前端:常见的浏览器内核有哪些?

web前端:JavaScript-跨浏览器事件处理程序(EventUtil)

编程学习网:事件对象属于内核对象,它包含一个使用计数,一个用于标识该事件是一个自动重置还是一个人工重置的布尔值,和另一个用于指定该事件处于已通知状态还是未通知状态的布尔值。
web前端:JavaScript-跨浏览器事件处理程序(EventUtil)

编程热搜

  • HTML常用标签超详细整理
    目录HTML概述1.1 什么是HTML1.2 HTML概念HTML常用基础标签标签的分类:常用基本标签HTML概述1.1 什么是HTMLHTML是做网站的、Web开发、互联网生态开发(PC端+移动端+微应用) 目前我们使用的都是HTML5,支持传统的PC端开发,还支持移动端开发还支持微应用开发,从而替换了部分传统的移动
    HTML常用标签超详细整理
  • 一文看懂服务器操作
    web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的。
    一文看懂服务器操作
  • web前端:如何正确学习web前端流程以及如何找工作
    编程学习网:HTML、CSS、Javascript这三个是前端开发中最基本也是最必须的三个技能。前端的开发中,在页面的布局时,HTML将元素进行定义,CSS对展示的元素进行定位,再通过JavaScript实现相应的效果和交互。
    web前端:如何正确学习web前端流程以及如何找工作
  • 完美实现浮动元素横排居中显示
    经常会遇到这样的页面布局:在一排显示几个不同的区域内容,但它们相对于页面是居中对齐的。注意这些区域内容不只是文字,也许还有图片或者其它元素混合而成。一般这样的布局我们很容易想到要用浮动float,但是怎么样居中对齐而又兼容低端浏览器哪?请接着往下看。首先看html
    完美实现浮动元素横排居中显示
  • 共同探讨CSS+DIV布局对建站的影响
    编程学习网:DIV是层叠样式表中的定位技术,全称DIVision,即为划分。有时可以称其为图层。DIV元素是用来为HTML文档内大块的内容提供结构和背景的元素。现在就跟着小编共同来学习一下:共同探讨CSS+DIV布局对建站的影响。
    共同探讨CSS+DIV布局对建站的影响
  • 详解CSS伪元素的妙用单标签之美
    目录:before和::before的区别哪些标签不支持伪元素?利用 after 清除浮动伪元素与css sprites 雪碧图单个颜色实现按钮 hover 、a
    详解CSS伪元素的妙用单标签之美
  • web前端:实现单选框点击label标记中的文字也能选中
    编程学习网:label元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在label元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
    web前端:实现单选框点击label标记中的文字也能选中
  • 为你介绍CSS浮动清除最好的方法
    编程学习网:所谓网站(Website),就是指在网际网路(因特网)上,根据一定的规则,使用HTML等工具制作的用於展示特定内容的相关网页的集合。现在就跟着小编共同来学习一下:为你介绍CSS浮动清除最好的方法。
    为你介绍CSS浮动清除最好的方法
  • 如何提升网页的加载速度?
    编程学习网:相信在使用浏览器去浏览网页的时候,有些时候总会是出现网页加载慢的情况,除了网速的问题的话,更多的时候还是需要进行相关的设置来去提升网页的加载速度,会发现快的速度将会是让人感觉到非常的爽,下面我们来分享一下该如何才能进行优化,最终提升效率。方法是有很多种,在这里就不逐个的来列举出来了,有需要的朋友们可以参考一下。
    如何提升网页的加载速度?
  • web前端:js垃圾回收及内存泄漏
    编程学习网:Javascript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。
    web前端:js垃圾回收及内存泄漏

目录