编写可移植Javascript库的最佳方法是什么?

时间:2009-12-29 13:36:13

标签: javascript frameworks

我的所有项目都包含非常相似的任务,最近我一直在想我应该编写一个库来处理大部分繁重的工作,这样我就可以编写简短易读的代码来与库交互来获取完成的工作。看看其他框架,特别是jQuery& YUI,他们以不同的方式工作。 jQuery似乎主要是扩展&使用全局对象/函数简化DOM,而YUI使用命名空间和模块。我知道这是因为他们有不同的目标作为图书馆,每个都有其优点。

最具体地说,我正在寻找以下问题的答案:

  1. 最好使用名称空间,例如gui.scrollbar.attach(),还是全局方法,例如$(domObj).attachScrollbar()
  2. 最好将单个部分包含为单独的js文件,还是作为单个js文件包含复制/粘贴组件的部分?我知道eBay Shopping API SDK在单独的文件夹中有很多.js文件,这不会对性能造成重大影响吗?
  3. 您是否有任何其他建议可以给想要创建javascript库的人?
  4. 我已将其标记为社区维基,因为我不想冒被关闭的问题 - 我真的在这里寻求建议。

    由于

    修改 我本来应该说我不是在重新发明轮子,我想简化Windows桌面小工具之间的许多常见任务,所以我不需要其他库的跨浏览器兼容性,它们的核心功能也没有。真的适用于我正在做的事情。我试图保持这个问题的一般性,而不是专门针对桌面小工具,所以这个问题对其他人有用。

3 个答案:

答案 0 :(得分:3)

简单回答您的问题:使用现有的库编写库

我有一些用jQuery编写的javascript文件只是为了这个目的。

更具体地说,

  1. 如果您要使用java风格的面向对象,请转到命名空间。我更喜欢jquery编写插件的方式。
  2. 如果您正在编写自己的“工具包”,最好将依赖项(缩小)复制并粘贴到源代码中。这样一来 一个。你避免了你提到的开销 湾你可以防止不必要的依赖从外部蔓延。
  3. 干杯!

答案 1 :(得分:1)

关于你的第一个问题,这两个选项实际上是相同的IMO。而不是像YAHOO或gui这样的全局对象,你有一个像$这样的全局函数。在这两种情况下,您都有一个包含命名空间的全局变量。

答案 2 :(得分:0)

你有没有理由不能使用其中一个库?这似乎是重新发明轮子的情况。这些库已存在多年,已经解决了许多在编写自己的时候肯定会遇到的问题。

就你的一些问题而言:

  1. 这真的是IMO的偏好问题。只要您从全局命名空间中获取功能,这是主要的事情。然而,这种设计选择将推动许多其他选择。
  2. 最好将所有核心功能包含在一个文件中,然后将其余部分分成一些功能所需的文件。您希望保持文件数量不变,但您也不希望用户必须下载许多他们不需要的东西。
  3. 说了这么多,我重申你应该考虑使用其中一个库,除非你有充分的理由不这样做。请记住,您需要在所有旧浏览器以及出现的任何新浏览器中进行测试。 jQuery,YUI,Prototype,Mootools,extJS是一些最受欢迎的