JavaScript nào không đồng bộ?

JavaScript không đồng bộ. Mã không đồng bộ cho phép chương trình được thực thi ngay lập tức trong đó mã đồng bộ sẽ chặn việc thực thi thêm mã còn lại cho đến khi nó kết thúc mã hiện tại. Điều này có vẻ không phải là một vấn đề lớn nhưng khi bạn nhìn nó trong một bức tranh lớn hơn, bạn nhận ra rằng nó có thể dẫn đến việc trì hoãn Giao diện người dùng

Hãy cho chúng tôi xem ví dụ về cách JavaScript không đồng bộ chạy




    document.write[______3];

    document.write["
"
];

    0

    ];1

];2document.write[____44];

    ];7

    0

    document.write["
"
];

    document.write[____255];

    document.write["
"
];

document.write[6

đầu ra

Vì vậy, những gì đoạn mã làm là đầu tiên nó đăng nhập vào document.write[7, sau đó thay vì thực thi hàm     3, nó sẽ đăng nhập vào     4 và sau đó nó chạy hàm     3

Lúc đầu, như thường lệ, câu lệnh document.write[7 đã đăng nhập. Khi chúng tôi sử dụng trình duyệt để chạy JavaScript, có các API web xử lý những việc này cho người dùng. Vì vậy, những gì JavaScript làm là chuyển hàm     3 trong API web đó và sau đó chúng tôi tiếp tục chạy mã của mình như bình thường. Vì vậy, nó không chặn phần còn lại của mã thực thi và sau khi tất cả mã được thực thi, nó sẽ được đẩy vào ngăn xếp cuộc gọi và cuối cùng được thực thi. Đây là những gì xảy ra trong JavaScript không đồng bộ

Chúng tôi, những người, thích cấu trúc. Chúng tôi thích các danh mục và mô tả và đặt mọi thứ chúng tôi biết vào những chiếc hộp nhỏ ngăn nắp. Đây là lý do tại sao lúc đầu tôi thấy JavaScript rất khó hiểu. Nó là một kịch bản hay một ngôn ngữ lập trình?

Điều tuyệt vời [đọc. khủng khiếp] về JavaScript là, hầu hết thời gian, nó là một chút của cả hai. JavaScript đã phát triển rất nhiều trong những năm qua nên việc phân loại trở nên khó khăn. Hôm nay, tôi sẽ đi sâu vào việc liệu JavaScript là đồng bộ hay không đồng bộ và quy trình công việc bên dưới trông như thế nào

JavaScript là đồng bộ

spoiler. về cơ bản, JavaScript là một ngôn ngữ đơn luồng, chặn, đồng bộ. Điều đó chỉ có nghĩa là tại một thời điểm chỉ có một hoạt động có thể được tiến hành. Đó không phải là toàn bộ câu chuyện, mặc dù

Hình ảnh của Ankit Kamboj

Nếu bạn phải thực hiện một yêu cầu cơ sở dữ liệu đắt tiền thì sao? . Mã đồng bộ khiến cuộc sống của lập trình viên trở nên rất khó khăn, vì vậy cộng đồng JavaScript đã phát triển một số cách giải quyết tuyệt vời

Khi bạn nghe mọi người nói rằng JavaScript là ngôn ngữ không đồng bộ, ý của họ là bạn có thể điều khiển JavaScript để hoạt động theo cách không đồng bộ. Nó không được nướng trong, nhưng nó có thể. Dưới đây là một số cách để thực hiện điều đó

Gọi lại không đồng bộ

Giải pháp sớm nhất và đơn giản nhất để bị mắc kẹt trong thế giới đồng bộ là gọi lại không đồng bộ [nghĩ rằng "Hi"8]

Hãy sử dụng một yêu cầu cơ sở dữ liệu làm ví dụ. các lệnh gọi lại không đồng bộ cho phép bạn gọi một hàm gọi lại gửi yêu cầu cơ sở dữ liệu [và bất kỳ lệnh gọi lại lồng nhau nào khác] đến ứng dụng của bạn, nơi ứng dụng chờ phản hồi từ cơ sở dữ liệu, giải phóng phần còn lại của mã để tiếp tục chạy

Hình ảnh của Ankit Kamboj

Khi yêu cầu cơ sở dữ liệu hoàn tất, kết quả [và bất kỳ mã lồng nhau nào khác] được gửi đến hàng đợi, sau đó được xử lý thông qua vòng lặp sự kiện

Trong sơ đồ ở đây, bạn có thể thấy điều này khác với mã đồng bộ như thế nào. Chức năng C, cùng với E, F và G đều được gửi đến trình duyệt, hàng đợi và vòng lặp sự kiện

Nếu bạn muốn có một lời giải thích rõ ràng, tuyệt vời về quy trình này, hãy xem phần minh họa này của Philip Roberts

Bây giờ, đây là một giải pháp tuyệt vời, nhưng nó để lại một chút gì đó mong muốn. Bởi vì bạn không thể dự đoán chính xác khi nào hàm C sẽ giải quyết, bạn phải lồng tất cả các hàm phụ thuộc vào nó. Điều này trở nên lộn xộn nhanh chóng và dẫn đến địa ngục gọi lại khét tiếng mà không ai muốn giải quyết. Chính môi trường này đã truyền cảm hứng cho lời hứa

lời hứa

Để đối phó với địa ngục gọi lại, các thư viện như Bluebird hoặc Q đã cho phép các lập trình viên dọn dẹp cú pháp của họ và viết mã hoạt động không đồng bộ nhưng có vẻ đồng bộ. Điều này dẫn đến mã dễ đọc hơn và chạy nhanh hơn

Hình ảnh của Ankit Kamboj

Với một lời hứa, thay vì gộp tất cả các phần phụ thuộc vào một khối mã và gửi toàn bộ nội dung đó tới trình duyệt, chúng tôi có thể tách chúng ra

Chúng tôi có thể gửi cuộc gọi lại không đồng bộ [Chức năng C] tới trình duyệt và sử dụng "Hi"9 để giữ tất cả các phụ thuộc khác [E, F và G] sang một bên, chỉ chạy chúng khi Hàm C quay lại và chạy

Điều này cho phép chúng tôi viết mã theo cách mô-đun dễ đọc hơn, trong khi vẫn đạt được những lợi ích của lập trình không đồng bộ

Không đồng bộ/Đang chờ

Những lời hứa thật tuyệt vời — thực tế là tuyệt vời đến mức ES6 đã đưa chúng vào ngôn ngữ như một tiêu chuẩn. Việc sử dụng các lời hứa vẫn khiến mã không đồng bộ trông có vẻ hơi khó hiểu, vì vậy giờ đây chúng tôi có Async/Await tuyệt đẹp và tuyệt đẹp để giúp chúng tôi giải quyết

Khai báo ];0 định nghĩa một hàm không đồng bộ, trả về một đối tượng ];1. Hàm không đồng bộ là một hàm hoạt động không đồng bộ thông qua vòng lặp sự kiện, sử dụng một ];2 ẩn để trả về kết quả của nó. Nhưng cú pháp và cấu trúc mã của bạn khi sử dụng các hàm không đồng bộ giống như sử dụng các hàm đồng bộ tiêu chuẩn

Ví dụ cho Async Await. -

Có toàn bộ bài đăng trên blog và [tôi chắc chắn] sách viết về Async/Await, vì vậy tôi sẽ không đi sâu vào vấn đề này, nhưng đủ để nói rằng Async/Await cho phép bạn

JavaScript có thực sự không đồng bộ không?

JavaScript là ngôn ngữ lập trình đồng thời, không chặn, không đồng bộ, đơn luồng với nhiều tính linh hoạt.

JavaScript theo mặc định có phải là không đồng bộ không?

JavaScript được đồng bộ hóa theo mặc định và là luồng đơn. Điều này có nghĩa là mã không thể tạo chủ đề mới và nó sẽ thực thi khối mã của bạn theo thứ tự sau khi cẩu.

JavaScript là đồng bộ hay không đồng bộ?

Javascript là ngôn ngữ đơn luồng đồng bộ nhưng với sự trợ giúp của vòng lặp sự kiện và lời hứa, JavaScript được sử dụng để lập trình không đồng bộ.

TypeScript đồng bộ hay không đồng bộ?

TypeScript hiện hỗ trợ các chức năng không đồng bộ cho các công cụ có hỗ trợ riêng cho trình tạo ES6, e. g. Nút v4 trở lên.

Chủ Đề