111 lines
3.2 KiB
Go
111 lines
3.2 KiB
Go
# 性能压测
|
||
|
||
**硬件环境**
|
||
- 处理器:Apple M2
|
||
- 基带:内存:16 GB 类型:LPDDR5
|
||
- 系统类型:MacOS Ventura 版本13.5 (22G74)
|
||
|
||
**压测结果**
|
||
|
||
| 方法 | Go耗时 | Java耗时 | 备注 |
|
||
|---|-------------------|--------------------|------------------|
|
||
| IsSensitive | 267 ns,约 452W QPS | 2724 ns,约 200W QPS | 大约是Java性能的 10 倍 |
|
||
| Replace | 587 ns,约 202W QPS | 2865 ns,约 200W QPS | 大约是Java性能的 4.8 倍 |
|
||
|
||
## 压测代码
|
||
|
||
**Go**
|
||
|
||
```go
|
||
func BenchmarkReplace(b *testing.B) {
|
||
filter := NewFilter(
|
||
StoreOption{Type: StoreMemory},
|
||
FilterOption{Type: FilterDfa},
|
||
)
|
||
|
||
err := filter.Store.LoadDictPath("./text/dict2.txt")
|
||
if err != nil {
|
||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||
return
|
||
}
|
||
|
||
err = filter.Store.AddWord("测试1", "测试2")
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
return
|
||
}
|
||
|
||
sensitiveText := "小明微笑着对毒品销售说,我认为台湾国的人有点意思"
|
||
|
||
b.ResetTimer()
|
||
for i := 0; i < b.N; i++ {
|
||
_ = filter.Replace(sensitiveText, '*')
|
||
}
|
||
}
|
||
```
|
||
|
||
**Java**
|
||
|
||
```java
|
||
package com.github.houbb.sensitive.word.benchmark;
|
||
|
||
import com.github.houbb.heaven.util.util.RandomUtil;
|
||
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
|
||
import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
|
||
import org.junit.Ignore;
|
||
import org.junit.Test;
|
||
|
||
@Ignore
|
||
public class BenchmarkTimesTest {
|
||
|
||
@Test
|
||
public void onlyContainsTest() {
|
||
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
|
||
.enableWordCheck(true)
|
||
.enableNumCheck(false)
|
||
.enableUrlCheck(false)
|
||
.enableEmailCheck(false)
|
||
.ignoreRepeat(false)
|
||
.ignoreCase(false)
|
||
.ignoreNumStyle(false)
|
||
.ignoreChineseStyle(false)
|
||
.ignoreEnglishStyle(false)
|
||
.ignoreWidth(false)
|
||
.init();
|
||
|
||
String randomText = "小明微笑着对毒品销售说,我认为台湾国的人有点意思";
|
||
|
||
long start = System.nanoTime();
|
||
for(int i = 0; i < 2000000; i++) {
|
||
sensitiveWordBs.contains(randomText);
|
||
}
|
||
long end = System.nanoTime();
|
||
System.out.println("------------------ COST: " + (end-start)/2000000);
|
||
}
|
||
|
||
@Test
|
||
public void onlyReplaceTest() {
|
||
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
|
||
.enableWordCheck(true)
|
||
.enableNumCheck(false)
|
||
.enableUrlCheck(false)
|
||
.enableEmailCheck(false)
|
||
.ignoreRepeat(false)
|
||
.ignoreCase(false)
|
||
.ignoreNumStyle(false)
|
||
.ignoreChineseStyle(false)
|
||
.ignoreEnglishStyle(false)
|
||
.ignoreWidth(false)
|
||
.init();
|
||
|
||
String randomText = "小明微笑着对毒品销售说,我认为台湾国的人有点意思";
|
||
|
||
long start = System.nanoTime();
|
||
for(int i = 0; i < 2000000; i++) {
|
||
sensitiveWordBs.replace(randomText);
|
||
}
|
||
long end = System.nanoTime();
|
||
System.out.println("------------------ COST: " + (end-start)/2000000);
|
||
}
|
||
}
|
||
``` |