Nodejs KeystoneJS 在 Raspberry Pi 上登录太慢的问题

Nodejs KeystoneJS 在 Raspberry Pi 上登录太慢的问题

关于 KeystoneJS,请参见 JsNoder.com

最近我成功地把一个 KeystoneJS 应用装在了一个 Raspberry Pi Model B 上,系统是用的 Raspbian Wheezy 2014-09-09. 速度其实还不错 (超频到 900mhz),如果用户较少的话普通用用没有问题。但就是 login 的时候特慢,要 20~30 秒左右。 试过用本地的 MongoDB 和远程 MongLab 都这样,忒慢。 后来发现是 JavaScript 的 bcrypt 性能问题。换成 c/c++ 的就可以了,登录验证只要 2~3 秒完成,完全可以接受。发现 Node.js 好像至少有两个纯 js 的 bcrypt 包,一个是 bcryptjs, 貌似 Ghost 就是用的这个包,参见这个 博客Ghost Issue #1207。所以如果要在 Raspberry Pi 上使用 Ghost 也得更换 bcrypt 包。另外一个就是 KeystoneJS 使用的 bcrypt-nodejs 。

如何更换:

  1. 先转到 Keystone 的目录
    cd /your/keystoneapp/path
  2. 安装 c/c++ 版的 bcrypt 包 npm install bcrypt
  3. 更换 Keystone 的密码包。打开 sudo nano node_modules/keystone/lib/fieldTypes/password.js
  4. 然后在编辑器里,大概第7行, bcrypt = require(‘bcrypt-nodejs’), 更改为 bcrypt = require(‘bcrypt’), 搞定。这样就可以在 Raspberry Pi 上比较流畅的使用 Keystone 应用了。

JsNoder.com


4 回复

Nodejs KeystoneJS 在 Raspberry Pi 上登录太慢的问题

最近我成功地将一个 KeystoneJS 应用部署到了一个 Raspberry Pi Model B 上,使用的系统是 Raspbian Wheezy 2014-09-09。速度其实还不错(超频到 900mhz),如果用户较少的话,普通使用没有问题。但问题是登录速度非常慢,需要 20 到 30 秒左右。

尝试过使用本地的 MongoDB 和远程的 MongLab 都存在这个问题,速度异常缓慢。

后来我发现,这是由于 JavaScript 的 bcrypt 性能问题。将其替换为 C/C++ 版本的 bcrypt 后,登录验证只需要 2 到 3 秒即可完成,这已经是可以接受的速度了。

如何更换:

  1. 进入 KeystoneJS 应用目录
    打开终端并导航到你的 KeystoneJS 应用目录:

    cd /your/keystoneapp/path
    
  2. 安装 C/C++ 版本的 bcrypt 包
    运行以下命令来安装 C/C++ 版本的 bcrypt 包:

    npm install bcrypt
    
  3. 更换 KeystoneJS 的密码处理包
    编辑 KeystoneJS 中的密码处理文件:

    sudo nano node_modules/keystone/lib/fieldTypes/password.js
    
  4. 修改密码处理文件
    找到文件中大约第7行的以下代码:

    bcrypt = require('bcrypt-nodejs'),
    

    修改为:

    bcrypt = require('bcrypt'),
    

完成上述步骤后,KeystoneJS 应用在 Raspberry Pi 上的登录速度将会显著提升。

希望这些步骤能够帮助你解决登录慢的问题!如果还有其他问题,请随时联系我。

关于 KeystoneJS 的更多信息,请访问 JsNoder.com


通过以上步骤,你可以显著提高 KeystoneJS 在 Raspberry Pi 上的性能,特别是登录速度。如果你有更多问题或需要进一步的帮助,请随时提问!


有道理。bcrypt还真对CPU是个考量。

不过也有人说 bcrypt 慢是防 brute force 破解的

在 Raspberry Pi 上运行 KeystoneJS 时遇到登录慢的问题,通常是由 bcrypt 的性能问题引起的。bcrypt 是一个用于密码哈希的库,而纯 JavaScript 实现的 bcrypt 在低性能设备上(如 Raspberry Pi)运行效率较低。以下是解决这个问题的步骤:

  1. 切换到 C/C++ 实现的 bcrypt 包

    • 首先,进入你的 KeystoneJS 应用目录:
      cd /path/to/your/keystoneapp
      
    • 安装 C/C++ 实现的 bcrypt 包:
      npm uninstall bcrypt-nodejs
      npm install bcrypt
      
  2. 修改 KeystoneJS 的配置以使用新的 bcrypt 包

    • 打开 KeystoneJS 中 password.js 文件,通常位于 /node_modules/keystone/lib/fieldTypes/ 目录下:
      sudo nano node_modules/keystone/lib/fieldTypes/password.js
      
    • 找到大约第 7 行的以下代码:
      bcrypt = require('bcrypt-nodejs'),
      
    • 修改为:
      bcrypt = require('bcrypt'),
      

完成上述步骤后,KeystoneJS 应该会使用更快的 C/C++ 实现的 bcrypt 包来处理密码哈希,从而显著提高登录速度。

示例代码

// 修改前
bcrypt = require('bcrypt-nodejs'),

// 修改后
bcrypt = require('bcrypt'),

通过以上操作,可以显著提升 KeystoneJS 在 Raspberry Pi 上的登录速度。

回到顶部