httpagentparser icon indicating copy to clipboard operation
httpagentparser copied to clipboard

using regex to match detector classes directly as appose to iterating

Open rajatsingla opened this issue 6 years ago • 2 comments

Trying to build a regex, by adding all "look_for", Example:-

if we add all "look_for" of "os"(known_type)

"Windows Phone OS|Windows Phone|Symbian|SymbianOS|CrOS|PlayStation|PLAYSTATION|Windows|Series40|iPhone|iPad|BlackBerry|Macintosh|Linux"

Then with this regex we can jump to respective "detector" class on which we have to run detect as appose to iterating.

some profiling:- With changes

0.00596690177917 // import httpagentparser 

0.000109910964966 // httpagentparser.detect(ua)
         13214 function calls (13037 primitive calls) in 0.006 seconds

without changes

0.00134301185608  // import httpagentparser 

0.000181913375854  // httpagentparser.detect(ua)
         693 function calls in 0.002 seconds

So i am actually making it slower overall

But if u run on in a loop of 100000 with changes

0.00691199302673 // import 
2.00802302361 // loop on httpagentparser.detect(ua)
         3513180 function calls (3513003 primitive calls) in 2.015 seconds

without changes

0.00165581703186 // import 
6.87254285812  //loop on httpagentparser.detect(ua)
         22500469 function calls in 6.874 seconds

There is difference in this case

This idea, i wanted to try out, code is messy but i can clean it a bit if u see potential in it. But agree, regex is always a little tricky and error prone.

rajatsingla avatar Mar 12 '19 20:03 rajatsingla

Thanks @rajatsingla :). Will take a look.

shon avatar Mar 20 '19 12:03 shon

also, https://github.com/ua-parser/uap-python/pull/26

rajatsingla avatar Mar 21 '19 15:03 rajatsingla