Bản phát hành chính mới nhất của Node.js mang đến nhiều cải tiến đáng kể cho cộng đồng JavaScript, bao gồm công cụ JavaScript được cập nhật, NPM phiên bản 5, API V8, Node.js của Google, async_hooks, trình phân tích cú pháp URL whatwg, bộ đệm an toàn hơn và nhiều hơn nữa. Ở đây chúng tôi sẽ cập nhật cho bạn về các tính năng này và các khía cạnh quan trọng nhất khác của bản phát hành này.
Node.js 8 được phát hành dưới tên mã Carbon, và hiện có sẵn từ Trang web node.js. . Nó sẽ được tích cực làm việc trong 18 tháng nữa (không có tính năng mới nào, chỉ cần sửa lỗi, cải tiến bảo mật và cập nhật NPM), trước khi chuyển sang chế độ bảo trì. Như với các bản phát hành trước đó, trong quá trình phát hành chế độ bảo trì sẽ chỉ nhận được các bản cập nhật bảo mật quan trọng và sửa lỗi.
Thật an toàn khi nói rằng kể từ khi Node.js đã có mặt, đây là một trong những cập nhật lớn nhất mà thời gian chạy đã nhận được - nó sẽ thay đổi cách các tiện ích bổ sung gốc được viết và cũng mang lại sự cải thiện bảo mật và hiệu suất bổ sung.
Risingstack. đã được giúp các công ty thành công với Node.js trong bốn năm với đào tạo, tư vấn hoặc phát triển. Một trong những cuộc đấu tranh lớn nhất mà chúng tôi đã thêm phụ thuộc bản địa vào các dự án.
Trước Node.js 8, nếu các ứng dụng phụ thuộc vào các mô-đun với mã gốc, bất cứ khi nào các phiên bản Node.js mới xuất hiện, với tư cách là một người duy trì ứng dụng, bạn phải biên dịch lại các phụ thuộc của mình. Nếu bạn may mắn, họ đã làm việc lúc đầu.
Quá trình này đã được thực hiện với các nhà bảo trì mô-đun làm việc tuyệt vời được đưa vào làm cho các mô-đun của họ hoạt động trên các phiên bản Node.js không tương thích, chủ yếu với sự trợ giúp của một mô-đun có tên Nan (Node.js trừu tượng).
Quá trình này là xa lý tưởng, vì nhiều công ty không nhận được sự phụ thuộc của họ được cập nhật nếu họ không thể được biên dịch, và nó cũng đặt một khối lượng công việc bổ sung khổng lồ trên các nhà bảo trì mô-đun. Để giải quyết vấn đề này, API Node.js (hoặc N-API) đã được giới thiệu.
API NODE.JS là một trong những cải tiến đáng kể nhất của Node.js 8. Nó mang đến một ABI được xác định rõ (Giao diện nhị phân ứng dụng) với Node.js để tạo ra máy ảo của nó. Điều này có nghĩa là các mô-đun gốc sẽ không chỉ hoạt động với các phiên bản Node.js khác nhau bằng công cụ JavaScript V8 của Google, mà còn với Luân xa của Microsoft.
Hiện tại, N-API nằm trong trạng thái thử nghiệm, có nghĩa là những thay đổi đáng kể có thể xảy ra với cả việc thực hiện và API. Với điều này cho biết, các nhà bảo trì mô-đun bản địa được khuyến khích dùng thử giao diện mới và đưa ra phản hồi.
Nếu bạn là người duy trì mô-đun, bạn có thể phát hành phiên bản N-API của mô-đun của mình song song với phiên bản mô-đun chính của mình. Để làm như vậy, khuyến nghị chính thức là xuất bản phiên bản mô-đun của bạn với thẻ N-API thành NPM.
Để xuất bản phiên bản N-API, bạn phải:
Bằng cách này, bạn đảm bảo rằng phiên bản N-API sẽ không trở thành bản phát hành mới nhất, vì vậy nếu ai đó cài đặt mô-đun của bạn, theo mặc định, họ sẽ nhận được phiên bản Non-API.
Sợi, trình quản lý gói được tạo bởi các kỹ sư của Facebook, đã được phát hành vào tháng 10 năm 2016. Nó đã cố gắng giải quyết một số thiếu sót của khách hàng NPM chính thức, chủ yếu bằng cách trở nên trình diễn và xác định hơn. Hầu hết các sự đổi mới này cũng được đặc trưng trong NPM 5.
Giống như Sợi, NPM 5 đã giới thiệu một cơ chế tệp khóa - bất cứ khi nào bạn đang cài đặt một phụ thuộc mới vào dự án của mình, nó sẽ được thêm tự động không chỉ để Gói.json. , nhưng một tập tin mới gọi là gói-lock.json. cũng.
Bạn có thể hỏi sự khác biệt là gì giữa gói-lock.json. và npm-shrinkwrap.json. , như npm-shinkwrap đã ở NPM kể từ mãi mãi? Câu chuyện dài ngắn, về cơ bản chúng giống nhau, nhưng gói-lock.json. được tự động tạo.
Mục đích của họ là mô tả chính xác những gì NPM cây phụ thuộc phải tạo cho gói của bạn. Nếu bạn có cả hai, npm-shrinkwrap. sẽ được ưu tiên. Dựa trên khuyến nghị của NPM, bạn nên sử dụng npm-shrinkwrap.json. Nếu bạn muốn xuất bản nó, vì vậy người tiêu dùng mô-đun của bạn cũng sẽ sử dụng nó. Mặt khác, bạn nên sử dụng gói-lock.json bên trong - thậm chí đã được đăng ký vào kho lưu trữ.
Nhưng các cải tiến cho NPM 5 chưa dừng lại với việc thêm tệp khóa - với phiên bản mới, tất cả các mô-đun bạn đang cài đặt cũng được lưu tự động và chúng sẽ được thêm cả hai Gói.json. và gói-lock.json. tập tin.
Cách làm việc tập lệnh NPM cũng đã thay đổi một chút. Trước hết, các tập lệnh được cài đặt sẵn hiện chạy trước mọi thứ khác, để chúng có thể sửa đổi thư mục Node_Modules trước khi CLI thực sự đọc nó. Bên cạnh đó, hai kịch bản mới đã được thêm vào - Preck và Postpack. Cả hai đều chạy trên gói NPM và NPM cũng xuất bản, nhưng không phải cài đặt NPM.
Trong trung tâm của Node.js là công cụ JavaScript sẽ giải thích mã JavaScript của bạn, tạo ByteCode từ nó và cho phép ứng dụng của bạn chạy. Với Node.js 8 mới phát hành, điều này cũng được cập nhật.
Với động cơ V8 được cập nhật, các cải tiến hiệu suất chính được giới thiệu - nhưng quan trọng hơn, nó được đảm bảo để có giao diện nhị phân ứng dụng tương thích chuyển tiếp. Điều này có nghĩa là node.js sẽ có thể cập nhật động cơ V8 mà không cần phát hành NODE.JS lớn.
Điều này rất quan trọng, vì các phiên bản mới hơn của động cơ V8 sẽ giới thiệu một đường ống biên dịch mới, sẽ giới thiệu các cải tiến hiệu suất tiếp theo cho Node.js. Bản cập nhật này rất quan trọng vì đó là lý do ngày phát hành Node.js 8 ban đầu đã bị hoãn lại.
Đường ống hiện tại quá phức tạp và giới thiệu các tính năng ngôn ngữ mới thường có nghĩa là chạm nhiều phần của đường ống. Với đường ống mới, nó sẽ trở nên đơn giản hơn rất nhiều.
Đánh lửa, thông dịch viên mới và Turbofan, trình biên dịch tối ưu hóa mới, đã được phát triển trong gần ba năm rưỡi. Họ là nền tảng mà các tính năng ngôn ngữ mới sẽ được xây dựng. Chúng bao gồm trải nghiệm rằng nhóm V8 tại Google thu thập từ việc đo các ứng dụng JavaScript ngoài đời thực.
Để hiểu rõ hơn những gì hook async là, hãy lùi lại một bước và nắm bắt với bộ lưu trữ cục bộ tiếp tục trước. Chúng hoạt động như lưu trữ chủ đề-cục bộ trong lập trình luồng, nhưng trong Node.js, nó sử dụng các cuộc gọi lại để vượt qua bối cảnh.
Hãy tưởng tượng rằng bạn đang viết một ứng dụng tìm nạp một sản phẩm từ cơ sở dữ liệu, sau đó bạn muốn gửi nó trong phản hồi HTML của mình:
Const createnamespace = yêu cầu ('tiếp tục-local-lưu trữ'). Createnamespace
Const session = createenamespace ('My-app-session')
const db = yêu cầu ('./ db.js')
Chức năng OnRequest (Tùy chọn, Tiếp theo) {
db.fetchUserById (Tùy chọn.ID, chức năng (lỗi, người dùng) {
Nếu (lỗi) {
Trả về Tiếp theo (Lỗi)
Không thể
session.set ('người dùng', người dùng)
kế tiếp()
})
Sau này, nếu bạn muốn truy cập đối tượng người dùng, tất cả những gì bạn cần làm là lấy nó từ bộ nhớ cục bộ:
Const getnamespace = yêu cầu ('tiếp tục-local-lưu trữ'). GetnamesPace
const session = getnamespace ('phiên của tôi')
Const render = yêu cầu ('./ render.js')
Chức năng kết thúc (phản hồi) {
Const user = session.get ('người dùng')
render ({user: user}). Ống (phản hồi)
}
Kỹ thuật này được sử dụng rộng rãi bởi các nhà cung cấp giám sát hiệu suất ứng dụng, chẳng hạn như theo dõi của RisingStack, để giữ bối cảnh thực thi và thu thập thông tin giám sát từ các hệ thống sản xuất.
Với móc Async, một tính năng tương tự được chuyển sang lõi Node.js - nó giúp theo dõi các yêu cầu và xử lý không đồng bộ thông qua vòng đời của chúng. Các Async_hooks. Mô-đun cung cấp API để đăng ký cuộc gọi lại theo dõi tuổi thọ của các tài nguyên không đồng bộ được tạo bên trong ứng dụng Node.js.
Trước Node.js 8, nếu bạn muốn sử dụng các mô-đun cốt lõi trong một ứng dụng sử dụng lời hứa, bạn phải tự bọc các mô-đun cốt lõi để chúng có thể được sử dụng theo cách tương tự. Nó trông giống như thế này:
const fs = yêu cầu ('fs')
Hàm readFilePromise (... args) {
Trả lại lời hứa mới ((giải quyết, từ chối) = & gt; {
fs.readfile (... args, (err, kết quả) = & gt; {
nếu (err) {
Hoàn thiện trở lại (ERR)
Không thể
giải quyết (kết quả)
})
})
Không thể
readFilePromise ('./ gói.json', 'utf-8')
.then ((res) = & gt; console.log (res))
.catch ((err) = & gt; console.log (err))
Với Node.js 8, một phương thức trợ giúp mới được thêm vào mô-đun lõi util, util.promisify. Nó cho phép API kiểu gọi lại tiêu chuẩn Node.js được bọc trong một hàm trả về lời hứa.
Sử dụng chức năng này, đoạn trích trên được đơn giản hóa và trở thành điều này:
Const fs = yêu cầu ('fs')
Const Promisify = yêu cầu ('util'). Hiến sỉ
readFilePromise = Promisify (fs.readfile)
readFilePromise ('./ gói.json', 'utf-8')
.then ((res) = & gt; console.log (res))
.catch ((err) = & gt; console.log (err))
Trước Node.js Phiên bản 8, bộ đệm được phân bổ bằng cách sử dụng trình tạo bộ đệm mới (số) không khởi tạo dung lượng bộ nhớ với số không. Do đó, các trường hợp bộ đệm mới có thể chứa thông tin nhạy cảm, dẫn đến các vấn đề bảo mật nghiêm trọng - ngay cả các mô-đun phổ biến như cầy mangut, WS hoặc mô-đun yêu cầu bị ảnh hưởng.
Nhưng làm thế nào chúng ta đến đó? Khi JavaScript được chuyển từ trình duyệt sang phía máy chủ, có nhu cầu xử lý dữ liệu nhanh và dễ dàng - vì vậy lớp đệm đã được thêm vào. Bộ đệm là một mảng dữ liệu nhị phân đột biến. Khi được sử dụng với hàm tạo yêu cầu kích thước của bộ đệm mới, nó chỉ cần đặt không gian bộ nhớ, nhưng không làm sạch nó.
Vì máy chủ của bạn có thể phục vụ nhiều người dùng cùng một lúc (không giống như trình duyệt của bạn), có thể không gian bộ nhớ mới được phân bổ chứa thông tin nhạy cảm từ những người dùng khác (thậm chí mật khẩu!) Và có khả năng có thể tiếp xúc với kẻ tấn công.
Mặc dù đó là một quyết định có chủ ý thúc đẩy hiệu suất của việc tạo bộ đệm mới, đối với hầu hết chúng ta, nhưng nó không phải là mục đích sử dụng - ngay cả khi nó được ghi lại. Bởi vì điều này, bắt đầu bằng Node.js 8, bộ đệm được phân bổ bằng cách sử dụng bộ đệm mới (số) hoặc bộ đệm (số) sẽ được tự động chứa các số 0.
Trước Node.js 8, nếu bạn muốn gỡ lỗi các ứng dụng Node.js, một trong những giải pháp dễ nhất là bắt đầu trình gỡ lỗi tích hợp, sử dụng Gỡ lỗi nút index.js. Với Node.js 8, điều này đang được gỡ bỏ và thay thế bằng thanh tra Node. Bạn vẫn có thể sử dụng trình gỡ lỗi CLI, nhưng nó sẽ được gỡ bỏ ngay.
Từ giờ trở đi, bạn nên sử dụng nút --Inspect index.js. hoặc nút. --Inspect-brk index.js Nếu bạn muốn trình gỡ lỗi đặt điểm dừng trên dòng đầu tiên của ứng dụng. Khi bạn chạy nó, bạn sẽ nhận được một liên kết WebSocket mà Google Chrome có thể sử dụng để kết nối trình gỡ lỗi của nó.
Bạn nên đi đến Chrome: // Kiểm tra Trong trình duyệt Chrome của bạn và nó sẽ tự động nhận ra ứng dụng Node.js đang chạy, cho phép bạn kết nối. Sau khi bạn đã kết nối với quy trình của mình, bạn sẽ nhận được trình gỡ lỗi của Chrome để kiểm tra ứng dụng Node.js đang chạy của bạn.
Trước đây, nếu bạn muốn kiểm tra lỗi bạn đã nhận được trong thời gian chạy và hành động phù hợp, trong hầu hết các trường hợp, bạn phải kiểm tra thông báo lỗi. Đây là lỗi dễ bị lỗi, vì thông báo lỗi có thể đã thay đổi với các phiên bản Node.js mới.
Với Node.js 8, mã lỗi tĩnh đã được gán cho hầu hết các lỗi - nó vẫn là một tiến độ công việc, nhưng một khi nó đã hoàn tất, các mã lỗi này sẽ không thay đổi, ngay cả khi thông báo trong lỗi không có lỗi .
Ví dụ, người mới được giới thiệu Api url whatwg. sẽ ném An. Err_invalid_url. Lỗi trong đoạn trích sau, vì tham số không phải là URL hợp lệ:
Const url = yêu cầu ('url'). URL
const myurl = url mới ('/ foo')
Như bạn có thể thấy, việc phát hành bản cập nhật Node.js 8 đã mang đến rất nhiều cải tiến mới và thú vị cho cộng đồng JavaScript. Để bắt đầu thử nghiệm với tất cả các tính năng mới này, hãy đến nodejs.org. , Tải xuống nhị phân Node.js 8 và bắt đầu chơi với bộ công cụ mới của bạn!
Bài viết này ban đầu xuất hiện trong Tạp chí Net. Vấn đề 296. Mua nó ở đây .
Những bài viết liên quan:
[số 8] Pentagram đã tạo một kiểu chữ Bespoke cho nhà hát công cộng (Tín dụng hình ảnh: Pentagram cho..
[số 8] (Tín dụng hình ảnh: Jason Parnell-Brookes) Nhảy tới: Photoshop expres..
Danh mục đầu tư của bạn giữ chìa khóa để có được dự án tiếp theo trong túi để nó xứng đáng được nhiều sự chú ý. Nó cũng quan trọng để nh�..
[số 8] Trong những năm đầu của sự nghiệp minh họa của tôi, tôi đã tha thứ từ việc phải minh họa c�..
[số 8] Với một đường cong học tập ngắn hơn ứng dụng và các công cụ giải trí thiết kế hoàn toàn ..
[số 8] Các Vecteezy Editor. là một bộ chỉnh sửa vector miễn phí chạy ngay trong trình duyệt c�..
[số 8] Lão hóa một bức ảnh trong Photoshop là một kỹ thuật cổ điển có thể biến ngay cả một hình �..
Các trang web sử dụng các kỹ thuật tâm lý để ảnh hưởng đến hành vi của người dùng của họ. Vẽ trong nhiều thập kỷ nghiên cứu học thuật giải t..