ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Perspective JavaScript 安装指南:模块结构与浏览器 / Node.js 部署方案

Perspective JavaScript 安装指南:模块结构与浏览器 / Node.js 部署方案 Perspective JavaScript 安装指南模块结构与浏览器 / Node.js 部署方案【免费下载链接】perspectiveA data visualization and analytics component, especially well-suited for large and/or streaming datasets.项目地址: https://gitcode.com/GitHub_Trending/pe/perspectivePerspective 是一套面向大规模与流式数据集的数据可视化与分析组件库。其 JavaScript 生态采用核心引擎 可视化外壳 插件渲染器的三层模块化设计允许开发者按需组合。本文将基于官方安装文档结合本仓库的源码与示例系统讲解perspective-dev/client、perspective-dev/viewer以及perspective-dev/viewer-datagrid、perspective-dev/viewer-charts四大核心包的分工、安装命令与浏览器 / Node.js 两种运行环境的接入方式帮助你快速搭建第一个 Perspective 应用。模块化架构总览Perspective 的 JavaScript 模块设计强调灵活性开发者可以只安装自己需要的模块。官方安装文档docs/md/how_to/javascript/installation.md将模块划分为三类数据引擎perspective-dev/client数据引擎库同时以浏览器 ES6 模块与 Node.js 模块两种形态发布提供 WebAssembly、WebWorker浏览器与 ProcessNode.js三种运行时。所有表格Table、视图View与连接Join等数据操作能力都由它承载。从本仓库源码看该包在 rust/perspective-js/package.json 中定义版本号为 5.2.0模块类型为type: module其exports字段同时暴露了浏览器入口perspective.js对应浏览器 ES6 模块与 Node 入口perspective.node.js并额外提供./inline内联 wasm 的构建与./virtual_servers/*虚拟服务器子模块两类特殊入口exports: { .: { node: { import: ./dist/esm/perspective.node.js }, types: ./dist/esm/perspective.browser.d.ts, import: ./dist/esm/perspective.js }, ./node: { ... }, ./inline: { ... }, ./virtual_servers/*: { ... } }这意味着同一个包名在不同环境下会被解析到不同的入口文件import perspective from perspective-dev/client在浏览器与 Node.js 中实际加载的是两套不同的运行时实现。可视化外壳perspective-dev/viewer一个用户可配置的可视化组件Web Component打包发布并将核心数据引擎模块作为其依赖在 rust/perspective-viewer/package.json 的dependencies中可以看到perspective-dev/client: workspace:即安装 viewer 时会自动带上 client。需要特别强调的是perspective-viewer本身只实现了一个调试用的极简渲染器——把当前配置的view()以 CSV 形式打印出来。真正的可视化能力全部来自插件模块插件必须被单独安装并显式导入插件模块perspective-dev/viewer-datagrid与perspective-dev/viewer-chartsperspective-dev/viewer-datagrid基于 HTMLtable的高性能数据网格组件。仓库中 packages/viewer-datagrid/package.json 的包描述为 Perspective datagrid plugin based onregular-table其源码 packages/viewer-datagrid/src/ts 下包含data_listener、event_handlers、model、plugin、style_handlers等目录另有regular_table.css样式文件印证了其基于 HTML table 的虚拟化网格实现。perspective-dev/viewer-charts基于 WebGL 的图表组件集合。仓库中 packages/viewer-charts/package.json 的包描述为 Perspective.js WebGL Plugin其源码 packages/viewer-charts/src/ts 下包含shaders31 个.glsl着色器文件、webgl、charts、axis、map等目录印证了图表渲染走 WebGL 管线。两个插件模块的注册机制相同在perspective-dev/viewer之后导入插件会自动注册自身其导出的渲染器会出现在perspective-viewer界面的plugin插件下拉菜单中。所有插件都是可选的——但正如安装文档所言一个没有任何插件的perspective-viewer会相当无趣。浏览器端安装Perspective 的 WebAssembly 数据引擎与 Node.js 版共用同一个 NPM 包perspective-dev/client而只存在于浏览器端的 Viewer UI没有 Node.js 组件必须单独安装$ npm add perspective-dev/client perspective-dev/viewer如前所述perspective-dev/viewer只提供 UI 框架本身不提供任何可视化。可视化能力来自插件需要继续安装$ npm add perspective-dev/viewer-charts perspective-dev/viewer-datagrid浏览器运行时初始化浏览器端并不能像 Node.js 那样在模块加载时自动完成一切初始化。从 perspective.browser.ts 的源码可以看到浏览器运行时依赖两个显式初始化步骤perspective.init_server(wasmSource)注册支撑worker()的引擎serverWebAssembly 二进制。支持传入单个二进制fetch(perspective-server.wasm)也支持{ wasm32, wasm64 }对象形式注册两种位宽——当宿主支持 Memory64 时优先选用 wasm64可将引擎堆上限从 4GB 提升到 16GB伴随一定的引擎性能开销以 thunk() fetch(...)形式注册的源只有在被选中时才会真正下载未选中的二进制不会被拉取。perspective.init_client(wasm)注册承载 Table/View API 的客户端 WebAssembly 二进制。初始化完成后通过perspective.worker()创建承载引擎的 Web Worker再通过worker.table(...)建表、viewer.load(table)绑定视图。仓库中的 examples/esbuild-example/src/index.js 给出了完整的最小可用示例import perspective from perspective-dev/client; import perspective_viewer from perspective-dev/viewer; import perspective-dev/viewer-datagrid; import perspective-dev/viewer-charts; import SERVER_WASM from perspective-dev/server/dist/wasm/perspective-server.wasm; import CLIENT_WASM from perspective-dev/viewer/dist/wasm/perspective-viewer.wasm; await Promise.all([ perspective.init_server(fetch(SERVER_WASM)), perspective_viewer.init_client(fetch(CLIENT_WASM)), ]); const viewer document.createElement(perspective-viewer); document.body.append(viewer); const worker await perspective.worker(); const buffer await (await fetch(arrow)).arrayBuffer(); const table worker.table(buffer); viewer.load(table);使用 CDN 直接引入免打包如果不想经过打包器也可以走 CDN 方式。perspective-dev/client与perspective-dev/viewer的 package.json 中都配置了unpkg/jsdelivr字段分别指向dist/cdn/perspective.js与dist/cdn/perspective-viewer.js可直接在script typemodule中引入。仓库中的 examples/cdn/index.html 展示了完整用法除了引入三个包的 CDN 构建外还需要link relpreload预加载perspective-server.memory64.wasm、perspective-viewer.wasm以及数据文件并通过perspective.worker()创建 worker、viewer.restore({ table, settings: true })恢复配置。其核心代码如下link relpreload href/node_modules/perspective-dev/server/dist/wasm/perspective-server.memory64.wasm asfetch typeapplication/wasm crossoriginanonymous / link relpreload href/node_modules/perspective-dev/viewer/dist/wasm/perspective-viewer.wasm asfetch typeapplication/wasm crossoriginanonymous / link relstylesheet crossoriginanonymous href/node_modules/perspective-dev/viewer/dist/css/themes.css / script typemodule import /node_modules/perspective-dev/viewer/dist/cdn/perspective-viewer.js; import /node_modules/perspective-dev/viewer-datagrid/dist/cdn/perspective-viewer-datagrid.js; import /node_modules/perspective-dev/viewer-charts/dist/cdn/perspective-viewer-charts.js; import perspective from /node_modules/perspective-dev/client/dist/cdn/perspective.js; const worker await perspective.worker(); const arrow await (await fetch(/node_modules/superstore-arrow/superstore.lz4.arrow)).arrayBuffer(); const viewer document.getElementsByTagName(perspective-viewer)[0]; await worker.table(arrow, { name: superstore }); await viewer.load(worker); await viewer.restore({ table: superstore, settings: true }); /script注意CDN 场景同样需要确保 wasm 文件可以被正确预加载与 fetch并处理好跨域crossorigin设置。Node.js 端安装要在 Node.js 服务端使用 Perspective只需通过 NPM 安装核心引擎包$ npm add perspective-dev/clientNode.js 端不需要安装perspective-dev/viewer它没有 Node.js 组件。perspective-dev/client在 Node 环境下解析到perspective.node.js入口见 rust/perspective-js/package.json 的exports配置。从 perspective.node.ts 的源码看Node 端模块在加载时即通过顶层await同步完成引擎初始化读取并解压perspective-js.wasm、编译perspective-dev/server/dist/wasm/perspective-server.wasm随后直接导出可直接调用的 API包括table(init_data, options)直接在当前进程中创建 Table无需像浏览器那样先建 workerjoin(left, right, on, options)创建只读的 Join 表websocket(url)通过 WebSocket 连接远端 Perspective 服务器worker(worker)通过 MessagePort 与外部进程通信WebSocketServer内置的 WebSocket 服务器类默认监听8080端口同时提供静态文件服务与 WebSocket 升级examples/esbuild-remote/server/index.mjs 即演示了远程多用户部署场景其具体用法可参考 docs/md/how_to/javascript/nodejs_server.mdsystem_info()、get_hosted_table_names()等进程级查询接口。也就是说Node.js 场景下引擎直接运行在服务端进程中Process 运行时适合作为数据服务端向前端浏览器提供数据而浏览器场景则默认将引擎运行在 WebWorker 中避免阻塞主线程。打包器esbuild / Vite / Webpack接入参考浏览器端安装完成后通常还需要一个打包器来处理 NPM 模块与 wasm 资源。仓库提供了多种打包器示例可作为直接可运行的参考模板examples/esbuild-exampleesbuild 最小示例展示了init_server/init_client/worker的完整调用链见上文代码examples/vite-exampleVite 接入示例examples/webpack-exampleWebpack 接入示例examples/react-exampleReact 组件化接入示例对应 docs/md/how_to/javascript/react.md。这些示例的共同点是通过perspective-dev/client的init_server/init_client注册 wasm 资源再调用worker()获得引擎句柄。如果你的项目以file://协议直接打开 HTMLWorker 构造可能受限这一点在 examples/cdn/README.md 中有进一步说明。安装之后的下一步深入理解客户端 / 服务端 / 纯客户端三种部署模型的差异见 docs/md/explanation/client_only.md、docs/md/explanation/client_server.md 与 docs/md/explanation/server_only.md学习数据导入方式JSON / CSV / Arrow 等见 docs/md/how_to/javascript/importing.md了解perspective-viewer组件的配置与事件体系见 docs/md/how_to/javascript/viewer.md 与 docs/md/how_to/javascript/events.md在服务端场景下将数据通过 WebSocket 推送到浏览器见 docs/md/how_to/javascript/nodejs_server.md 与 docs/md/explanation/architecture.md。小结总结一下 Perspective JavaScript 生态的安装要点核心依赖只有两个perspective-dev/client引擎浏览器与 Node 通用与perspective-dev/viewer浏览器 UI 外壳内置 client 依赖可视化全部来自插件perspective-dev/viewer-datagridHTML table 网格与perspective-dev/viewer-chartsWebGL 图表在 viewer 之后导入即可自动注册到plugin下拉菜单浏览器与 Node 共用包名、不同入口浏览器默认走 WebWorker 运行时需显式init_server/init_clientNode.js 走进程内运行时模块加载即完成初始化可直接table()/WebSocketServerwasm 资源需要随应用一并部署无论是打包器方案还是 CDN 方案perspective-server.wasm与perspective-viewer.wasm都必须可被正确加载。【免费下载链接】perspectiveA data visualization and analytics component, especially well-suited for large and/or streaming datasets.项目地址: https://gitcode.com/GitHub_Trending/pe/perspective创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表