阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:382086
用户头像

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

关注

评论

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

在数据库中如何查询表的创建时间?

华为云开发者联盟

数据库 日志 视图 GaussDB(DWS) 查找对象

统一缓存帝国 - 实战 Spring Cache

悟空聊架构

缓存 passjava 悟空聊架构 7月日更 Spring Cache

底层技术支撑智慧出行,汽车智能化发展下区块链大放异彩

旺链科技

区块链产业

吹水、面试、进阶齐飞!Github霸榜的阿里分布式设计实录也太香了

Java架构师迁哥

教你给场景添加天空盒,超简单!

ThingJS数字孪生引擎

大数据 大前端 开发 可视化 数字孪生

GNURadio报错Unable to create context(windows10环境)

allu

问题总结

我还是没有忍住,于是乎我开通了lua语言学习专栏!

李阿柯

lua 专栏

什么?C语言也能try...catch!

实力程序员

【工作感悟】2021最值得加入的互联网公司有哪些

欢喜学安卓

android 程序员 面试 移动开发

金九银十面试必备,“全新”突击真题宝典,阿里腾讯字节都稳了

Java 编程 程序员 架构 面试

智邦国际ERP系统31.99版本发布,解锁精准高效协同管理模式!

叶落便知秋

银行业智能运维的探索与实践

云智慧AIOps社区

银行数字化转型 智能运维

DataWorks赋能企业一站式数据开发治理能力

阿里云大数据AI技术

HashMap从入门到精通,原创好文,值得收藏!

wljslmz

Java hashmap java8 HashMap底层原理

网安行业这几个熟悉又陌生的名词,啥帽子都清楚啦?

郑州埃文科技

使用tar 命令进行文件的归档和压缩

学神来啦

云计算 Linux 运维 linux运维

不愧是阿里内部“SpringCloudAlibaba学习笔记”看完直接斩获12家offer

Java 编程 架构 面试 微服务

前端性能优化实践 | 百度APP个人主页优化

百度开发者中心

大前端 百度app

Python 绑定:从 Python 调用 C 或 C++

华为云开发者联盟

c c++ Python 函数 Python 绑定

我删库跑路失败了

程序员鱼皮

Java c++ Python Linux 服务器

腾讯二面:Linux操作系统里一个进程最多可以创建多少个线程?

白亦杨

GitHub星标70K阿里大佬手写的Spring Boot实战手册

Java架构师迁哥

Go 学习笔记之 数组

架构精进之路

Go 语言 7月日更

RTC为何这么火?

anyRTC开发者

音视频 WebRTC RTC 实时通讯

【工作感悟】Android大厂高级面试题灵魂100问

欢喜学安卓

android 程序员 面试 移动开发

华为云薛浩:媒体业务进入全面云化时代,云原生成为必然选择

华为云开发者联盟

云原生 媒体 音视频 华为云

4轮技术面+1轮HR面,成功拿到腾讯40k*16的Offer ,详解面试流程和真题解析

Java 程序员 架构 面试

一位年薪 180 万的蚂蚁金服大佬扔给我的笔记,建议看完

Java架构师迁哥

永续合约交易所开发,虚拟币合约交易系统源码

KDD CUP 2021首届图神经网络大赛放榜,百度飞桨PGL获得2金1银

百度大脑

神经网络 百度

免费分享JDBC与MyBatis的优秀图书

Java入门到架构

Java

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