ruby - 在 GO (Golang) 中解析用户代理 - Tobie/ua-parser

标签 ruby regex go user-agent

我正在尝试通过 GO (Golang) 程序流式传输(很多)用户代理,以提取有关这些 ua 代理的不同信息,如设备类型、操作系统等。

Tobie Langel 的 UA Parser Repo 中的 GO 代码看起来很有前途:

https://github.com/tobie/ua-parser/tree/master/go/uaparser

我创建了一个简单的程序,主要是在自述文件页面上的示例中添加了流媒体功能。为了比较性能,我使用 Ruby gem 创建了相同类型的简单程序,该程序使用类似的方法和相同的 regexes.yaml 文件。

https://github.com/toolmantim/user_agent_parser

编译Go程序并测试两者后,Ruby版本的运行速度比GO版本快2-3倍。

据我所知,这两个程序都以类似的方式加载和处理 ua 代理。

我是 GO 的新手,想知道是否有人看到任何重大优化或修复可以使使用此 repo 的 GO 部分的程序运行得更快。

我也很想知道是否有人知道我可以用来解析运行良好的用户代理的任何其他 GO 库。

---测试简单程序以比较 REGEX 与 PCRE LIBS(如以下评论中所建议)

我创建了以下程序,一个使用 PCRE,一个使用标准正则表达式库。但是,PCRE 似乎没有让我的性能得到提升。事实上,PCRE 库似乎有点慢。我是不是以错误的方式处理这个问题?

--使用标准正则表达式库

package main

import (
  "fmt"
  "regexp"
  "strings"
  "bufio"
  "os"
)

func main() {

  var regex = regexp.MustCompile(`Mac`)
  scanner := bufio.NewScanner(os.Stdin)

  for scanner.Scan() {

    line := scanner.Text()
    fields := strings.Split(line, "\t")
    fmt.Println(regex.FindIndex([]byte(fields[0])))

  }

}  

--用PCRE库

package main

import (
  "fmt"
  pcre "github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre"
  "bufio"
  "os"
  "strings"
)

func main() {

  scanner:= bufio.NewScanner(os.Stdin)
  var regex = pcre.MustCompile(`Mac`, 0)

  for scanner.Scan() {

    line := scanner.Text()
    fields := strings.Split(line, "\t")
    fmt.Println(regex.FindIndex([]byte(fields[0]),0))

 }
}  

最佳答案

我会考虑 rubex图书馆。我将 ua-parser 改为使用 rubex,速度提高了 7 倍。该库声称有 10 倍的改进,所以我会在您的特定应用程序中尝试一下。

关于ruby - 在 GO (Golang) 中解析用户代理 - Tobie/ua-parser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133606/

相关文章:

php - 如何拆分一个空格分隔的文件?

go - HyperLedger-Fabric ChainCode 部署 - Base64 错误

go - `switch` 中 `go` 的求值序列

mysql - 在 Rails 项目中映射旧数据库列

ruby - 通过 ruby​​2.0.0 在 Windows 上安装 iconv 时出错

ruby - 猴子在模块内部打补丁以限制其范围

javascript -\z JavaScript 正则表达式中等效的 PCRE 以匹配所有 Markdown 列表项

javascript - 正则表达式:选择其他所有内容

Go:所有 goroutines 都在 sleep - 死锁

ruby-on-rails - 在 Rails Controller 中执行原始 MongoDB 查询