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

Tin ngắn hàng ngày dành cho bạn
  • Diễn biến mới nhất của vụ kiện cái tên JavaScript với Oracle:

    Deno v Oracle Update 3: Fighting the JavaScript Trademark

    Tóm tắt lại Oracle đã nộp đơn bác bỏ yêu cầu của nhóm Deno nhưng cuộc chiến vẫn sẽ tiếp tục để đòi lại công bằng cho cộng đồng những người yêu thích JavaScript và mong muốn phát triển nó.

    » Xem thêm
  • Vậy là mình đã chính thức phát hành trang Cửa hàng trên blog 2coffee.dev rồi đó mọi người 🥳

    Đây đơn giản là các sản phẩm mình đã mua và trải nghiệm thấy tốt, phù hợp với giá tiền, với nhu cầu sử dụng của mình và mong muốn chia sẻ đến các bạn đọc. Mọi người ghé qua xem cho vui nha. Ban đầu chưa có nhiều thời gian để chỉnh sửa nội dung. Mình sẽ cập nhật dần dần nha. Cảm ơn mọi người.

    » Xem thêm
  • Cuối tuần đang ngồi làm cái Cửa hàng cho thư giãn mọi người ạ. Trước mình đã làm một lần rồi cơ mà làm cho có, bán được hẳn 1 cuốn sách 😆

    Giờ làm lại, sẽ đa dạng sản phẩm hơn. Dự là đăng mấy sản phẩm đã mua và dùng rồi kèm theo vài dòng nhận xét cho mọi người tham khảo 🤓

    » 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

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên 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