Performance =========== #### **NeoGPS** is **40% to 70% faster**. For comparison, the following sentences were parsed by various [Configurations](/doc/Configurations.md) of **NeoGPS**, **TinyGPS** and **TinyGPSPlus** on a 16MHz Arduino Mega2560. ``` $GPGGA,092725.00,4717.11399,N,00833.91590,E,1,8,1.01,499.6,M,48.0,M,,0*5B $GPRMC,083559.00,A,4717.11437,N,00833.91522,E,0.004,77.52,091202,,,A*57 $GPGSV,3,1,10,23,38,230,44,29,71,156,47,07,29,116,41,08,09,081,36*7F $GPGSV,3,2,10,10,07,189,,05,05,220,,09,34,274,42,18,25,309,44*72 $GPGSV,3,3,10,26,82,187,47,28,43,056,46*77 ```
ConfigurationSentenceNeoGPSTinyGPS
Time (% faster)
TinyGPS++
Time (% faster)
Adafrut_GPS
Time (%faster)
MinimalGGA
RMC
329us
335us
- (78%)
- (77%)
- (78%)
- (77%)
DTLGGA
RMC
780us
803us
- (46%)
- (44%)
- (47%)
- (44%)
NominalGGA
RMC
864us
883us
1448us (40%)
1435us (39%)
1473us (41%)
1442us (39%)
1358us (36%)
1535us (42%)
FullGGA
RMC
GSV
908us
899us
2194us
- (37%)
- (37%)
- (-)
1523us (40%)
1560us (42%)
6651us (67%)
#### Why is **NeoGPS** faster? Most libraries use extra buffers to accumulate parts of the sentence so they can be parsed all at once. For example, an extra field buffer may hold on to all the characters between commas. That buffer is then parsed into a single data item, like `heading`. Some libraries even hold on to the *entire* sentence before attempting to parse it. In addition to increasing the RAM requirements, this requires **extra CPU time** to copy the bytes and index through them... again. **NeoGPS** parses each character immediately into the data item. When the delimiting comma is received, the data item has been fully computed *in place* and is marked as valid. Most libraries parse all fields of their selected sentences. Although most people use GPS for obtaining lat/long, some need only time, or even just one pulse-per-second. **NeoGPS** configures each item separately. Disabled items are conditionally compiled, which means they will not use any RAM, program space or CPU time. The characters from those fields are simply skipped; they are never copied into a buffer or processed. While it is significantly faster and smaller than all NMEA parsers, these same improvements also make NeoGPS faster and smaller than _binary_ parsers.