5 điều Ryan Dahl chia sẻ rằng anh cảm thấy "hối hận" vì đã làm với Node.js

5 điều Ryan Dahl chia sẻ rằng anh cảm thấy "hối hận" vì đã làm với Node.js

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Mình mới tìm thấy một công cụ trích xuất nội dung từ image, pdf, docx, xlsx, pptx... sang dạng text, markdown, hay là json... Nói chung là nó hỗ trợ kha khá đầu vào và đầu ra. Lấy được nội dung ra rồi thì muốn làm gì thì làm, đặc biệt là bỏ vào trong các mô hình ngôn ngữ lớn để làm nguồn dữ liệu gì còn gì bằng 😁

    Công cụ tên là Docling, viết bằng python. Có thể nhúng vào trong mã hoặc dùng CLI đều được. Mình đã thử với dạng ảnh và pdf. Nhìn chung thì pdf vẫn cho kết quả tốt hơn. Ảnh thì hên xui 😅. Nó còn cho lựa chọn cả thư viện OCR á. Cái nào phù hợp hơn thì chọn.

    Quá trình cài thì phát sinh mấy lỗi. Mọi người nhớ dùng python 3.9 -> 3.12. Nếu bị lỗi ModuleNotFoundError: No module named '_lzma' thì thử làm theo hướng dẫn này xem giải quyết được không nhé ModuleNotFoundError: No module named '_lzma'

    » Xem thêm
  • Giá như mình biết đến kho lưu trữ này sớm hơn. github/opensource.guide là nơi hướng dẫn mọi người tất tần tật về Open Source. Từ làm thế nào để đóng góp mã, làm thế nào để bắt đầu một dự án mã nguồn mở của riêng, cho đến những kiến thức mà bất kỳ ai cũng nên biết khi mới bước chân vào 🤓

    Đặc biệt hàng này chính chủ từ Github luôn á.

    » Xem thêm
  • Hôm trước mới nhắc đến dokploy.com thì hôm nay lại có tiếp coolify.io - cũng là một dự án mã nguồn mở có khả năng thay thế Heroku/Netlify/Vercel. Theo như mình đọc thì Coolify hoạt động dựa trên triển khai Docker, nhờ đó mà nó có thể chạy được hầu hết các ứng dụng. Coolify cung cấp giao diện và tính năng để việc triển khai ứng dụng trở nên đơn giản và dễ dàng hơn.

    Có khi nào đây sẽ là xu hướng triển khai ứng dụng trong tương lai không? 🤔

    » Xem thêm

Vấn đề

Node.js được giới thiệu lần đầu tiên bởi Ryan Dahl vào năm 2009. Và 9 năm sau đó cũng là Ryan Dahl nhưng lần này anh mang đến một nền tảng khác với tên gọi là Deno. Giống như Node, Deno cung cấp một môi trường chạy Javascript trên máy chủ cực kì mạnh mẽ. Trong một video từ năm 2018, Ryan Dahl đã có một bài thuyết trình về "10 điều tôi tiếc nuối về Node.js" ngay trước khi anh công bố Deno.

Vậy tại sao Deno lại ra đời nếu như Node.js đã đủ tốt? Bài viết ngày hôm nay tôi xin phép được trích ra 5 điều mà Ryan Dahl hối hận khi đã làm/không làm với Node.js.

NPM và package.json

NPM & package.json

Trải qua nhiều thăng trầm thì Node.js và npm là bộ đôi luôn đi cùng nhau, npm được mệnh danh là kho lưu trữ những phụ thuộc "depency" cho node. Npm là một kho lưu trữ tập trung và bị kiểm soát.

Chính vì tập trung nên npm nhiều lần trở thành mục tiêu cho các cuộc tấn công nhằm vào các gói để gắn mã độc. Như vụ Popular NPM Package Hijacked to Publish Crypto-mining Malware hay các vụ tấn công nhằm xoá dữ liệu người dùng như Dev Sabotages Popular NPM Package to Protest Russian Invasion.

Npm đã phát minh ra package.json, đó là một tập nhằm ghi lại những thông tin như các package được sử dụng, thông tin giấy phép, repository, description... và hàng tá những thông tin mà có vẻ không phải tất cả đều cần thiết.

node_modules

node_modules black hole

Đã bao giờ bạn nghe đến việc so sánh node_modules với hố đen vũ trụ? Hay nếu bạn có tầm cỡ 10 dự án Node.js trong máy đồng nghĩa với bạn sẵn sàng có thêm 10 hố đen.

node_modules là thư mục được sinh ra để lưu lại tất cả những package cần dùng trong dự án, nó không sử dụng một thứ gọi là NODE_PATH để lưu trữ tập trung mà sẽ lưu vào mỗi dự án. Chính cha đẻ của Node.js cũng thừa nhận node_modules là một sai lầm không thể nào sửa chữa được và xin lỗi về điều đó.

Promise

Javascript Promise

Node.js đã không gắn bó với Promise ngay từ đầu, bằng chứng là có rất nhiều API trong node vẫn sử dụng callback để xử lý bất đồng bộ. Ngày nay Promise phát huy rất nhiều tác dụng cộng với async/await và điều đó làm cho cha đẻ của Node.js hối hận nhưng khó có thể sửa chữa lại được.

Security

Node.js security

Nếu bạn chạy một ứng dụng Node.js nó sẽ có toàn quyền truy cập vào các file/folder, mạng và các biến môi trường. Rõ ràng điều này có thể gây mất an toàn nếu như vô tình chạy một dự án đã bị dính mã độc, hoặc những kẻ tấn công có thể lợi dụng việc này để khai thác các máy chủ Node.js.

The Build System (GYP)

GYP

Cha đẻ của Node.js đã chia sẻ rằng GYP là một công cụ rất khó để xây dựng nhưng vì ban đầu V8 của Chrome sử dụng GYP, sau đó Chrome đã loại bỏ GYP để lại Node.js là người dùng GYP duy nhất.

Để tạo được những công việc xử lý ngoài Event Loop chúng ta phải trực tiếp thao tác với V8 bằng các dựng các Addon C++, nhiều người đã phàn nàn về điều đó và đề nghị chuyển sang một giải pháp giúp chuyển đổi dễ hơn (Foreign Function Interface (FFI)) thế nhưng thật đáng tiếc rằng anh đã bỏ qua chúng.

Anh cũng chia sẻ thêm anh không thích libuv bởi vì nó dùng autotools!?

Tổng kết

Có những sai lầm có thể sửa chữa nhưng có những sai lầm thì không, bài viết là 5 sai lầm mà cha đẻ của Node.js chia sẻ cho chúng ta biết anh hối hận những gì. Nhưng dù sao thì Node.js cũng đã trưởng thành và có chỗ đứng nhất định trong cộng đồng và doanh nghiệp trên thế giới.

Tài liệu tham khảo:

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (3)

Nội dung bình luận...
Avatar
Thành Đỗ2 năm trước
Có một sự thật là Ryan đã khắc phục tất cả vấn đề trên với Deno. Mà de-no <=> no-de 😁
Trả lời
Avatar
Long Domi2 năm trước
Cái node gyp kia luôn là ác mộng, lúc build lỗi ấy
Trả lời
Avatar
Vũ Mạnh Đức2 năm trước
Node_modules so sánh với black hole hài hước
Trả lời
Bấm hoặc cuộn mạnh để sang bài mới