Working measurement spike for Option C: aggregation runs in a server-side DuckDB instead of shipping every row to the browser. Opt-in via ?engine=duck; the default client-side WASM path is untouched. - routes/perspective.js: POST /perspective/init materializes a version's forecast table into a persistent in-process DuckDB (ATTACH postgres, so 535k rows land in ~1.5s without streaming through Node); POST /perspective/sql executes one Perspective-generated statement, with Arrow IPC output for viewport reads. - ui/src/duckServerHandler.js: VirtualServerHandler that delegates SQL generation to Perspective's own GenericSQLVirtualServerModel and POSTs the result to the server. Adapted from @perspective-dev/client's virtual_servers/duckdb.ts — same SQL model, different transport. - Forecast.jsx: DUCK_MODE branch replaces the heavy /data fetch with /perspective/init, opens the hosted table over a message port, and shows a latency overlay. applyDepth routes through viewer.restore() since the SQL server cannot handle view.set_depth(). Preserved for a future faster-load effort. Findings and the reason this is not the shipped path (no interactive tree expand/collapse) are in pf_perspective_options.md on master. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 lines
481 B
JSON
24 lines
481 B
JSON
{
|
|
"name": "pf_app",
|
|
"version": "1.0.0",
|
|
"description": "Pivot Forecast Application",
|
|
"main": "server.js",
|
|
"license": "MIT",
|
|
"scripts": {
|
|
"start": "node server.js",
|
|
"dev": "nodemon server.js",
|
|
"build": "cd ui && npm run build"
|
|
},
|
|
"dependencies": {
|
|
"apache-arrow": "^21.1.0",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.0.0",
|
|
"duckdb": "^1.4.4",
|
|
"express": "^4.18.2",
|
|
"pg": "^8.11.3"
|
|
},
|
|
"devDependencies": {
|
|
"nodemon": "^3.0.0"
|
|
}
|
|
}
|