返回

以独特视角探索敏感词汇检测组件开发的组件化之旅

前端

记一次编写检测敏感词汇组件的经历

写在前面

在做商户端敏感词检测的过程中,发现了一些问题,特在此总结。本文的行文思路是编写敏感词检测代码,前两个思路未采用组件化的开发思想,后三个思路根据需求变更,采用组件化的思想和mixins混入。

一、初次编写

最初的敏感词检测是直接遍历所有要检测的敏感词,即循环比较当前字段内容是否与敏感词相等,相等则返回true。代码如下:

let search = (rule, value) => {
    if (!rule || rule === '') {
        return false;
    }
    const words = rule.split(',');
    for (let index = 0; index < words.length; index++) {
        if (value.indexOf(words[index]) > -1) {
            return true;
        }
    }
    return false;
};

这种方法存在的问题是:当字段内容特别长,敏感词也比较多时,循环次数就会很多,影响性能。另外,这种方法是直接比较字符串,没有考虑前后缀匹配等复杂情况,所以可能会产生误报。

二、优化方案

为了解决上述问题,可以采用以下优化方案:

  • 使用正则表达式来匹配敏感词,可以大大提高匹配速度。
  • 将敏感词存储在一个对象中,这样就可以快速地查找是否有某个敏感词存在于字段内容中。
  • 使用前后缀匹配来提高匹配的准确性。

经过优化后的代码如下:

let search = (rule, value) => {
    if (!rule || rule === '') {
        return false;
    }
    const words = rule.split(',');
    const reg = new RegExp('(' + words.join('|') + ')', 'g');
    return reg.test(value);
};

三、组件化思想

当需求变更时,我们需要将敏感词检测组件化,以便可以轻松地复用。我们可以将敏感词检测代码封装成一个组件,然后在需要使用时,直接引入这个组件即可。

组件化的思想有很多好处,比如:

  • 可复用性: 组件可以被重复使用,这可以节省开发时间和成本。
  • 可维护性: 组件可以独立维护,这使得代码更容易维护和更新。
  • 可扩展性: 组件可以很容易地扩展,以满足新的需求。

四、Mixins混入

在使用组件化思想开发敏感词检测组件时,我们可以使用Mixins混入来实现组件之间的复用。Mixins是一种将多个组件的功能混合在一起的技术,这样就可以避免代码重复。

例如,我们可以将正则表达式匹配功能提取成一个Mixin,然后在需要使用正则表达式匹配功能的组件中混入这个Mixin。这样,这些组件就可以复用正则表达式匹配功能,而不需要重复编写代码。

五、总结

通过这次编写敏感词检测组件的经历,我学到了很多东西。我了解了如何使用组件化思想和Mixins混入来实现组件的复用,这使我的代码更加简洁和易于维护。我也了解了如何使用正则表达式来匹配敏感词,这提高了匹配的速度和准确性。

我希望这篇文章对您有所帮助。如果您有任何问题,请随时与我联系。