Dạ em đọc trên mạng thấy bảo JIT là sự kết hợp của biên dịch và thông dịch nên chạy nhanh hơn các ngôn ngữ khác. Vậy sai là do javascript nhanh vì có JIT hay sai là javascript không dùng JIT anh?
Đoạn này chưa clear lắm. Ở đây bạn có nhắc tác vụ (task) đồng bộ và task bất đồng bộ, thì bạn hiểu sự khác nhau giữa 2 loại tác vụ này như nào? Lấy ví dụ. Và trong đoạn code của mình thì hàm nào là đồng bộ, hàm nào là bất đồng bộ.
Chuẩn rồi.
Việc A có chạy hay không là tùy vào B gọi callback lúc nào thôi. Không có chuyện B xong thì A mới được chạy. Giả sử có callback A đấy nhưng B nó không thích gọi thì sao.
Cuối cùng là tại sao đoạn code của mình không in ra như sau?
Thật ra em vẫn chưa rõ về bất đồng bộ lắm mặc dù em thấy nó xuất hiện ở nhiều ngôn ngữ chứ không phải mỗi JS, kiểu như các task diễn ra đồng thời song song cùng lúc. Theo em hiểu thì bất đồng bộ có nghĩa là tại 1 thời điểm trong khi task A đang chạy thì thực thi task B luôn không cần chờ task A xong.
Ví dụ soạn bài viết trên editor của web daynhauhoc, task upload hình ảnh sẽ phải tốn thời gian khá lâu vì file nặng, mạng yếu, chờ server trả link, … Nếu lập trình đồng bộ như bình thường thì user vừa submit ảnh thì web sẽ bị đứng không click, không sroll được, xong task xử lý ảnh thì mới được thao tác tiếp. Còn bất đồng bộ là trong khi task upload ảnh đang chạy thì user vẫn có thể gõ chữ tiếp, task upload chỉ hiện icon spinner xoay xoay khi nào xong thì update lại thành dấu tích. Trong lúc call API POST ảnh lên server thì những task khác hoạt động bình thường không bị block.
Em thấy đoạn code trên anh đặt tên hàm là runAsync nhưng em không nhìn ra bất đồng bộ chỗ nào hết, em chỉ thấy đây là hàm có sử dụng callback bình thường thôi. Trong even loop thì cả 2 hàm runAsync và longTask chỉ chạy trong ngăn xếp stack chạy theo thứ tự bình thường của hàm đồng bộ.
Thì như anh vừa nói callback phụ thuộc vào vị trí thực thi trong thân hàm cha
nên anh gọi callback() ở giữa console.log('Start') và console.log('Done') thì nó ra như này
Phần lấy ví dụ mình trông đợi một câu trả lời mang tính “diễn dịch”, từ tổng quát trước rồi lấy ví dụ cụ thể. Ở đây bạn có thể nói trong JS thì chỉ có các tác vụ IO mới là bất đồng bộ, ví dụ như gọi API, đọc file, database, API của browser,… Còn chạy code JS kiểu nào đi nữa cũng không bất đồng bộ được (mặc dù JS có những cơ chế hỗ trợ async).
js: ngôn ngữ lập trình, kiểu dữ liệu động, thông dịch, đơn luồng, gốc của nó là ngôn ngữ hướng cấu trúc, được tạo ra ban đầu là phục vụ cho các browser xử lý các chức năng như xử lý xự kiện, render dom, xử lý giao diện trên browser, vì html đơn thuần là ngôn ngữ đánh dấu chỉ có các tag, nên cần 1 ngôn ngữ kịch bản để xử lý sự kiện
java: ngôn ngữ lập trình, kiểu dữ liệu chặt chẽ (tĩnh), hỗ trợ đa luồng, là ngôn ngữ hướng đối tượng, vừa biên dịch vừa thông dịch, tạo ra để viết mọi thứ , từ ứng dụng, game, nhúng vào thiết bị điện tử, nó là 1 trong những ngôn ngữ đi đầu cho khái niệm viết 1 lần chạy mọi nơi chỉ cần có cài máy ảo, cần biên dịch về mã bytecode rồi mới chạy
còn việc chạy hơn hay chậm hơn phụ thuộc vào sự tối ưu code khi biên dịch, nên java khi biên dich thì đã đc tối ưu hóa để chạy nhanh hơn là đọc trực tiếp từng dòng từ file như js
js:là ngôn ngữ lập trình
nodejs:là framework đc xậy dựng lên để hổ trợ phát triển ứng dụng web viết bằng js
1 bên là ngôn ngữ, 1 bên là framework , nên mình thấy ngay từ khái niệm đã khác nhau rồi nên chúng ko giống nhau
html,js,css là 1 trong những thành phần tạo nên 1 trang web
html: như cái tên của nó ngôn ngữ đánh dấu siêu văn bản, đơn thuần là 1 văn bản có cấu trúc chỉ gồm các tag
css: định nghĩa các style cho các tag
js: đóng vai trò là 1 ngôn ngữ kịch bản để xử lý xự kiện cho trang web
ok, tôi hơi nhầm lẫn , vì nodejs nó chứa tất cả mọi thứ luôn bao gồm cả nền tảng hoạt động như trình thông dịch, không như các ngôn ngữ tĩnh như java,c# nó tách riêng phần nền tảng hoạt động ra khỏi cái khung
Người phỏng vấn: người duyệt web hay than phiền JavaScript chạy một hồi làm nặng máy, trình duyệt ngốn RAM. Là lập trình viên JavaScript bạn có thể dùng kỹ thuật nào đó tương tự như Garbage Collection để giải phóng bớt RAM?
Reactjs là một thư viện mã nguồn mở để lập trình giao diện web, thường thích hợp làm web SPA giao tiếp với backend bằng API.
Em chưa có kinh nghiệm sử dụng redux. Redux cung cấp cho cả app một state ở phạm vi global, mọi component đề có thể truy cập vào global state này. Trường hợp các component lồng nhau muốn truyền data qua lại giữa các component rất khó khăn (truyền từ con sang cha, cha sang component ông nội bằng props) nên phải dùng redux. Chức năng giỏ hàng có thể dùng redux.
useContext tương tự redux. useContext có ưu điểm là có sẵn trong hệ sinh thái react, gọn nhẹ, dễ cài đặt hơn redux.
Vdom có nghĩa là thư viện hoặc framework dùng javascript để render ra các elements mà không access trực tiếp vào cây DOM thật. Dev chỉ làm việc trên VDOM, từ VDOM render ra DOM thật do lib hoặc framework xử lý. Khi giao diện bị thay đổi, VDOM sẽ so sánh sự khác biệt của DOM trước và sau khi sự thay đổi đó diễn ra, nếu khác nhau mới update DOM thật.
Em không biết Có lẽ vì nó nhanh hơn real DOM đổi với browser và với cả dev.
VDOM sẽ không tối ưu SEO vì các elements phải sau bước trung gian render ra mới có, nên search engine của google không crawl được (cả app reactjs chỉ có 1 thẻ div duy nhất là real DOM)
Trả lời: Theo em thì sử dụng webpack, tư tưởng của webpack cũng giống như GC là chúng sẽ dánh dấu và loại bỏ các node không cần thiết, cho ra kết quả tối ưu cuối cùng đó là code js đã đc nén. Việc nén code js có thể phần nào đó cải thiện lưu lượng memory sử dụng để load đoạn js thừa nhưng cách tốt nhất vẫn là cải thiện cách code . Nếu code toàn bug với vòng lặp tào lao thì có nén bao nhiêu thì cũng bằng 0
object được khởi tạo từ class vs function khác nhau chỗ nào?
new operator khi được gọi sẽ làm gì?
a1 và a2 trong đoạn code dưới đây khác gì nhau?
function ClassA() {}
a1 = new ClassA()
a2 = ClassA()
Viết 1 hàm map có chức năng tương tự như bên Array().map nhưng cho Object và áp dụng cho toàn bộ value. Tức khi 1 object mới được tạo, ta có thể sử dụng như sau
a = {v1: 2, v2: 1}
newA = a.map((k, v) => v * 2)
console.log(newA) // {v1: 4, v2: 2}