Công nghệ

TypeScript 7.0 biên dịch nhanh gấp 10 lần — Vue, Svelte và Angular phải chờ đợi

Adrian Kessler

Trình biên dịch TypeScript bên trong VS Code từng mất 125 giây để kiểm tra một bản sao mới của codebase của chính trình biên dịch đó. TypeScript 7.0 làm cùng một công việc chỉ trong 10,6 giây. Microsoft không tối ưu hóa mã cũ — họ đã chuyển toàn bộ runtime của trình biên dịch từ JavaScript sang Go, mở khóa khả năng song song đa lõi mà một engine JavaScript không thể cung cấp.

Việc chuyển đổi này không phải là viết lại từ đầu. Các kỹ sư của Microsoft mô tả logic kiểm tra kiểu dữ liệu (type-checking) là giống hệt về mặt cấu trúc so với TypeScript 6.0 — cùng các quy tắc, cùng hành vi, chỉ được dịch sang một ngôn ngữ có thể phân phối công việc trên nhiều lõi CPU. Nhóm chọn Go vì codebase JavaScript vốn nặng về hàm (function-heavy) của bản gốc ánh xạ gần như một-một sang các thành ngữ Go. Runtime mới cũng giới thiệu các cờ để kiểm soát song song một cách tường minh: truyền cờ --checkers 8 trên một workstation hiện đại đẩy hiệu suất biên dịch VS Code lên gấp 16,7 lần so với TypeScript 6. Quá trình type-checking trên CI của Slack giảm từ 7,5 phút xuống còn 1,25 phút. Bản build của Bluesky đi từ 24,3 giây xuống còn 2,8 giây. Mô hình này lặp lại trên nhiều codebase: lợi ích tăng dần khi quy mô dự án lớn hơn, bởi vì giới hạn giờ đây là phần cứng, không phải runtime.

TypeScript 7.0 ra mắt mà không có API lập trình công khai — giao diện mà các công cụ build sử dụng khi chúng gọi trình biên dịch từ bên trong mã của chính chúng. Mọi trình kiểm tra kiểu dữ liệu template của các framework web lớn đều phụ thuộc vào API này. Công cụ Volar của Vue, language service của Svelte, MDX, trình kiểm tra template của Angular: không công cụ nào hoạt động được với TypeScript 7.0. Các công cụ như ts-morph và ts-jest, vốn phơi bày nội bộ của trình biên dịch TypeScript để tái cấu trúc và kiểm thử, cũng bị hỏng. Microsoft xác nhận API thay thế đang được lên kế hoạch cho TypeScript 7.1, dự kiến ra mắt vào tháng 10. Các dự án sử dụng bất kỳ framework hoặc công cụ nào trong số đó chưa nên nâng cấp.

Các cấu hình dự án cũ phải đối mặt với một loạt rào cản cứng riêng biệt. TypeScript 7.0 biến các tùy chọn mà phiên bản 6.0 đã không dùng nữa (deprecated) thành các lỗi build cứng: mục tiêu biên dịch ES5, định dạng module AMD và SystemJS, độ phân giải module classic, và từ khóa assert trên câu lệnh import — tất cả đều khiến build thất bại hoàn toàn. Tệp tsconfig.json mặc định mới không còn tự động tải các gói @types, nghĩa là các dự án từng dựa vào tính năng tự động phát hiện kiểu dữ liệu môi trường (ambient type discovery) mà không khai báo rõ ràng các phụ thuộc kiểu của mình sẽ thất bại âm thầm tại thời điểm import. Microsoft cung cấp một shim tương thích typescript@npm:@typescript/typescript6 cho các dự án cần giữ công cụ TS6 chạy song song với trình biên dịch mới.

Các dự án vượt qua được những rào cản đó — ứng dụng Node.js hoặc Deno thuần túy, ứng dụng trình duyệt không xây dựng trên hệ thống template của framework, và các thư viện không có phụ thuộc API lập trình — có thể nâng cấp chỉ với một thay đổi duy nhất trong package.json. Hỗ trợ trình soạn thảo cũng đi theo sự phân tách tương tự: VS Code đã có sẵn một extension TypeScript 7 chuyên dụng, và hỗ trợ tích hợp sẵn đang hoàn tất quá trình di chuyển sang Giao thức Ngôn ngữ Máy chủ (Language Server Protocol), thay thế thiết kế TSServer cũ. WebStorm và các trình soạn thảo khác cũng phụ thuộc vào TSServer vẫn đang xử lý quá trình chuyển đổi đó.

TypeScript 7.1, hiện được nhắm mục tiêu ra mắt vào tháng 10 năm 2026, sẽ cung cấp API trình biên dịch mới mà các công cụ của Vue, Svelte, Angular và MDX cần trước khi họ có thể di chuyển. Khi nó đến, những lợi ích về hiệu suất từ quá trình chuyển đổi Go kéo dài 15 tháng sẽ chạm tới toàn bộ hệ sinh thái. Cho đến lúc đó, các trang dự án của Volar, SvelteKit và Angular khuyến nghị giữ ở TypeScript 6.0.x.

Thẻ: , , ,

Thảo luận

Có 0 bình luận.