簡體   English   中英

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

[英]Parsing User Agents in GO (Golang) - Tobie/ua-parser

我正在嘗試通過GO(Golang)程序流式傳輸(大量)用戶代理,以提取有關這些UA代理的不同信息,例如設備類型,操作系統等。

Tobie Langel的UA Parser Repo中的GO代碼看起來很有希望:

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

我創建了一個簡單的程序,基本上在其中將流功能添加到README頁面上的示例中。 為了比較性能,我用一個使用相似方法和相同regexes.yaml文件的Ruby gem創建了相同類型的簡單程序。

https://github.com/toolmantim/user_agent_parser

在編譯Go程序並測試了兩者之后,Ruby版本的運行速度比GO版本快2-3倍。

據我所知,兩個程序都以類似的方式加載和處理ua代理。

我是GO的新手,我想知道是否有人看到任何主要的優化或修補程序,這些優化或修補程序可以使使用此存儲庫的GO部分的程序運行得更快。

我也很想知道是否有人知道我可以用來解析運行良好的用戶代理的任何其他GO庫。

---測試簡單的程序以比較REGEX VS 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倍,因此我將嘗試使用您的特定應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM