引言:JavaScript 应用变得越来越庞大。这是因为使用JavaScript能做的事情远比我们大多数人所需求的要多得多。我们不能仅因为技术上可行,就去考虑软件系统的扩展问题。为一个不需要扩展的系统增加扩展性是不值得的,尤其对最终用户来说,这只会使系统显得更加笨重。 
本文选自《大型JavaScript应用最佳实践指南》。

  作为JavaScript 开发者和架构师,必须承认并了解影响扩展性的因素。虽然不是所有JavaScript 应用都需要扩展,但总有一部分是需要的。比如,我们很难确认某个系统不需要扩展,不需要为它的可扩展性花费时间和精力。除非我们开发的系统不需要后期维护,否则总会有对增长和成功的预期。 
  从另一方面讲,JavaScript 应用并非天生成熟的可扩展应用,而是逐步积累、进化成的可扩展应用。对于JavaScript 开发人员来说, “可扩展性的影响因素”是一个有效的工具。我们不希望一开始就过度设计,更不希望被早期设计绑住手脚,限制了可扩展性。

对可扩展的需要

 扩展软件是一种基于反应的活动。考虑可扩展性的影响因素可以帮助我们积极地做出准备。在应用后端等系统中,这种“扩展活动”通常是被自动处理的,可能是短暂的访问高峰。例如,激增的用户请求导致负载骤增,这时负载均衡器介入,将负载均匀地分派到后端服务器。在某些极端情况下,系统可能会在需要时自动准备新的后端资源来应对变化,当不再需要时将这些资源自动销毁。 
  但是前端不一样,前端的扩展活动通常发生的时间周期较长,而且更加复杂。JavaScript应用的独特一面在于,浏览器能获得的硬件资源就是它能使用的全部硬件资源,它从后端获取的数据可以很好地按比例增长,但这不是我们需要考虑的。随着软件的不断演进,我们要想成功做点什么,就必须关注“可扩展性的影响因素”。 

  上图自上而下地展示了可扩展性的影响因素。首先是用户提出软件需要实现的功能,接着功能尺寸、与其他功能的关系等因素会直接影响开发团队的构成,沿着箭头自上而下影响相应地增长。

不断增长的用户

  如果构建的应用只服务于一个用户,就没有必要这么大费周章了。基于典型用户的需求来构建的应用将会为更多用户提供服务。所以在应用进化过程中,应该预见到用户的增长。尽管并没有确切的目标用户数量,不过,基于应用自身的特点,仍然可以使用http://www.alexa.com/这类工具作为基准,设定活跃用户数量的目标值。比如,如果我们的应用是任何人都可以访问的,就会希望有大量的注册用户;但如果仅针对个人安装,那么加入系统的用户数量的增长就会比较缓慢。但即使如此,我们还是希望部署数量不断增加,以提升软件的用户总量。 
  与前端界面交互的用户数量是扩展应用最大的影响因素。每增加一个用户都伴随着各种架构层面上指数级的增长。如果自上而下地看,用户决定一切。应用的存在终归是为了服务用户。JavaScript 代码越易于扩展,就越能取悦用户。

添加新功能

  也许能够取悦用户的功能就是用户基数庞大的成功软件最显而易见的附带产物。软件的功能会随着用户数不断增长,尽管新功能显而易见,但还是经常被忽视。明明知道增加新功能不可避免,但我们还是很少思考如何合理地在代码中实现源源不断的新需求。正是缺少这样的思考,阻碍了我们继续发展。 
  这在软件交付初期非常棘手。软件开发商会竭尽全力吸引新的用户,但由于初期阶段能够吸引用户的功能有限,导致收效甚微。没有足够多的成熟特性,没有庞大的开发团队,也没有机会去打破用户习惯。当没有这些限制条件时,比较容易能够实现一些功能让已有或潜在用户感到眼花缭乱。但是我们如何才能在早期决策时迫使自己考虑周全?如何才能在提供更多功能的前提下确保没有限制我们扩展软件的能力? 
  你也许会发现,不管是开发新功能还是增强已有的功能,都是可扩展JavaScript 架构始终需要考虑的问题。我们需要考虑的不仅仅是软件推广文案中罗列的各种功能,还要考虑这些功能的复杂度、各个功能之间的共性以及各个功能有多少“移动部件(MovingParts)”。当自上而下审视JavaScript 架构时,如果用户是第一层级,那么各个功能就是下一个层级。从这个层级开始扩展变得纷繁复杂。 
  使功能变复杂的,并不是某一个单独用户,而是一群需要这个功能的用户。从这个角度讲,我们不得不思考使用软件的用户的特征或者角色,以及哪些功能提供给哪些角色。对这种组织结构的需求在一开始并不明显。直到后期,我们先前的决策使得引入基于角色的特性难以实施时,它才会显现出来。并且,这还取决于我们的软件是如何部署的,有时可能需要支持多种不同的用例。比如,可能几个大机构用户,都有各自的部署方案,并且很可能有各自独特的用户结构上的限制。这是十分具有挑战性的,如果希望做到可扩展,架构就需要支持这些组织结构迥然不同的需求。

雇佣更多的开发者

  实现软件的各种功能需要可靠的JavaScript 开发人员,并且他们应该知道自己在做什么。能有一个这样的开发者团队是非常幸运的事情。团队组建不是自发的,在团队可以开发出优秀代码之前,需要在某种程度上建立起彼此之间的信任和尊重。一旦开始,我们就处于一个良好的状态。再看一下前面提到的自上而下的可扩展性影响因素,我们要开发的功能会直接影响团队的健康。这之间的平衡基本上是无法维持的,但是可以尽量接近。缺少人手但又有太多的功能要实现,这会让团队成员倍感压力。当如期交付毫无希望时,大家就不会努力尝试了。另一方面,如果开发人员过多,要开发的功能有限,就会带来更多的沟通负担,而定义职责又很困难,所以当大家对职责没有共识时,离失败就不远了。 
  相对于拥有太多的开发人员,开发人员不足反而更易于功能的开发。当面临巨大的功能开发压力时,是一个很好的时机来退后想一想:“如果我们有更多的开发者,会与现在有哪些不同呢?”这个问题经常被忽略掉,直接去招更多的开发者。而让大家惊讶的是,招聘到新人后功能的产出并没有立竿见影的效果。这就是为什么我们需要一个没有愚蠢问题、责任分配明确的研发文化。 
  团队组织结构和开发方法并没有定式,开发团队需要有针对性地处理开发中的情况,最大的问题无疑就是功能的数量、规模和复杂度。所以,这些才是我们在建立团队之初,以及团队成长过程用应该考虑的。后一点尤为重要,因为当功能大量增加后,初期的团队结构是无法适应的。 
  鉴于这些扩展影响因素会随着时间推移而改变,我们以架构的角度来调整设计或者修改产品,以应对扩展所面临的挑战。 
若要进一步讨论这些影响扩展的各项因素,深入了解它们并准备一个核对清单,以帮助我们实现可扩展的JavaScript 应用来响应这些事件,可见《大型JavaScript应用最佳实践指南》一书。 
  本文选自《大型JavaScript应用最佳实践指南》,点此链接可在博文视点官网查看此书。 
                    

想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       

转载于:https://www.cnblogs.com/broadview/p/6420410.html

影响JavaScript应用可扩展性因素相关推荐

  1. 影响核心交换机的因素有哪些

    核心交换机选型的主要参数.主要有可扩展性.转发速率.背板带宽.四层交换.系统冗余等参数 交换机包装上面参数 核心交换机应当全部采用模块化结构,必须拥有相当数量的插槽,具有强大的网络扩展能力,可以根据现 ...

  2. 49个影响网站排名的因素(完整版)(转自点石互动)

     49个影响网站排名的因素(完整版) 我自己写的,不知道对大家有没有帮助? 在别人的基础上作了补充和修改,增加到49个因素,应该算是完整版了. 原文地址:49个影响网站排名的因素(完整版) 内部因素 ...

  3. 影响数据库性能的因素

    论坛上的数据库爱好者们,对于数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值 ...

  4. 【控制】影响系统响应的因素

    影响系统响应的因素 输入 ur(t)u_r(t)ur​(t)--规定 r(t)=1(t)r(t)=1(t)r(t)=1(t) 初始条件--规定0初始条件 系统的结构参数--自身特性决定系统动态性能 F ...

  5. mysql中影响数据库性能的因素讲解

    mysql中影响数据库性能的因素讲解 在本篇文章中我们给大家讲述了mysql中影响性能的因素以及相关知识点内容,有兴趣的朋友参考下 关于数据库性能的故事 面试时多多少少会讲到数据库上的事情," ...

  6. 影响个人计算机系统功能的因素,影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外,还有CPU的时钟频率、CPU主内存容量、CPU所能提供的指令集。...

    影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外,还有CPU的时钟频率.CPU主内存容量.CPU所能提供的指令集. 更多相关问题 根据<空气质量恶臭的测定三点比较式臭袋法>(GB ...

  7. 交换机多少钱一个?影响工业交换机价格的因素?

    工业交换机,即应用在工业领域的交换机.它的性能和各个安全指标要比普通(商业)交换机要求更稳定一些.因此,工业交换机的价格要比一般的交换机要稍贵一些.那一般工业交换机多少钱一个呢?是不是每个厂家的交换机 ...

  8. 【转】性能测试,影响 TPS 的一些因素

    首先我们要先了解下TPS的具体含义: TPS(Transaction Per Second):每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位. 下面 ...

  9. 哪些东西影响计算机运行速度,影响电脑运行速度的因素主要的哪些?

    电脑是现在我们生活工作学习的必需品,经常听到伙伴们在说电脑的运行速度慢.那么影响电脑的运行速度的主要因素有哪些呢? 电脑的我们刚买回来的时候不觉得慢,在使用一段时间才觉得电脑运行慢了.这种情况一般都是 ...

最新文章

  1. 2019年的面试经验:Java程序员越来越悲催了!
  2. 获得数据库中表字段的名字.txt
  3. c语言while跳不出来,这个while循环终止了却跳不出来为什么
  4. java569_java如何实现这样一个程序
  5. python open文件被另一个进程打开怎么办,在Windows上,如何打开一个已经被另一个进程打开进行写入的文件?...
  6. checkbox页面全选
  7. 2022 基于SpringBoot/SSM的数据库查询平台
  8. 虚拟机与ubuntu(二):连接访问
  9. figma安装包_Figma软件下载|UI界面设计软件(Figma)下载 v3.0.4 官方版 - 比克尔下载...
  10. sequencer和driver
  11. CSS单行省略和多行省略
  12. 利用python爬取小说诡秘之主
  13. c++: internal compiler error: 已杀死 (program cc1plus)的解决方法
  14. Linux系统的grub.cfg文件损坏修复
  15. awk,gawk调用shell,bash中的变量 笔记221106
  16. 《第一行代码》总结之实战酷欧天气、发布应用(九)
  17. ubuntu终端中文显示问号或乱码解决办法
  18. 大厂音视频职位面试题目--今日头条
  19. 计算机视觉大型攻略 —— SLAM(2) Graph-based SLAM(基于图优化的算法)
  20. 粒子群算法java_基于粒子群算法求解求解TSP问题(JAVA)

热门文章

  1. Topaz Video Enhance AI中文版
  2. 【转】互联网公司都有哪些行业
  3. 《学习之道》第十章总结
  4. 2017-10-29—英语发音的一些技巧总结
  5. 性能测试相关名词解释
  6. Qt探索之路——获取QTextEdit文本内容
  7. JavaSE_NIO_ByteBuffer
  8. Hello World!!
  9. 【线性规划和网络流24题】
  10. 未来软件是什么样呢?数据库篇(转载)