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