Web workers
Fetch and parse off the main thread with one option.
One option, one worker
?worker is Vite’s suffix for bundling a module as a worker entry point. The
RPC worker code-splits, so set vite: { worker: { format: 'es' } }. On webpack,
pass the prebuilt @jbrowse/react-linear-genome-view2/esm/makeWorkerInstance
instead. Fetching, parsing and layout move to the worker; rendering stays on the
main thread.
View source — 54 lines
import { SessionPaletteProvider } from '@jbrowse/core/ui/PaletteContext'
import { DisplayUIProvider } from '@jbrowse/display-ui'
import { TrackStack } from '@jbrowse/display-ui/embed'
import { useCreateViewState } from '@jbrowse/react-linear-genome-view2'
import RpcWorker from '@jbrowse/react-linear-genome-view2/esm/rpcWorker?worker'
import { observer } from 'mobx-react'
const RunItInAWorker = observer(function RunItInAWorker() {
const state = useCreateViewState({
makeWorkerInstance: () => new RpcWorker(),
assembly: {
name: 'hg38',
uri: 'https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz',
refNameAliases: {
uri: 'https://jbrowse.org/genomes/GRCh38/hg38_aliases.txt',
},
geneticCodes: { chrM: 2 },
},
tracks: [
{
trackId: 'hg38_phylop',
name: 'phyloP 100-way conservation',
uri: 'https://jbrowse.org/demos/phylop/hg38.phyloP100way.brca1.bw',
displayDefaults: { height: 100, color: '#3a7ca5' },
},
{
trackId: 'hg38_genes',
name: 'RefSeq curated genes',
uri: 'https://jbrowse.org/ucsc/hg38/ncbiRefSeqCurated.gff.gz',
index: 'https://jbrowse.org/ucsc/hg38/ncbiRefSeqCurated.gff.gz.csi',
displayDefaults: { height: 120 },
},
{
trackId: 'na12878_exome',
name: 'NA12878 exome reads',
uri: 'https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/alignments/NA12878/NA12878.alt_bwamem_GRCh38DH.20150826.CEU.exome.cram',
displayDefaults: { height: 150 },
},
],
init: {
loc: 'chr17:43,044,295..43,125,364',
tracks: ['hg38_phylop', 'hg38_genes', 'na12878_exome'],
},
})
return state ? (
<SessionPaletteProvider session={state.session}>
<DisplayUIProvider>
<TrackStack view={state.session.view} />
</DisplayUIProvider>
</SessionPaletteProvider>
) : null
})
export default RunItInAWorker