前端使用分子相关库
之前是针对 AF3 做了生物大分子预测,使用了rcsb-molstar;近期遇到新需求,要做分子性质和器件性质预测,使用了 3Dmol.js。
本文对使用的库进行总结。
对比
维度 | rcsb-molstar (Mol*) | RDKit-js | 3Dmol.js |
---|---|---|---|
主要对象 | 蛋白质、核酸、复合物、冷冻电镜密度 | 小分子、药物化学 | 通用小分子/蛋白,体积数据 |
输入格式 | PDB/mmCIF, BinaryCIF, SDF, MOL2, DCD 轨迹 | SMILES→2D/3D | SMILES, SDF, PDB, MOL2, 体积 |
功能亮点 | 结构对齐、轨迹播放、密度图、对称性、实体注释 | 高质量 2D 绘制、化学感知 | 轻量、快速嵌入、支持体积 |
包体大小 | 较大(功能全,按需分包) | ~3 MB | ~1 MB |
典型 URL | https://www.rcsb.org/3d-view/1RB8 | 无官方托管 | 无官方托管 |
是否 standalone | 提供 standalone viewer 可以本地部署 | 可以 standalone HTML | 可以 standalone HTML |
- AF3:rcsb-molstar 是 RCSB PDB 官方基于 Mol*(MolStar) 核心做的一层“定制外壳”,专门用来在 rcsb.org 上展示蛋白质、核酸等大分子结构,在需要展示的页面动态引入。ketcher 使用standalone模式引入,用于分子结构绘制。
- 器件性质:RDKit,3Dmol
如何选择
- 只看小分子 2D/快速 3D → RDKit-js(2D 极清)或 3Dmol.js(3D 轻量)。
- 需要 PDB 大分子 + 对齐 + 轨迹 + 密度 → rcsb-molstar(Mol*)。
- 想离线/内网部署 → 三者都可下载对应 .js + .wasm 本地引用,实现“完全 standalone”;rcsb-molstar 也提供 npm run build 后的 dist 目录一键起静态服务。
React + umi 框架下使用 3Dmol.js 实践
- 在
public/3Dmol
文件下加入3Dmol-min.js
和3Dmol.ui-min.js
两个文件(离线使用速度快); - 在
.umirc.ts
中加入1
2
3
4headScripts: [
{ src: '/3Dmol/3Dmol-min.js'},
{ src: '/3Dmol/3Dmol.ui-min.js'}
] - 使用
官方 demo,实测生产环境有环境,暂时无法渲染。官方下载后渲染,实测出了速度慢,渲染没问题。1
2
3
4
5
6
7
8<div
style={{ height: '400px', width: '400px', position: 'relative' }}
className="viewer_3Dmoljs"
data-pdb="2POR"
data-backgroundcolor="0xffffff"
data-style="stick"
data-ui="true"
></div>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37const Device = () => {
const containerRef = useRef<HTMLDivElement>(null);
const $3Dmol = window.$3Dmol;
useEffect(() => {
const element = containerRef.current;
if (element && $3Dmol) {
let viewer = $3Dmol.createViewer(element, {
backgroundColor: 'white',
});
$3Dmol.download(
'pdb:1MO8',
viewer,
{ multimodel: true, frames: true },
function () {
viewer.setStyle({}, { cartoon: { color: 'spectrum' } });
viewer.render();
},
);
}
}, [$3Dmol]);
return (
<Flex className={styles.mainContainer} vertical flex={1}>
<div
ref={containerRef}
style={{
height: '400px',
width: '400px',
position: 'relative',
border: '1px solid #ccc',
}}
></div>
</Flex>
);
};
standalone
“standalone” 这个词在网页/前端语境里通常表示「一个文件就能跑」,不需要额外后端服务,也不需要把库拆成很多 chunk。
- 把 HTML 保存后直接双击即可在浏览器打开,所有依赖(rdkit.js、3Dmol.js、wasm、css)都是从 CDN 一次性拉取,本地不需要任何服务器或打包工具。
- 如果你想“更 standalone”——离线也能跑,只要把 CDN 资源下载到本地即可:
- 把 换成下载下来的本地文件,如
- 同理,把 3Dmol 的 CDN 链接换成本地 3Dmol-min.js。
最终目录结构可能只有:这样即使断网,浏览器也能正常渲染 2D/3D 结构——这就是“完全 standalone”。1
2
3
4
5index.html
lib/
RDKit_minimal.js
RDKit_minimal.wasm # 如果 RDKit 需要
3Dmol-min.js
附录
:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!