家乡网站怎么做,想做一个网站平台怎么做,找个男做那个视频网站好,好分销系统平台敏感词性能调优系列
v0.29.0 敏感词性能优化提升 14 倍全过程
v0.29.1 敏感词性能优化之内部类迭代器内部类
v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化
背景
opencc4j
opencc4j 中#xff0c;因…敏感词性能调优系列
v0.29.0 敏感词性能优化提升 14 倍全过程
v0.29.1 敏感词性能优化之内部类迭代器内部类
v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
v0.29.3 敏感词性能优化之繁简体转换 opencc4j 优化
背景
opencc4j
opencc4j 中因为考虑到汉字的复杂性可能存在繁简体的多个对应和一个汉字多个 char 的场景。
所以以前的实现比较复杂 private static char getChar(char c) {ListString mappingList ZhConverterUtil.toSimple(c);if(CollectionUtil.isEmpty(mappingList)) {return c;}return mappingList.get(0).charAt(0);}这里涉及到多余的对象转换。
优化思路
在 opencc4j 中提供简化版本的繁简体实现。
package com.github.houbb.opencc4j.util;import com.github.houbb.opencc4j.model.data.DataInfo;
import com.github.houbb.opencc4j.support.collection.Char2CharMap;
import com.github.houbb.opencc4j.support.data.impl.TSCharData;import java.util.List;
import java.util.Map;/*** 中文转换简化版** since 1.14.0* author 老马啸西风*/
public final class ZhSlimUtil {private ZhSlimUtil(){}private static final Char2CharMap char2CharMap;static {int size 100;TSCharData tsCharData new TSCharData();DataInfo dataInfo tsCharData.data();MapString, ListString dataList dataInfo.getDataMap();// 这里如果有多个只看第一个// 如果超过2个 char直接跳过char2CharMap new Char2CharMap(dataList.size());for(Map.EntryString, ListString entry : dataList.entrySet()) {String key entry.getKey();ListString valueList entry.getValue();char[] keys key.toCharArray();char[] values valueList.get(0).toCharArray();if(keys.length 1 || values.length 1) {continue;}char2CharMap.put(keys[0], values[0]);}}/*** 简化版本* param c 字符* return 对应字符*/public static char toSimple(final char c) {return char2CharMap.get(c, c);}}压测对比
10w 次这个方法性能平均大概提高了 6 倍左右。
小结
底层依赖的库果然还是可以自己修改最方便。
也最方便性能的拓展和优化。
开源地址 https://github.com/houbb/sensitive-word