Skip to content

Conversation

@zikaari
Copy link
Owner

@zikaari zikaari commented Jun 15, 2018

For times when apps use same string multiple times with findNextMatch etc, it is very expensive to run UTF8 encoding over and over.

For such cases, it is now advised to create an instance of OnigString and keep it referenced. Then, pass that OnigString ref to findNextMatch instead of literal strings for better performance.

Following code was run against onigasm@2.0 (before) and current patch (after):

import {
    loadWASM,
    OnigScanner,
    OnigString
} from 'onigasm'


(async () => {
    await loadWASM(require(`onigasm/lib/onigasm.wasm`))

    const str = await (await fetch('node_modules/typescript/lib/typescriptServices.js')).text()

    const onigStr0 = new OnigString(str.repeat(3))
    const onigStr1 = new OnigString(str.repeat(4))

    const scanner = new OnigScanner(['searchTillTheEndButYouWontFindMe'])

    const t0 = performance.now()    
    const m0_1 = scanner.findNextMatchSync(onigStr0)
    const m1_1 = scanner.findNextMatchSync(onigStr1)
    const m0_2 = scanner.findNextMatchSync(onigStr0)
    const m1_2 = scanner.findNextMatchSync(onigStr1)
    const m0_3 = scanner.findNextMatchSync(onigStr0)
    const m1_3 = scanner.findNextMatchSync(onigStr1)

    console.log('Took ', performance.now() - t0, 'ms')
})()

Before (onigasm@2.0)


After (current patch)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants