写点什么

JavaScript 框架的选择标准

  • 2007-12-09
  • 本文字数:1543 字

    阅读完需:约 5 分钟

随着 AJAX 技术日益广泛地被采用,许多开发者和架构师仍然在尝试甚至挣扎于应该采用什么样的最佳方式来评估 JavaScript 框架 / 库。 Brian Raindel 提供了一些意见 ,关于在选择框架的过程中应该考虑的各个方面,总结如下:

  • 项目需求。“这个 Web 站点或者 Web 应用,是否需要 AJAX,健壮的事件处理?是否需要特效库?”框架直接提供的功能的总量,以及使用框架需要的经验同样需要考虑。
  • 对浏览器的支持。虽然大多数框架能够支持大多数浏览器,“……但是通常会有不易察觉的例外——Mac 操作系统上的 Safari 浏览器常有这样的陷阱”。
  • 开发团队对框架的支持力度。有一个核心开发团队来维护的框架是最好的。这样 Bug 报告和问题会有更快的响应速度,而且测试会更加严格,会更好地遵守开发指导方针。
  • 框架的成熟度。“框架的成熟度是最能说明其寿命的指标,同时也是框架的坚实基础。一个成熟的框架不会是 beta 版的……”一个兴旺的社区,以及提供 Subversion 或 CVS 代码库,也是成熟标志。
  • 公开更新和发布的频率。长时间的延迟和臃肿的发行版,都是你在将来得不到框架的有效支持的明确信号。反之,过多的公开版本意味着不稳定,或者项目不够专注。”
  • 文档质量文档是一个重要的区分指标。强健的文档包括 API、书籍、教程和博客,而“只谈论句法的文档是最差劲的”。每个方法和属性的例子也是很有帮助的。
  • 存在一个活跃的社区“有经验的用户是愿意伸出援助之手还是打发你去其他地方寻找帮助?是否有开发者为框架开发扩展或者为核心框架作出贡献?”社区的个性也是判断社区是否可依靠的风向标。
  • 基准测试。基准测试可以帮助我们对于框架的性能方面得到概括的认识。基准测试还说明了框架采用了某些质量保证方面的最佳实践。另外,“……即使是速度上的略微提高,或者软件的尺寸缩小了,都可以视作一种正面的改进。”
  • 框架的可扩展性。“支持插件对于任何 JavaScript 框架来说都绝对是加分的,但是通常开发者仅仅想知道——在核心库中诊断问题所在有多困难?”
  • API 风格。“这是一个重要的问题,但是是个复杂的问题。对于大多数开发者来说,只有在很多项目中使用过几个 JavaScript 框架之后,才会对这个问题有所认识。简洁和连贯性 (chainability) 是两个非常重要的特征,不要忽视。”

在对该文章的一些评论中,有一些很好的意见可以作为选择 JavaScript 库的标准:

  • 是否有充分的功能测试和单元测试?—— Kanjax 的评论
  • 该框架是否有商业化的支持?

有许多评论者肯定了 JQuery,然而 Ian 认为在需要高性能的场景下,使用 JQuery 和 prototype 需要格外注意:

如果你的应用需要高性能,那么你要小心这些 JavaScript 框架。Prototype 和 jQuery 在使用大的数据表和网格的时候会死的很难看。我对我目前正在工作的项目做了大量的基准测试,该项目大量使用 AJAX 技术,并且用在项目核心的大数据表上。

我试验过 jQuery 和 Prototype,它们的性能总是不行。问题在于 document.getElementById() 方法。DOM 的查找操作是非常耗时的。实际上,我们的测试似乎表明 DOM 查找不是通过哈希来完成的。

许多框架会加入你通常用不上的扩展,这些扩展会降低性能。我们的解决方案是研究框架做了什么,然后我们自己编写代码,除去所有的扩展和任何无关紧要的框架支持。

但是对于没有大数据表的小型 Web 页面,Prototype 或者 jQuery 工作得很好,而且易于使用。

其它评论者指出 Mootools 提供了一份对Protoype、JQuery 和Mootools 进行的基准测试

查看英文原文 Selection Criteria for Javascript Frameworks - - - - - -

译者简介: 曹云飞,西安交通大学计算机软件硕士。现就职于 Ethos ,热衷于计算机理论与应用技术的钻研,软件架构与敏捷开发,目前从事 consumer product 方面的工作。参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com

2007-12-09 00:382457
用户头像

发布了 47 篇内容, 共 12.0 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

产品的本质,知道却看不到

Neco.W

产品 产品经理 需求 产品开发

JAVA后端学习路线

敖丙

Java 学习 程序员 Java25周年

分享一份阿里架构师 651 多个技术分支的脑图

奈学教育

大数据

Kafka的生产者优秀架构设计

奈学教育

kafka 分布式

如何更好的交谈(以英语为例)

董一凡

学习 生活

这场大数据+AI Meetup,一次性安排了大数据当下热门话题

Apache Flink

大数据 flink 流计算 实时计算

千万别学编译原理

池建强

编译原理

普通二本,毕业三年,北漂之后,我是怎么成为程序猿的。

why技术

个人成长 程序人生 随笔杂谈 北漂

CSS Tricks网站创始人作序推荐,这本书助你成为Web开发高手

图灵社区

CSS Web 开发 设计思维

一周信创舆情观察(5.25~5.31)

统小信uos

基础软件 操作系统 新基建

女朋友跟我吐槽Java中ArrayList遍历时删除元素的各种姿势

NotFound9

Java 架构 面试 编程语言 后端

一文让你快速上手 Mockito 单元测试框架

mghio

Java spring 单元测试 Mockito

Flink 1.10 SQL、HiveCatalog 与事件时间整合示例

Apache Flink

大数据 flink 流计算 实时计算

Flink Weekly | 每周社区动态更新-20200520

Apache Flink

大数据 flink 流计算 实时计算

奈学教育:Hadoop源码编译全流程分享

奈学教育

2020年6月3日 对象与类

瑞克与莫迪

MyBatis之启动分析(一)

ytao

面试 mybatis

我的个人知识管理方法

lidaobing

个人成长 知识管理 PKM

缓存与存储的一致性策略:从 CPU 到分布式系统

伴鱼技术团队

缓存 系统设计 cpu 系统架构 架构模式

手撕编译原理:汇编语言不会编

贾献华

读懂才会用 : 带你见识 Redis 的 zset

小眼睛聊技术

redis 学习 程序员 架构 redis6.0.0

Docker 容器优雅终止方案

硅基新手村

Docker

浅谈敏捷开发中的设计

czjczk

敏捷开发

计算机超全核心技术知识

苹果看辽宁体育

后端 计算机基础

Java 走过的创新25年

田晓旭

Java25周年

Mobaxterm (安装 、汉化、使用)入门教程

Geek_Offset

入门到放弃:理清前端技术概念

大伟

Java ecmascript 大前端 Node

Shell 文本处理一则

wong

Shell sed grep

吉德热泵烘干机解放阳台,引领生活品质新风尚

infoq小陈

如何挑选一份工作

池建强

求职 找工作

JavaScript框架的选择标准_Java_Alexander Olaru_InfoQ精选文章