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
  • Đúng là cái gì các pháp sư cũng nghĩ ra được. awk là một lệnh rất mạnh để xử lý tệp tin, nó có thể đọc, tìm, tổng hợp... dữ liệu văn bản. Đặc biệt là các tệp ghi logs hệ thống thì cứ phải gọi nó bằng... lệnh.

    jgarzik/sqawk đưa cách sử dụng awk lên "tầm cao mới". Áp dụng cú pháp SQL để truy vấn luôn 😆.

    » Xem thêm
  • Telegram chính thức không vào được nữa rồi, nếu công việc của bạn cần phải có Telegram thì hãy thử cách tạo ra một Proxy theo chuẩn MTProxy của Telegam tạo ra nhé. Mình tìm thấy một bài hướng dẫn rất chi tiết về cách làm ở đây. Đại loại là cần một máy chủ rồi gõ vài dòng lệnh là xong rồi 👇

    À, hiện có nhiều bài đăng chia sẻ Proxy miễn phí thì hãy cân nhắc trước khi sử dụng vì tiềm ẩn rủi ro bảo mật lắm đấy.

    How to set up a Telegram Proxy (MTProxy)

    » Xem thêm
  • Quên mất hôm trước có bảo chia sẻ cảm nghĩ cho mọi người khi chuyển sang dùng trình duyệt Safari thì chỉ sau 2 hôm mình đã phải quay trở lại Chrome mọi người ạ. Tại sao?

    Đầu tiên xin phép nêu ra một vài điểm mình thích ở Safari đó là giao diện của nó hết sức đơn giản, đúng nghĩa tập trung vào duyệt web thật sự, tốc độ thì thấy không thua kém gì Chrome. Ngoài ra một tính năng mà mình rất thích đó là cho "bay màu" một số thành phần bạn không thích trên một trang web nào đó. Tính năng đó gọi là Hide Distracting Items.

    Sau đó mình bắt đầu phát hiện ra một số bất cập khi mở Dev Tools - nơi hỗ trợ lập trình viên gỡ lỗi cho trang web. Phải nói là nó hết sức đơn giản. Dường như Safari tạo ra không dành cho gỡ lỗi. Mình mất một hồi loay hoay để tìm cách xem dữ liệu truyền lên qua API như thế nào, hay thậm chí một Object được in ra console.log còn không thể xem được đầy đủ thông tin!?

    Đấy, chỉ riêng khoản đó thôi cũng là lý do để mình quay trở lại với Chrome. Có thể Safari rất tập trung vào quyền riêng tư và bảo mật cho nên họ làm khó các yêu cầu này lên. Bù lại có lẽ nếu duyệt web thông thường, bạn sẽ rất thích Safari đấy!

    » 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

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? 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