Safari trước đây gặp lỗi khi sử dụng top‑level await vì bộ nạp module của nó còn dựa trên bản đề xuất WHATWG Loader đã bị bỏ và không tuân thủ đầy đủ spec ECMAScript. Nguyên nhân là bộ nạp cũ được viết bằng JavaScript, dẫn tới lỗi “accessed before initialization” và thứ tự đánh giá module không chính xác. Để khắc phục, nhóm WebKit đã viết lại toàn bộ bộ nạp module từ đầu bằng C++ nguyên bản và kiểm tra kỹ lưỡng bằng fuzzing, test262, WPT và các test case do Bun engineers cung cấp. Kết quả là Safari 27 beta và Safari Technology Preview 251 đã полностью hỗ trợ top‑level await mà không còn những lỗi trước đây. Bài học là đầu tư vào việc viết lại thành phần lõi bằng ngôn ngữ native và thực hiện bộ kiểm tra đa dạng giúp đạt được tuân thủ spec và ổn định lâu dài. Nhà phát triển có thể kiểm tra tính năng này ngay trong Safari Technology Preview 251 hoặc bản beta Safari 27 để xác nhận việc top‑level await hoạt động đúng như mong đợi.
AI có thể tóm tắt sai. Đọc bài gốc trước khi dựa vào thông tin quan trọng.
Vì sao nên đọc: Bài này giúp lập trình viên hiểu Safari đã sửa lỗi top-level await ảnh hưởng đến cách module được tải và thực thi.
Trả lời 3 câu hỏi ngắn để nhận điểm thưởng cho bài này. Chỉ làm khi bạn muốn lấy điểm.
3 câu hỏi · dưới một phút · không bắt buộc
Nguồn: https://webkit.org/blog/18227/fixing-top-level-await-in-safari. 8 Sync News chỉ tóm tắt và dẫn link; bản quyền nội dung thuộc tác giả và nguồn gốc.
Đọc tin ở đây, luyện code, học theo lộ trình và luyện IELTS trên các sản phẩm anh em — tất cả kết nối với nhau trong hệ sinh thái 8 Sync.
Cổng chính của hệ sinh thái: giới thiệu sản phẩm, blog và bảng giá trọn bộ.
Khám pháHọc theo lộ trình rõ từng chặng: video, quiz chấm tự động, certificate và mentor đang làm nghề.
Xem lộ trình1.000 bài DSA, đề tiếng Việt, chấm tự động 7 ngôn ngữ — nhiều bài FREE, chạy ngay trên trình duyệt.
Luyện miễn phíChấm bốn kỹ năng IELTS bằng AI, phản hồi chi tiết theo rubric.
Dùng thử miễn phíAI IDE 22 MB cho dev Việt.
Tải miễn phíBộ nhớ tổ chức cho AI agent.
Khám pháAI trực Fanpage, tự sàng lọc lead.
Dùng thửDự án GTA.js tái tạo lại engine của game Grand Theft Auto năm 1997 bằng JavaScript và WebGL, có thể chơi tại gtajs.wtf. Đây là bản reimplement chứ không phải emulator, nên một số vật lý và animation khác với bản gốc, nhưng engine nhiệm vụ chính xác dựa trên tài liệu mtd.doc. Tác giả sử dụng Gemini AI để triển khai hầu hết các tính năng, tham khảo tài liệu mở, ghi chú cộng đồng và trí nhớ cá nhân về game. Hiện tại game đã chơi được nhưng cảnh sát (cops) vẫn chưa được implement.
Lập trình viên nên đọc bài này để khám phá cách tái tạo lại engine game cổ bằng JavaScript và WebGL từ con số không.
Google just released Gemini 4 Argon which is its most capable model designed specifically for complex reasoning, advanced coding, math, and science. To help you get building right away, we just publis
Learn TinyFish with JavaScript: search the web, extract data, automate browser tasks, reuse logins, research topics, and monitor websites.
LittleJS, engine HTML5 nhỏ không phụ thuộc dependency, vừa cập nhật lớn với renderer 3D hoàn chỉnh, cho phép render 2D và 3D cùng canvas với shared physics, children, và timers. Engine được tối ưu với batched WebGL2 sprites, instanced 3D drawing, và mới benchmark với PixiJS, Three.js, PlayCanvas, Phaser, Babylon.js cho thấy hiệu năng vượt trội. Các công cụ AI mới gồm LittleJS AI toolkit, Claude Code plugin, LittleJS GPT cho no-code game building, cùng 50+ game mẫu open-source. Trang littlejsengine.com demo tất cả tính năng, và game jam thứ 3 diễn ra từ 2/10 đến 2/11.
LittleJS hiện hỗ trợ cả 2D và 3D với công cụ AI mạnh mẽ sẽ mang lại cho lập trình viên game giải pháp phát triển đa năng và hiệu quả.
JavaScript xử lý tasks và microtasks trong Event Loop, với tasks như setTimeout được đặt trong Macrotask Queue còn Promises và queueMicrotask() vào Microtask Queue. Microtasks luôn được thực thi trước tasks ngay sau mỗi kết thúc của call stack, giúp xử lý các tác vụ quan trọng trước. Ví dụ: Promise.resolve().then() sẽ chạy trước setTimeout() dù được gọi sau, tạo ra thứ tự thực thi không như dự kiến nếu không hiểu rõ cơ chế. Quan trọng là hiểu rằng microtasks có thể gây block nếu quá nhiều, như trường hợp 1000 promises chained sẽ được xử lý trước khi bất kỳ timeout nào thực thi.
Bài này giúp lập trình viên hiểu rõ cơ chế thực thi JavaScript để tối ưu hiệu năng và tránh lỗi bất đồng bộ.
TanStack Charts 1.0 là thư viện charting hiện đại, cung cấp giải pháp thay thế cho các framework cũ như D3.js hay Chart.js. Được xây dựng trên nền tảng React hooks, nó mang đến hiệu suất vượt trội với thời gian render chỉ 16ms cho dataset 10,000 điểm dữ liệu. Thư viện này hỗ trợ cả React và vanilla JS, phù hợp với mọi dự án từ nhỏ đến lớn. Đáng chú ý, TanStack Charts cho phép tùy biến linh hoạt mà không cần phụ thuộc vào các UI framework cụ thể, giúp tránh được vấn đề vendor lock-in.
TanStack Charts 1.0 mang đến giải pháp biểu đồ linh hoạt giúp bạn phát triển ứng dụng mà không cần thay đổi thư viện.
TinyJS là JavaScript runtime mới cho phép xây dựng ứng dụng desktop nhỏ gọn (dưới 6MB) trên macOS, Linux và Windows, sử dụng WebView gốc thay vì bundling browser engine như Electron. Được xây dựng trên txiki.js, TinyJS cho phép code bằng JavaScript thuần, HTML, CSS mà không cần biên dịch, và hỗ trợ các framework như React, Vue, Svelte mà không cần Node.js. So với Electron (có thể lên đến 150MB) hay Tauri (yêu cầu Rust), TinyJS mang đến giải pháp nhẹ nhàng hơn. Tác giả đã tạo app store với 25 mẫu ứng dụng như bản sao Winamp 7.4MB, đồng hồ thế giới và trình soạn thảo markdown, dù một số ứng dụng vẫn gặp lỗi trên Windows trong quá trình thử nghiệm.
TinyJS cho phép tạo ứng dụng desktop cỡ nhỏ dưới 6MB với JavaScript thuần túy mà không cần Node.js, giải pháp thay thế hiệu quả cho Electron.
Event Loop trong JavaScript hoạt động khác biệt giữa browser và Node.js, đặc biệt với cách xử lý microtask queue và callback queue. Bài viết cung cấp bảng trace chi tiết giúp dự đoán thứ tự thực thi async code, phát hiện tình trạng microtask starvation khi có quá nhiều Promise. Các ví dụ code minh họa rõ ràng khác biệt giữa process.nextTick() trong Node.js và setTimeout() trong browser. Bạn sẽ học được kỹ thuật debug bằng cách theo dõi từng bước trong event loop stack, giúp tối ưu performance khi xử lý nhiều async operation.
Bài viết giúp lập trình viên JavaScript dự đoán và gỡ lỗi hiệu quả hành vi bất đồng bộ bằng cách phân tích chi tiết hàng đợi và vòng lặp sự kiện.
Đang tải bình luận…