抽象JavaScript库的最佳方法是什么?

cra*_*ish 8 javascript

什么是抽象出任何给定的JavaScript框架(jQuery,MooTools等)的最佳方法,它位于框架堆栈的底部?从本质上讲,我希望有一种情况,我可以换出库,只对框架的一层进行更改(例如,不对每个模块进行更改),整个过程可能会重新启动并运行.

因此,每个模块都应调用一个框架函数,然后将其路由到库中.

Dan*_*llo 11

您可能想要使用适配器模式之类的东西.创建您自己的界面,公开您将在应用程序中使用的方法,然后为您想要支持的每个工具包(jQuery,MooTools,YUI等)创建一个适配器.然后,您自己的接口将方法调用路由到特定适配器.

如果您要支持新的工具包,那么您所要做的就是编写一个新的适配器,将您自己的接口中的方法转换为特定工具包的方法.

这是Ext JS目前所做的事情.您可以选择在框架的方法调用后面使用哪个适配器(jQuery,YUI等).例如:Ext.getCmp()将使用jQuery.$()何时使用jQuery适配器.但是,它通常不是一个非常简单的一对一映射.

Ext JS开始作为Yahoo UI javascript库的扩展.那时,Ext依赖于YUI的所有低级跨浏览器代码.现在Ext是一个独立的JavaScript库,您可以选择将YUI替换为其他JavaScript库,例如Prototype或jQuery.将低级Ext API映射到其他JavaScript库(或Ext自己的基本库)的源文件称为适配器,它们位于源/适配器子目录中.当您在网站中包含Ext时,您可以选择要使用的适配器.

来自:Ext JS手册:来源概述

  • 只是为了分享我的经历.直接调用mootools getElement($)与sandbox-> adapter-> mootools平均导致0.40ms对0.95ms(在最坏情况下测试;低端诺基亚设备,而Android设备看起来并不真实关心实施).即使执行时间百分比的增加很高,当你自己查看数字时,我们仍然每次调用不到一毫秒,这与框架现在与库无关的事实相比是微不足道的. (2认同)

Nic*_*ver 6

这将是为...库编写一个库,如果你完全关心性能(为什么不是你?)你应该完全采用不同的方法.库之上的另一个抽象层具有非常不同的方法(特别是当您进入实用程序,动画等时)将非常非常低效且耗时.

不开玩笑,在构建(或更重要的是,维护)像这样的库抽象层之前,即使在任何体面的大小项目中,也需要花费更少的时间来移植代码.