很抱歉,这个答案非常长,有时似乎有点离题,但请记住,这个问题不是很具体。如果它得到改进,或者变得不那么普遍,那么我很乐意删除多余的部分,但在那之前,请耐心等待。除了我自己的想法和研究之外,这在某种程度上是对这里其他答案的汇编。希望我的胡言乱语至少对回答这个问题有所帮助。
框架的一般提示
框架是一项繁重的工作,所以不要白白浪费这些时间。更聪明地工作,而不是更努力地工作。一般来说,在创建框架时应该记住以下几点:
- 不要重新发明轮子:有很多很棒的框架,如果你创建的框架和另一个框架做的事情完全相同,你就浪费了很多时间。当然,了解另一个库内部发生的事情是使您自己的库变得更好的好方法。引用@ShadowScripter,“知识-> 创新”。但是,不要尝试自己重写 jQuery。:)
- 解决问题:所有好的框架(和程序)都从他们试图解决的问题开始,然后设计一个优雅的解决方案来解决这个问题。因此,不要只是开始编写代码来“创建自定义 UI 框架”,而是想出一个你想要解决的特定问题,或者你想让它变得更容易的东西。jQuery 使选择和操作 DOM 变得更加容易。Modernizr 帮助开发人员识别浏览器支持的功能。了解你的框架的目的会让它更有价值,甚至可能让它有机会变得流行。
- 分叉,不要重写:如果您要解决的问题已经被另一个框架部分解决,那么分叉该框架并对其进行修改以完全满足您的需求。建造他人的作品并不可耻。
- 优化和测试:这很简单,但在您的网站上发布 1.0 版之前,请在每种可能的情况下测试功能的每个部分,以确保它不会在生产中崩溃和烧毁。此外,另一个不费吹灰之力的方法是缩小代码(在测试后)以获得性能优势。
- DRY and KISS:不要重复你自己,保持简单,愚蠢。很不言自明。
- 坚持稳定:(这主要是我个人的观点)除非你试图在 Chrome 31 中创建一个专门针对 HTML5 的框架,否则使用实验性功能和不稳定的代码会使你的框架变慢,与旧浏览器不兼容,并且更难开发和。
- 开源:(我的另一个观点)对于像谷歌这样的大公司来说,投入数千美元来创建框架(例如 AngularJS)需要数年时间,所以让你的源代码公开是一个好主意。拥有一个为您的项目做出贡献的开发人员社区将加快开发速度,并使最终产品更快、无错误、更好。当然,如果你要卖掉它,那就是另一回事了……
有关制作库时的最佳实践的更多信息,请查看以下链接:
框架类型
如上所述,您需要考虑的第一件事是您希望框架提供什么功能。以下是框架/库类型的列表(感谢@prong 提供链接)。有关更全面的列表,请参阅jster,它有 1478 个库,分为 8 个类别,每个类别都有几个子类别。
- DOM(操纵)相关
- GUI相关(小部件库)
- 图形/可视化(Canvas 或 SVG 相关)
- Web 应用程序相关(MVC、MVVM 或其他)
- 纯 Javascript/AJAX
- 模板系统
- 单元测试
- 其他
正如您从链接中看到的那样,每个类别中已经有数十个库和框架,因此没有太多空间可以提供新的东西。话虽如此,我不想让你气馁——谁知道呢,你可以创建下一个引导程序或 jQuery。因此,这里有一些关于每种框架类型的资源。
注意:您不能说任何类型都比其他类型更好,它们只是针对不同的目标而设计的。这就像比较苹果和橘子。
DOM(操作)相关
这些类型的库旨在与网站的 DOM 进行交互、修改和控制。以下是他们所做的一些事情:
- 选择 DOM 中的元素 (
$("div#id .class")
)
- 在 DOM 中添加/删除元素 (
$("div#id .class").remove()
)
- 编辑 DOM 中元素的属性 (
$(div#id .class).height("30px")
)
- 编辑 DOM 中元素的 CSS (
$(div#id .class).css("property","value")
)
- 为 DOM 中发生的各种事件添加侦听器 (
$(div#id .class).click(callback)
)
其中最引人注目的当然是 jQuery,它拥有所有 Javascript 库中最大的用户群之一。然而,它绝不是完美的,如果你的库想要竞争,最好的办法就是让它在 jQuery 失败的领域中表现出色——速度、碎片和“意大利面条”代码。(最后两个并不完全在您的控制范围内,但您可以做一些事情来让用户更容易使用最新版本,并保持他们的代码可维护)
GUI 相关(Widget 库)
我认为这可能是您要创建的框架类型。这些类型的库提供小部件(日期选择器、手风琴、滑块、选项卡等)、交互(拖放、排序等)和效果(显示、隐藏、动画等)。对于这些,人们正在寻找数量——最好的框架有几个很好用的小部件/效果。这是一种“越多越好”的情况,当然,如果它工作正常的话。
图形/可视化(Canvas 或 SVG 相关)
这些库的目的是控制页面上的动画,特别是在 HTML5 Canvas 上。这些具有游戏、交互式图表和其他动画的动画和精灵。同样,成功的图形库有很多很多的精灵/动画。例如 kineticjs 有超过 20 种不同的精灵可用。但是,请确保数量不会影响性能和整体质量。
Web 应用相关(MVC、MVVM 或其他
)控制器提供这两者之间的接口。这称为MVC。虽然它绝不是唯一基于框架的软件模式,但它最近变得非常流行,因为它使开发变得更加容易(这就是Rails如此受欢迎的原因)。
Pure Javascript- AJAX
这应该真的是两类。第一个是 AJAX 库,通常与服务器端库和/或数据库配对(尽管并非总是如此),旨在与服务器建立连接并异步获取数据。第二,“纯 Javascript”旨在使 Javascript 更易于编程,作为一种语言,提供有用的功能和编程结构。
模板系统
这也可能是您要创建的框架类型。这个想法是提供开发人员可以使用的组件。模板框架和小部件框架之间有一条细线( twitter bootstrap,最流行的模板框架之一,跨越了很多)。虽然小部件框架只是提供了一堆可以放入网站的小元素,但模板框架为网站提供了结构(例如响应式列),除了使它看起来更好。
单元测试
这种类型的框架旨在让开发人员测试或系统地确保其代码的正确性。很无聊,但也很实用。
其他
这种类型的框架用于真正特定的目的,并不真正适合任何其他类别。例如, MathQuill设计用于在网页中以交互方式呈现数学。它并不真正适合任何其他类别。然而,这些类型的框架并不是坏的或无用的,它们只是独一无二的。一个完美的例子是Modernizr,一个用于检测浏览器对特性的支持的库。虽然它实际上没有任何直接的竞争对手,不能归入任何其他类别,而且任务非常小,但它运行得非常好,因此非常受欢迎。
更多类型
还有很多其他类型的库。以下是 JSter 将其 1478 个库放入的类别(我没有列出子类别,因为这需要半小时才能复制下来):
- 要点
- 用户界面
- 多媒体
- 图形
- 数据
- 发展
- 实用程序
- 应用