Skip to content

So sánh node-scp với các thư viện khác ​

Node.js có nhiều thư viện truyền tệp qua SSH rất tốt. Trang này cố gắng công bằng về việc khi nào thư viện nào là lựa chọn tốt hơn. Số liệu được kiểm tra vào tháng 9 năm 2026.

node-scp 1.xssh2-sftp-client 12.xnode-ssh 13.xscp2 0.5
Lượt tải mỗi tuầnkhoảng 25 nghìnkhoảng 3,1 triệukhoảng 450 nghìnkhoảng 13 nghìn
Bản phát hành gần nhất2026202620252016, ngừng bảo trì
SFTPcócócócó
Giao thức SCP (máy chủ không có SFTP)cókhôngkhôngkhông, dù tên là vậy
Tự chọn SFTP / SCPcókhôngkhôngkhông
Chạy lệnh từ xaqua client.sshkhôngcó, tính năng chínhkhông
Thao tác tệp trên máy chủcác thao tác phổ biến trong client.fs, phần còn lại qua client.sftpAPI phong phú nhấtmột vàichỉ mkdir
Truyền thư mục song songcócócókhông
Tiến độ, bộ lọc, AbortSignalđủ cả batiến độ và bộ lọctiến độ theo từng tệp, bộ lọcchỉ có event
Mã lỗi không phụ thuộc giao thứccómột phầnkhôngkhông
Type cho TypeScriptcó sẵngói @types riêngcó sẵnkhông có
ES module và CommonJScả haiCommonJSCommonJSCommonJS
CLI và GitHub Actioncókhôngkhôngkhông

Chọn ssh2-sftp-client khi ​

  • bạn chỉ làm việc với các máy chủ thông thường có SFTP,
  • bạn cần bộ API SFTP rộng của nó (stream tới tệp trên máy chủ, rcopy, ghi nối, xử lý stat mở rộng) cùng nhiều năm chạy thực tế trên production,
  • bạn muốn lựa chọn được dùng rộng rãi nhất.

Chọn node-ssh khi ​

  • chạy lệnh là việc chính, còn sao chép tệp chỉ là việc phụ,
  • bạn muốn một object duy nhất cho execCommand, putFiles và getDirectory.

Chọn node-scp khi ​

  • một số máy đích của bạn là router, thiết bị nhúng, thiết bị mạng hoặc hệ thống tối giản không có SFTP,
  • bạn sao chép nhiều tệp nhỏ và quan tâm đến tốc độ (xem bên dưới),
  • bạn muốn mã lỗi không phụ thuộc giao thức, khả năng hủy và tiến độ cho cả cây thư mục,
  • bạn muốn cùng một công cụ dùng được như thư viện, CLI và GitHub Action,
  • bạn đang dùng scp2 và cần một bản thay thế còn được bảo trì.

Về số liệu benchmark ​

node-scp dẫn trước rất xa khi có nhiều tệp nhỏ:

200 tệp 4 KiB trong 10 thư mục (càng thấp càng tốt)
node-scp (SFTP)
52 ms
node-scp (SCP)
67 ms
node-ssh
484 ms
ssh2-sftp-client
534 ms
Một tệp 16 MiB (càng thấp càng tốt)
node-scp (SCP)
53 ms
node-scp (SFTP)
57 ms
ssh2-sftp-client
94 ms
node-ssh
104 ms

Phần lớn chênh lệch đến từ một thiết lập: node-scp bật TCP_NODELAY cho socket SSH, trong khi các thư viện khác vẫn để thuật toán Nagle bật. Bạn có thể đạt được phần lớn mức cải thiện đó với các thư viện khác bằng cách gọi setNoDelay(true) trên client ssh2 bên dưới của chúng. Với tệp lớn đơn lẻ, các thư viện khá ngang nhau, vì tất cả đều dùng fastPut / fastGet có pipeline của ssh2 cho SFTP.

Benchmark nằm trong bench/transfer.bench.ts. Trước khi rút ra kết luận cho hệ thống của bạn, hãy chạy chúng với chính máy chủ của bạn bằng cách đặt NODE_SCP_BENCH_HOST, NODE_SCP_BENCH_PORT, NODE_SCP_BENCH_USER và NODE_SCP_BENCH_PASSWORD.

Phát hành theo giấy phép MIT.