通过最小化依赖重构前端代码



大型web应用程序倾向于积累大量支持前端和后端功能的库。我想减少依赖项的数量,以提高稳定性和易于维护。我正在寻找一个很好的路径来减少依赖的web应用程序,包括库,如:

  • 引导
  • CKEditor
  • 选择/Select2
  • jQuery +各种插件
  • d3/拉斐尔
  • SlickGrid
  • 车把
  • 强调

我正在寻找能够尽可能多地结合这些依赖关系的技术、语言或框架。

以下是我到目前为止所探索的内容:

重构小的依赖关系并删除未使用的部分可以有很长的路要走。

React将对jQuery面条式代码施加纪律,并减少对一些依赖项的需求。

Elm将在类型安全方面更进一步。

ClojureScript还将通过函数式编程范式强加纪律。

除了重构之外,为了与Ruby on Rails后端集成,所有这些潜在的解决方案都会引入一些额外的复杂性。React似乎为当前依赖提供了最多的替代。

最安全的方法似乎是从重构开始,逐步引入函数式语言或库之一。带着这个目标,我该如何重构呢?首先重构为纯JS(即删除jQuery)有用吗?

库/依赖项

通常,当我继承一个大型项目进行重构时,首先要做的是确定核心依赖项,例如,大多数自定义代码使用的主库是什么?从你的列表中,我已经可以告诉下划线jQuery基本上试图做同样的事情。哪一个是最优化和最快的,多年来逐渐趋于平稳。让我们暂时假设Underscore仍然是最快的,您仍然依赖jQuery来遍历等等。你是否愿意包含一个额外的库来获得微速?在我看来,每个页面的额外负载是不值得的。

然后Bootstrap最有可能是你的主要CSS驱动程序,然而,它有一些JavaScript功能可能会被使用。旋转木马,日期选择器,下拉菜单,切换其他一些小部件…看看他们是否被使用(可能是),如果没有,摆脱Bootstrap js库。请记住Bootstrap仍然依赖于jQuery。

selected/select是可选插件。他们的目标很可能在Bootstrap/jQuery中被涵盖。试着重构它们。

Slickgrid也是一个网格系统。与Bootstrap网格相比,它有什么好处?听起来他们重构了Bootstrap。如果使用它,重构到一个引导网格,以增加团队的共同知识。

车把用于模板。如果你使用逻辑运算符,它是有用的,否则你可以很容易地找到一个小的替代函数。

function renderTemplate(obj, template) {
    var tempKey, reg, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            tempKey = String("{{" + key + "}}");
            reg = new RegExp(tempKey, "g");
            template = template.replace(reg, obj[key]);
        }
    }
    return template;
}

CKEditor/Raphael是具有一个特定目标的库=> wysiwyg/vector。最好保持这些,但懒惰加载听起来很理想。只有在需要的时候才包含在页面上。

// after the additional library was loaded ...
cacheObj1.on('focus', this.initCKE);
cacheObj2.on('click', this.initVector);

如果您的服务器语言处理<script>包含到<head>标记中,您可以选择保留特定页面所需的简单脚本引用。不要用20个DOM ready内联事件结束,试着只用一个ready事件来初始化项目所需的一切。

  1. jQuery +各种插件
  2. 引导
  3. 车把
    • CKEditor重构为延迟加载
    • selected/Select2 refactor to core lib
    • d3/Raphael重构为延迟加载
    • SlickGrid refactor to core lib
    • 下划线重构为core lib
<标题>应用程序/定制JS h1> 在棘手的部分开始了。你的JavaScript技能有多好,之前的程序员怎么样?如果您发现到处都是jQuery选择器,那么很有可能它不是用模块化方法编程的。将每一段代码重构为可配置代码的艰巨任务开始了。

这里的想法是有一个实例或加载器文件与您的库对话。也许是在整个代码中使用的自定义函数文件(如果您愿意,可以保存下划线函数)。原型或"类"和单例来完成它。一篇关于重构的好文章,如果我可以添加如何设置的链接。现在,咕哝/吞咽设置并不是什么太花哨的东西。JS(npm, wer)和CSS(compass, less)的自动化可以在飞行中讨论。

结论

jQuery很可能是你的主要依赖项。所以如果你把它拿出来,你将从头开始。你说的所有插件都是页面加载上的额外脂肪。越少越好,但有时重用其他功能是值得的,比如cookie脚本、json支持、polyfills……这样的例子不胜枚举。尽量使用一个或两个核心库,并清楚地分离依赖项和应用程序代码。

别忘了压缩^^

重构快乐!

最新更新