Skip to content

Commit 87d1327

Browse files
committed
Use cachedAsyncBuffer from hyparquet
1 parent 1a1ac48 commit 87d1327

File tree

6 files changed

+21
-7
lines changed

6 files changed

+21
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"dependencies": {
2525
"highlight.js": "11.10.0",
2626
"hightable": "0.5.3",
27-
"hyparquet": "1.4.1",
27+
"hyparquet": "1.5.0",
2828
"hyparquet-compressors": "0.1.4"
2929
},
3030
"devDependencies": {

public/build/app.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/worker.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/worker.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/workers/parquetWorker.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { asyncBufferFromUrl, parquetQuery } from 'hyparquet'
1+
import { parquetQuery } from 'hyparquet'
22
import { compressors } from 'hyparquet-compressors'
3+
import { asyncBufferFrom } from './parquetWorkerClient.js'
34

45
self.onmessage = async ({ data }) => {
56
const { metadata, asyncBuffer, rowStart, rowEnd, orderBy } = data
6-
const file = await asyncBufferFromUrl(asyncBuffer.url, asyncBuffer.byteLength)
7+
const file = await asyncBufferFrom(asyncBuffer)
78
try {
89
const result = await parquetQuery({
910
metadata, file, rowStart, rowEnd, orderBy, compressors,

src/workers/parquetWorkerClient.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { FileMetaData } from 'hyparquet'
1+
import { asyncBufferFromUrl, cachedAsyncBuffer, AsyncBuffer, FileMetaData } from 'hyparquet'
22

33
// Serializable constructor for AsyncBuffers
44
export interface AsyncBufferFrom {
@@ -45,3 +45,16 @@ export function parquetQueryWorker({
4545
worker.postMessage({ metadata, asyncBuffer, rowStart, rowEnd, orderBy })
4646
})
4747
}
48+
49+
/**
50+
* Convert AsyncBufferFrom to AsyncBuffer and cache results.
51+
*/
52+
export async function asyncBufferFrom(from: AsyncBufferFrom): Promise<AsyncBuffer> {
53+
const key = JSON.stringify(from)
54+
const cached = cache.get(key)
55+
if (cached) return cached
56+
const asyncBuffer = asyncBufferFromUrl(from.url, from.byteLength)
57+
cache.set(key, asyncBuffer.then(cachedAsyncBuffer))
58+
return asyncBuffer
59+
}
60+
const cache = new Map<string, Promise<AsyncBuffer>>()

0 commit comments

Comments
 (0)