一、为什么要写这个
笔者读博期间曾深入参与到科学计算、并行计算的应用中,使用的语言从C、C++过渡到Python,使用Python后笔者对脚本语言的崇拜之情如涛涛江水,首先是环境搭建异常简单,以前在Linux主机上进行C、C++开发,库文件、make、gcc一个都不能少,环境搭建占据了大量宝贵时间,使用Python后,环境搭建零成本,节省了大量的时间;其次是调试非常方便,微小的改动不需要从头重新编译;三是学习成本低,以前用C开发除了语言本身,还需要学makefile、shell 费时费力,使用脚本语言只需要将精力放在业务逻辑上,学习成本极低(我承认这句话有问题,随着了解的深入,我发现还是需要捣鼓这些乱七八糟的东西)。然而无论C还是Python都一个致命的缺陷,就是数据可视化显示的问题,C除了Qt框架几乎没有跨平台的方式,Python虽然有matplot但速度功能都稍显一般,更要命的是他们对客户端的部署环境都有着严苛的要求,需要安装复杂的运行环境,对于一些没有安装运行环境的电脑,无法随时查看服务器端产生的数据。近年来Web应用已被广泛采纳,只要有浏览器就能运行的理念给科学计算中数据检视工作,提供了新的思路。
目前主流科学计算语言能够实现这一想法的只有Python语言,通过Python程序产生数据,然后使用Django、Flask等Web框架将数据传至前端从而实现Web访问。然而不幸的是Python解释器本质是单进程程序,而网络访问又是一个IO密集型操作,很容易造成服务器性能拥塞。下面是一些语言执行速度对比。
可以看出Python的执行效率处于垫底位置。前面也说了脚本语言有脚本语言的优势,有没有一种既是脚本语言又有相对快的速度还能和Web框架相统一的语言呢,答案有:这就是
Node.js
Node.js是一个 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。其设计的目的是为了在任何地方运行 JavaScript。
查了很多Nodejs的教程,其面向对象大多是具备较深的Javascript基础知识的IT从业人员,这其实也很正常,一则本来Javascript就是网页制作的三大语言之一,二则Nodejs其设计最重要的应用也就是统一前后端语言,让熟悉js的前端开发者可以参与到后端业务之中。
但是,对于很多不从事前端业务的人来说,由于本身对Javascrip并不很熟悉,目前的教程显得不够基础也不够全面,更多的是偏向网络层面的应用,对于网络应用之外的教程很碎片化,网上收集效率比较低,想要系统全面的学习费时费力。
当然受制于脚本语言的特点,计算密集型指令我们依然建议使用C/C++来执行,这就要使用一些额外的技术,实现Js中调用C/C++函数。
本文的目的就是和大家一起,从零开始共同研究Node.js在科学计算上的应用。
PS:因为本人很懒加上时间紧迫,很多网络上现有的这里便不再复述!!后面有时间再弄
二、Windows下Node.js环境搭建
1.下载安装包或者预编译二进制文件
2.记得添加 环境变量!
3.记得安装vscode扩展:
三、Linux下Node.js环境搭建
1.下载预编译二进制文件
下载下来大概是这样一个文件:
node-v22.11.0-linux-x64.tar.xz
解压:
fan@fan-virtual-machine:~/Downloads$ tar -xJvf node-v22.11.0-linux-x64.tar.xz
进入解压后文件夹
fan@fan-virtual-machine:~/apps/node-v22.11.0-linux-x64$ ls -la
total 556
drwxr-xr-x 6 fan fan 4096 10月 29 13:49 .
drwxr-xr-x 3 fan fan 4096 12月 17 20:42 ..
drwxr-xr-x 2 fan fan 4096 10月 29 13:49 bin
-rw-r--r-- 1 fan fan 362490 10月 29 13:49 CHANGELOG.md
drwxr-xr-x 3 fan fan 4096 10月 29 13:49 include
drwxr-xr-x 3 fan fan 4096 10月 29 13:49 lib
-rw-r--r-- 1 fan fan 139053 10月 29 13:49 LICENSE
-rw-r--r-- 1 fan fan 40117 10月 29 13:49 README.md
drwxr-xr-x 4 fan fan 4096 10月 29 13:49 share
fan@fan-virtual-machine:~/apps/node-v22.11.0-linux-x64/bin$ ls -la
total 114648
drwxr-xr-x 2 fan fan 4096 10月 29 13:49 .
drwxr-xr-x 6 fan fan 4096 10月 29 13:49 ..
lrwxrwxrwx 1 fan fan 45 10月 29 13:49 corepack -> ../lib/node_modules/corepack/dist/corepack.js
-rwxr-xr-x 1 fan fan 117383456 10月 29 13:49 node
lrwxrwxrwx 1 fan fan 38 10月 29 13:49 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 fan fan 38 10月 29 13:49 npx -> ../lib/node_modules/npm/bin/npx-cli.js
可以看到 node npm npx 都已经存在并且是可执行文件了。
下面只要设置好环境变量让系统能够找到这些文件就行了。
2.设置环境变量
fan@fan-virtual-machine:~$ sudo vim /etc/profile.d/bash_completion.sh
在文件最后把Node路径导出到PATH变量中‘
export PATH=$PATH:/home/fan/apps/node-v22.11.0-linux-x64/bin
重启一下服务器后,打开终端,输入
node -v
如果能显示版本号则说明环境变量设置没问题。
3.设置ssh远程证书访问
略,网上找答案
4.设置vscode远程访问
具体略,记得安装这几个扩展
5.踩坑分享
最后跟大家分享自己踩得一个坑,本人在Ubuntu环境下一开始使用 以下方法安装
sudo apt-get install nodejs npm
然后用npm怎么都不成功,后来才知道原来是 apt 源里面的node 版本和npm版本不匹配导致,目前所有node官方安装包都包含npm,因此没有必要单独从源安装,只需从官方下载相应二进制文件解压即可。
四、其他一些设置
1.包管理器npm
注意设置本地源:
npm config set registry https://registry.npmmirror.com/
关闭代理:
npm config delete proxy
npm config delete https-proxy
2.Node.js 内置模块
- fs模块:提供了文件系统相关的功能,可以进行文件的读写、复制、删除等操作。
- path模块:用于处理文件路径的相关操作,例如获取文件名、扩展名,拼接路径等。
- http模块:用于创建HTTP服务器和客户端,可以处理HTTP请求、响应以及路由等。
- events模块:用于处理事件的模块,可以实现事件的注册、触发和监听等。
- os模块:提供了与操作系统相关的功能,可以获取操作系统的信息,如CPU架构、内存等。
- querystring模块:用于解析和处理URL查询字符串。
- util模块:提供了一些常用的工具函数,例如格式化字符串、对象继承等。
- crypto模块:提供了一系列加密和解密的功能,包括哈希算法、对称加密、非对称加密等。
- child_process模块:用于创建子进程,可以执行外部命令和脚本。