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

时间:2016-09-15 15:10:16

标签: javascript ruby-on-rails refactoring

大型Web应用程序倾向于产生大量支持前端和后端功能的库。我想减少依赖项的数量,以提高稳定性和易维护性。我正在寻找一个减少Web应用程序依赖关系的好途径,其中包括以下库:

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

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

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

React 会对jQuery意大利面条代码施加约束,并减少对一些依赖项的需求。

Elm 会更加强调其类型安全的纪律。

ClojureScript 也会通过功能性编程范例强加纪律。

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

最安全的前进方向似乎是从重构开始,逐步引入一种功能语言或库。我将如何重构这个目标?首先重构到普通JS(即删除jQuery)会有用吗?

1 个答案:

答案 0 :(得分:1)

库/依赖

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

然后 Bootstrap 很可能是您的主要CSS驱动程序,但是,它有一些可能使用的JavaScript功能。轮播,日期选择器,下拉,切换其他一些小部件......看看它们是否被使用(可能是),如果没有,摆脱Bootstrap js库。请记住,Bootstrap仍依赖于jQuery。

选择/选择是可选插件。他们的目标最有可能包含在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 是具有一个特定目标的库=>所见即所得/载体。最好保持那些但懒惰的加载听起来很理想。只在需要时才将它们包含在页面上。

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

如果您在<script>标记中包含服务器语言句柄<head>,则可以选择保留特定页面所需的简单脚本引用。不要以内联的20个DOM就绪事件结束,尝试最终只有一个就绪事件来初始化项目所需的一切。

  1. jQuery加上各种插件
  2. 自举
  3. 车把
    • CKEditor 重构延迟加载
    • 选择/选择2 重构为核心库
    • d3 / Raphael 重构延迟加载
    • SlickGrid 重构到核心库
    • Underscore 重构到核心库
  4. 应用程序/自定义JS

    现在棘手的部分开始了。你的JavaScript技能有多好,以前的程序员有多好?如果你发现很多jQuery选择器,很可能很高,它不是采用模块化方法编程的。将每一个代码的和平重构为可配置的东西的艰巨任务就开始了。

    这里的想法是拥有一个与您的库对话的实例或加载器文件。也许自定义函数文件(如果您愿意,可以保存下划线函数)在整个代码中使用。原型或“类”和单身人士完成它。关于重构的nice post如果我可以添加关于如何设置它的链接。然后咕噜/吞咽设置这些日子并不是太花哨。 JS(npm,bower)和CSS(罗盘,更少)的自动化可以随时使用。

    结论

    jQuery很可能是你的主要依赖。所以如果你把它拿出来,你将从头开始。你谈到的所有插件都是页面加载时的额外脂肪。越少越好,但有时候只需重新使用其他功能,如cookie脚本,json支持,polyfill,......这个列表一直在继续。尝试坚持使用一个或两个核心库,并明确区分依赖关系和应用程序代码。

    不要忘记bundle and minify ^^

    快乐的重构!