Nút js có khó học không nếu bạn biết javascript?

Trước khi tìm hiểu một công nghệ mới, mọi người luôn có xu hướng tìm hiểu xem nó giải quyết các vấn đề họ đang gặp phải dễ dàng như thế nào. Nó thường giúp hiểu rõ hơn về công nghệ nhưng trong trường hợp của nút, điều này không hoàn toàn đúng. Và lý do chính đáng đằng sau điều tương tự là, hầu hết các tài nguyên học tập cho nút đều dạy về các công nghệ và mô-đun của bên thứ ba mà bạn sử dụng trong nút (những thứ như express trông có vẻ thực sự dễ dàng trên bề mặt) và không hoạt động trong chính nút, những thứ thứ ba này . Nếu tôi tưởng tượng bản thân mình hai năm trước kể từ bây giờ, tôi cũng ở trong tình huống tương tự. Tôi đã không nhận ra rằng mình chỉ đang học rất nhiều thư viện npm chứ không phải bản thân nút cho đến khi ai đó chỉ ra điều đó cho tôi. Tôi đã lùi lại một bước và quyết định tìm hiểu các phần gốc của nút và tôi thực sự rất vui vì mình đã làm được

Bản thân nút rất mạnh, mạnh hơn nhiều người có thể nghĩ nhưng viết nút thô. js (không có bất kỳ phần phụ thuộc nào) có thể hơi quá sức nếu bạn mới bắt đầu. Nhưng đồng thời, nó giúp bạn hiểu thêm về số lượng mô-đun npm phổ biến hoạt động đằng sau hậu trường. Xét cho cùng, các mô-đun của bên thứ ba mà mọi người làm việc trong nút được xây dựng dựa trên các mô-đun nút sẵn có và chính các tính năng đó. Ở phần sau của bài viết này, tôi sẽ đưa ra một số ý tưởng về việc xây dựng trong raw node. js, nhưng trước tiên hãy xem nhanh nút chính xác là gì

Nút trong một Nutshell

Nói một cách đơn giản, Node là môi trường thời gian chạy JavaScript không có hộp cát được viết bằng C++. Hiểu phần C ++ là rất quan trọng vì nó cho chúng ta ý tưởng tốt hơn về cách chúng ta có thể tương tác với HĐH bằng cách sử dụng nút, JavaScript của chính nó không thể tương tác với hệ thống và thực hiện những việc như mở và nghe trên các cổng, sử dụng Hệ thống tệp và một . Đó là môi trường thời gian chạy, đó là Node giải quyết vấn đề này cho JavaScript, vì C ++ thực sự hỗ trợ các tính năng này, nó cũng hiển thị các API này cho JavaScript mà nó đang chạy. JavaScript trong nút được giải thích và biên dịch nhanh chóng với sự tối ưu hóa cần thiết bởi v8 (về cơ bản là một công cụ JavaScript do Google phát triển) để làm cho nó chạy nhanh và do đó nút tốc độ được biết đến với

Node được xây dựng với ý tưởng tạo ra công nghệ tối ưu phía máy chủ, rõ ràng, nó không hoàn toàn giống nhau nhưng điều đó không thay đổi thực tế rằng công cụ chúng ta có ngày nay có lẽ là công cụ tốt nhất từng có.

Xây dựng các ứng dụng trong Node thô

Nút vận chuyển với một loạt các mô-đun thực sự hữu ích mà bạn có thể tạo nên điều kỳ diệu. Các thư viện và khung phổ biến nhất trên npm thường là một trình bao bọc xung quanh các mô-đun sẵn có này và do đó, việc tìm hiểu hệ sinh thái nút thô cho chúng ta ý tưởng tốt hơn về cách các mô-đun khác hoạt động. Chúng ta hãy xem xét một vài trong số chúng là một phần thiết yếu của hệ sinh thái nút, thực sự mạnh mẽ nhưng thường bị bỏ qua

mô-đun mạng

Có lẽ là mô-đun bí mật nhất trong nút, mọi người hiếm khi nói về mô-đun mạng ngay cả khi họ biết rất nhiều về một số triển khai của nó. Cá nhân tôi chưa tìm thấy bất kỳ tài nguyên đọc tốt nào về tài nguyên này, hãy cho tôi biết nếu bạn biết về bất kỳ tài nguyên nào. Nó có thể được sử dụng để tạo một máy chủ TCP cơ bản, chính xác ý tôi muốn nói ở đây là một khái niệm tương đối lớn hơn trong mạng, vì vậy hãy để dành nó cho một ngày khác trong một số bài viết. Làm việc trực tiếp với mô-đun mạng có thể thực sự khó hiểu vì nó bao gồm việc viết những thứ như phần đầu và phần phản hồi thô, đó là lý do tại sao bạn thường muốn sử dụng triển khai cấp cao hơn giống như mô-đun HTTP. Hãy để tôi làm cho cuộc sống của bạn dễ dàng hơn bằng cách chỉ ra cách hoạt động của mô-đun mạng

Đây là máy chủ nhỏ đơn giản của chúng tôi, tất cả những gì nó làm là gửi tin nhắn đến tất cả các máy khách được kết nối cứ sau 5 giây. Hãy nhanh chóng kiểm tra xem máy chủ này có hoạt động không

Và đúng như vậy, hãy chia nhỏ những gì đang xảy ra bên trong tệp đó. Chúng tôi đang nhập chức năng createServer cho phép chúng tôi tạo máy chủ TCP. Máy chủ lắng nghe một vài sự kiện, sự kiện quan trọng duy nhất là kết nối máy khách và máy chủ bắt đầu, khi máy khách kết nối, nó sẽ đẩy đối tượng máy khách đề cập đến kết nối hiện tại tới một loạt máy khách được kết nối và chờ thêm kết nối. Khi máy chủ bắt đầu lắng nghe trên cổng đã chỉ định, nó sẽ kiểm tra mảng của các máy khách được kết nối cứ sau 5 giây, gửi một tin nhắn tới tất cả các máy khách được kết nối nếu có bất kỳ

Mô-đun HTTP

Mô-đun HTTP trong Node giống như linh hồn của nút. Nhiều thư viện npm phổ biến như Express và Hapi được xây dựng trên mô-đun HTTP, nó thường được coi là khó làm việc với các mô-đun HTTP nhưng thực tế không phải vậy. Nó chỉ chiếm tương đối nhiều dòng mã hơn để thiết lập nếu bạn so sánh nó với các khung MVC khác trong nút. Nếu bạn chưa bao giờ nhìn thấy hoặc xây dựng một máy chủ với mô-đun HTTP, hãy để tôi giúp bạn điều tương tự. )

Và đó là máy chủ nhỏ của chúng tôi với mô-đun HTTP. Ý tưởng ở đây là đợi yêu cầu đến máy chủ và sau khi luồng yêu cầu kết thúc, định tuyến yêu cầu đến trình xử lý tuyến theo yêu cầu hoặc trình xử lý 404. Tôi đã cố gắng sao chép khá nhiều thứ từ cách thức hoạt động của express nhưng đó là tất cả về nó. Một số điểm đáng chú ý là cách nội dung yêu cầu là một luồng có thể đọc được và nói chung, dữ liệu được truyền theo khối tùy thuộc vào kích thước, đối với yêu cầu HTTP có kích thước nhỏ, điều đó không đáng chú ý nhưng bạn có thể quan sát tương tự nếu bạn tăng kích thước của

Lưu ý — bạn có thể đặt các tiêu đề trên đối tượng yêu cầu bằng cách sử dụng phương thức setHeader của đối tượng yêu cầu nhưng tôi đã làm theo cách khác để đơn giản hóa.
Sự thật thú vị — Mô-đun HTTP mà chúng ta vừa nói đến được xây dựng dựa trên mô-đun mạng tới phản hồi HTTP của máy chủ qua TCP đơn giản.

chủ đề công nhân

Worker thread trong Node giống như web worker trong trình duyệt, chúng cho phép tạo ra một thread thực thi JavaScript khác song song với main thread. Nó đặc biệt hữu ích khi chúng ta ở trong tình huống chạy một khối mã có thể chặn việc thực thi luồng chính (những thứ bao gồm các tác vụ sử dụng nhiều CPU). Nó thực sự dễ dàng và tạo ra một worker thread và làm việc với cùng một. Luồng công nhân và luồng chính giao tiếp qua kênh thông báo nơi công nhân và luồng chính có thể gửi và nhận tin nhắn từ bên kia. Và điều này thực sự không khó để triển khai trong mã, hầu hết thời gian bạn chỉ gửi và trả lời tin nhắn qua lại và giết nhân viên khi hoàn thành

Đây là công nhân đơn giản nhất mà bạn có thể làm cho ý tưởng vẫn giữ nguyên ngay cả khi xây dựng thứ gì đó thực sự phức tạp với các luồng công nhân. Và như mọi khi, bạn nên kiểm tra tài liệu về các thuộc tính và phương thức khác trên worker

Mô-đun khẳng định

Bạn có thể đã tiếp xúc với thử nghiệm hoặc phát triển TDD trong JavaScript, chắc hẳn đã thấy một bài kiểm tra đơn vị ở đâu đó nếu không tự viết. Nhưng bạn có biết nút đi kèm với thư viện xác nhận khi bạn có thể sử dụng để thử nghiệm không? . Nó cung cấp rất nhiều phương pháp hữu ích, nhiều hơn những gì tôi đã sử dụng ít nhất. Hãy để tôi đặt một số mã để bạn có thể tự mình xem nó hoạt động như thế nào

Đây là những chức năng tôi chủ yếu sử dụng nhưng thực sự còn rất nhiều chức năng khác ngoài đó và tôi thực sự khuyên bạn nên đọc một số biểu mẫu trên trang tài liệu nếu bạn quan tâm

Lưu ý — bạn nên sử dụng các khối bắt trong khi làm việc với các mô-đun xác nhận vì nếu bạn có nhiều xác nhận trong một tệp, quá trình thực thi sẽ dừng lại với xác nhận đầu tiên không thành công

Đó là điều gì đó về các mô-đun nhưng có một vài lớp và đối tượng mà cá nhân tôi nghĩ là quan trọng đối với việc học hệ sinh thái nút nói chung, chúng bao gồm

đối tượng đệm

Bộ đệm thường đại diện cho một phần của bộ nhớ lưu trữ một số dữ liệu nói chung. Trong nút, bộ đệm là một đối tượng toàn cầu đặc biệt trong nút được sử dụng dữ liệu thô trỏ đến cấp phát bộ nhớ bên ngoài heap v8, được sử dụng nhiều trong các luồng TCP và bất kỳ thứ gì bao gồm tương tác trực tiếp với hệ điều hành nói chung. Bạn có thể nhận thấy cách sử dụng tương tự trong ví dụ máy chủ HTTP nơi chúng tôi chuyển đổi các đối tượng nội dung yêu cầu đến thành chuỗi bằng phương thức toString, dữ liệu ban đầu là bộ đệm. Bộ đệm được sử dụng rộng rãi trong nút và do đó, thật tốt nếu bạn đã quen với việc làm việc với bộ đệm

lớp truyền phát

Các luồng trong nút nói chung giống như âm thanh. Luồng liên tục của một thứ gì đó và trong trường hợp này, đó là luồng khối dữ liệu thường thuộc loại Bộ đệm. Các luồng được sử dụng nhiều khi ở trong nút khi làm việc với các yêu cầu mạng và hệ thống tệp

Lớp EventEmitter

Ý tưởng về nút không đồng bộ. js thường bao quanh khái niệm sự kiện trong đó. Lớp EventEmitter giúp tạo các đối tượng xung quanh có thể phát ra một sự kiện thường chỉ định sự thay đổi trạng thái của đối tượng, Nó được sử dụng bởi rất nhiều mô-đun trong nút cho cùng một. Ý tưởng ở đây là cách hoạt động của mẫu gọi lại không đồng bộ trong nút. js. Bạn có thể đính kèm các chức năng để nghe và làm việc theo một sự kiện cụ thể do phiên bản của bạn phát ra

Phù. Đó là một số thông tin khá. Mục đích của bài viết này là để giới thiệu mức độ hiệu quả của Node đơn giản và không có nghĩa là tôi muốn nói rằng các mô-đun của bên thứ ba khiến bạn trở thành một nhà phát triển tồi, nhưng tốt hơn hết là bạn nên hiểu mọi thứ ở cấp độ thấp hơn, đặc biệt nếu bạn là một nhà phát triển chuyên nghiệp. . Hy vọng bạn đã học được điều gì đó mới hôm nay 😀

Rất thích bài viết này?

Node JS có dễ hơn JavaScript không?

Kết quả là viết JavaScript cực kỳ dễ dàng và bất kỳ môi trường làm việc nào cũng tương tự như một trình duyệt hoàn chỉnh. Nút. Mặt khác, js chỉ kích hoạt động cơ V8 . Mặt khác, mã JavaScript được viết có thể chạy trong mọi ngữ cảnh, bất kể động cơ V8 có được hỗ trợ hay không.

Node có khó hơn JavaScript không?

Nút. js cung cấp khả năng viết mã nhanh chóng và dễ dàng nhờ cú pháp đơn giản và mã được giải thích. Nhìn chung, rất dễ nắm bắt, đặc biệt đối với các nhà phát triển có kỹ năng về JavaScript . Mặt khác, Java có đường cong học tập dốc hơn một chút vì nó có một hệ sinh thái rất rộng.