Bài viết Câu hỏi About RongvangIT
profile Pic
0
0

Đăng ngày:

  70 Lượt xem

Đánh Giá Về Prettier Trong Năm 2023

Node.jsPrettier

Prettier là gì

Prettier là một công cụ định dạng mã nguồn được viết bằng JavaScript. Đây là một công cụ định dạng mã nguồn có tính chủ quan, với số lượng cấu hình có thể thiết lập ít, được gọi là “opinionated”. Không chỉ hỗ trợ JavaScript và TypeScript, Prettier cũng hỗ trợ HTML, CSS, GraphQL và nhiều ngôn ngữ khác.

Phiên bản và Phát hành

Trong năm 2023, đã có một phiên bản chính và một phiên bản phụ của Prettier. Trước đây, có khoảng 1 phiên bản phụ mỗi 3 tháng, nhưng tần suất đã giảm một chút.

Tuy nhiên, với việc phát hành phiên bản chính 3.0 và quyết định phát hành các bản vá nhỏ một cách linh hoạt hơn, tôi nghĩ rằng không có dấu hiệu của việc phát triển đang bị đình trệ.

Một điểm đáng chú ý là việc phát hành các bản vá nhỏ một cách “tự nhiên” hơn. Ví dụ, từ TypeScript 5.2, tính năng quản lý tài nguyên rõ ràng (“Explicit Resource Management”) được thêm vào, và cú pháp mới using / await using đi kèm. Prettier cần hỗ trợ tính năng này, và thay vì xem đó là một “chức năng” trong quy luật phiên bản (semantic versioning), như trước đây, giờ đây nó được xem xét như một “sửa lỗi” khi không đồng bộ với tính năng mới của TypeScript. Việc hỗ trợ using / await using đã được phát hành trong Prettier 3.0.3.

Dù có thể có ý kiến đối lập về điều này, nhưng cá nhân tôi cảm thấy việc phát hành các bản vá nhỏ một cách linh hoạt là thuận tiện hơn.

Prettier 3.0

Prettier 3.0 đã được phát hành vào ngày 5 tháng 7 năm 2023. Điều này là một bản phát hành chính sau khoảng 3 năm. Các thay đổi chính bao gồm:

  • Không còn chèn khoảng trắng giữa văn bản tiếng Nhật và chữ Latin trong định dạng Markdown.
  • Có thể viết bộ phân tích cú pháp bất đồng bộ.
  • Có thể viết tệp cấu hình bằng ECMAScript Modules.
  • Giá trị mặc định của tùy chọn trailingComma đã thay đổi từ es5 thành all.
  • Có thể viết plugin bằng ECMAScript Modules.
  • Toàn bộ mã nguồn được viết bằng ECMAScript Modules.

Không có nhiều tính năng ảnh hưởng đến người dùng. Đối với những người sử dụng tiếng Nhật, thay đổi trong định dạng Markdown có thể ảnh hưởng lớn, nhưng đối với những người không sử dụng tiếng Nhật, có lẽ họ không cảm thấy ảnh hưởng nhiều.

Đối với nhóm phát triển Prettier, việc mã nguồn được viết toàn bộ bằng ECMAScript Modules là một thay đổi lớn. Điều này mang lại một số lợi ích.

Đầu tiên, nó dễ áp dụng các kỹ thuật để giảm kích thước bản dựng. Các kỹ thuật phân tích tĩnh như Tree Shaking của các bộ dựng thường hiệu quả hơn đối với ECMAScript Modules so với CommonJS Modules. Ngoài ra, có thể loại bỏ các hack khó chịu để sử dụng các gói Pure ESM Package của những người như Sindre Sorhus hoặc @wooorm.

Điều này chỉ là quan điểm cá nhân của tôi, nhưng so với CommonJS, ECMAScript Modules (vì tôi thường xuyên sử dụng nó trong công việc hàng ngày) làm cho mã dễ viết hơn. Tuy nhiên, có một nhược điểm là prettier-vscode không hoạt động nữa và đã tốn nhiều công sức để giải quyết vấn đề này.

Các tính năng chính được triển khai bởi @fisker. Tôi đã thực hiện một số tính năng và sửa lỗi, cũng như làm nhiều công việc nhỏ (nhưng nhiều) như suy nghĩ về những gì nên đặt vào bản phát hành này và những gì không nên, viết blog phát hành và thực hiện phát hành.

Để biết chi tiết về Prettier 3.0, vui lòng tham khảo Release Notes chính thức.

Prettier 3.1

Prettier 3.1 đã được phát hành vào ngày 13 tháng 11 năm 2023.

Trong phiên bản này, có sự thay đổi lớn về định dạng toán tử ba ngôi. Ban đầu, Prettier đã định dạng toán tử ba ngôi bằng cách thêm dòng thụt mỗi khi toán tử ba ngôi lồng nhau như sau:

const message =
  i % 3 === 0 && i % 5 === 0
    ? "fizzbuzz"
  : i % 3 === 0
    ? "fizz"
  : i % 5 === 0
    ? "buzz"
    : String(i);

Tuy nhiên, tính năng này đã thay đổi để không thêm thụt lề từ năm 2018. Nhưng có vẻ như thay đổi này không được nhiều người chấp nhận. Sau khoảng 5 năm kể từ khi có yêu cầu từ người dùng không hài lòng với thay đổi, Prettier 3.1 đã quyết định quay trở lại việc thêm thụt lề.

Tuy nhiên, nhóm phát triển Prettier vẫn cho rằng việc thêm thụt cho toán tử ba ngôi không phải là lựa chọn lý tưởng. Nó khá khó đọc theo cách thông thường. Vì vậy, họ đã nghiên cứu về toán tử ba ngôi lý tưởng dưới sự quan tâm lớn của Alex Rattray và giới thiệu định dạng thử nghiệm này trong Prettier 3.1 với tùy chọn —experimental-ternaries.

Bạn có thể kiểm tra hành vi cụ thể của định dạng thử nghiệm toán tử ba ngôi mới trong blog chính thức hoặc phiên bản dịch tiếng Nhật của nó. Họ đang chờ đợi phản hồi từ cộng đồng, và bạn có thể tham gia khảo sát thông qua liên kết Google Forms trên blog.

Ban đầu, nhóm phát triển đã có ý định phát hành định dạng toán tử ba ngôi thử nghiệm này làm mặc định từ phiên bản 3.0. Tuy nhiên, vì cảm nhận của người dùng và vấn đề liên quan đến sự thay đổi này, họ quyết định giới thiệu từng bước bằng cách sử dụng cờ thử nghiệm và cờ loại bỏ.

Ngoài toán tử ba ngôi, phiên bản 3.1 cũng hỗ trợ cú pháp cho tính năng “built-in control-flow” và “defferable views” trong Angular v17, đang ở chế độ xem trước cho nhà phát triển. Đối với chi tiết về tính năng này, bạn có thể tham khảo blog về cách Prettier hỗ trợ Angular và điều chỉnh về “built-in control flow”.

Công việc chính của tôi trong phiên bản 3.1 xoay quanh việc điều chỉnh những thay đổi này.

Để biết thông tin chi tiết về Prettier 3.1, vui lòng xem ghi chú phát hành chính thức.

Biome và Prettier

Nhiều người có thể đã biết, ngay sau khi phát hành phiên bản 3.1, có một chiến dịch “Prettier được viết lại bằng Rust, tôi sẽ tặng $20k” đã được tổ chức. Chiến dịch này được ý tưởng bởi @Vjeux, người đồng sáng tạo của Prettier (ông cũng là một kỹ sư phần mềm của Meta, nổi tiếng với việc đồng sáng tạo React Native).

Kết quả cuối cùng của chương trình thưởng này là định dạng của Biome giành chiến thắng. Để biết thêm chi tiết, bạn có thể tham khảo blog chính thức hoặc phiên bản dịch tiếng Nhật của nó.

Tôi sẽ chia sẻ một số suy nghĩ cá nhân về chương trình này.

Đối với chương trình này, tôi có một quan điểm tích cực. Kể từ khi Prettier ra đời cách đây khoảng 6 năm, vì không có phần mềm cạnh tranh, nên cải thiện yếu tố không chức năng như hiệu suất đã bị bỏ qua. Điều này không phải là điều tốt đẹp cho toàn bộ ngành công nghiệp. Bằng cách nào đó, việc Biome có thể đạt được tính tương thích với Prettier, tiếp cận nguồn lực và cộng tác viên đã tạo ra một sự cạnh tranh đáng kinh ngạc đối với Prettier. Điều này là điều tốt.

Tuy nhiên, từ góc độ kỹ thuật, tôi không có niềm tin tuyệt đối rằng việc viết lại bằng Rust sẽ mang lại kết quả tốt. Có một số quan điểm về điều này.

Trước hết, tôi muốn làm rõ rằng, không phải vì tôi không thích Biome hoặc Rust, mà là với tư cách là một ngôn ngữ để phát triển một trình định dạng mã nguồn để đáp ứng yêu cầu hiệu suất được mong đợi từ người dùng, Rust có phải là sự lựa chọn đúng không? Điều này chỉ là ý kiến cá nhân của tôi.

Yêu cầu hiệu suất cho Trình định dạng mã nguồn

Đầu tiên, có giả định rằng yêu cầu hiệu suất cho trình định dạng mã nguồn không cao như trình biên dịch hoặc trình đóng gói. Trong quá trình phát triển cục bộ, việc sử dụng tiện ích mở rộng của trình soạn thảo để thực hiện “format on save” sẽ phổ biến, và về thời gian chạy CI, thì việc xây dựng thường chiếm ưu thế (tính đến mức độ chủ đạo, bạn nghĩ sao?).

JavaScript đủ nhanh khi viết nhanh

Tiếp theo, là giả định rằng yêu cầu hiệu suất đó có thể đạt được đủ bằng cách giữ nguyên trong JavaScript.

Không chỉ Prettier, mà nhiều công cụ được viết bằng JavaScript như webpack hoặc Babel đều đứng trong vị trí làm nổi bật nhu cầu mà lúc đó có thể chẳng biết đến. Ví dụ, việc cần một công cụ định dạng mã nguồn “opinionated” cho ngành công nghiệp JavaScript đã được thể hiện thông qua sự phổ biến của Prettier. Những công cụ này có thể không phải là những thứ được tạo ra với mục tiêu tối ưu hiệu suất từ đầu. Ít nhất là, Prettier không được tạo ra với mục đích làm nhanh chóng từ đầu.

Vì vậy, hiện tại, việc chúng là chậm là điều dễ hiểu (tất nhiên, điều này không có nghĩa là tốt). Phần mềm không được tạo ra với mục đích tối ưu hiệu suất sẽ chậm, không phụ thuộc vào ngôn ngữ. Một chương trình, dù được viết bằng C hay Rust, nếu chậm, thì nó vẫn chậm. Ngược lại, không có nhiều khả năng rằng nếu có một điểm chậm trong mã nguồn JavaScript, thì đó không phải là do JavaScript.

Thực tế, khi chúng tôi viết lại CLI của Prettier từ TypeScript, kết quả là nhanh hơn khoảng 5 lần. Điều này chủ yếu là nhờ những cải tiến như phân tích biểu thức chính quy và giải quyết tệp cấu hình.

Ngoài ra, khi định dạng TypeScript bằng Prettier, điểm chậm nhất hiện tại là bộ phân tích cú pháp TypeScript. Tuy nhiên, vì bản thân kiến trúc của trình phân tích TypeScript mà Prettier đang sử dụng có thể chậm, nên tôi nghĩ nếu thay thế bằng một cái nhanh hơn, có thể làm cho nó nhanh chóng hơn.

Kết luận

Năm 2023 đã là một năm lớn cho Prettier với việc phát hành các phiên bản chính mới và sự xuất hiện mạnh mẽ của đối thủ cạnh tranh.

Năm tới, dường như sẽ là một năm chú trọng hơn vào hiệu suất. Nếu bạn quan tâm đến việc Prettier trở thành một phần mềm tốt hơn, hãy hỗ trợ tại https://opencollective.com/prettier. Sắp tới, tôi cũng sẽ viết một blog về tài chính của Prettier.

dev_pro_it
Đang làm IT tại Japan

Bình luận

Bài viết chưa có bình luận. Hãy trở thành người bình luận đầu tiên!
Sign up for free and join this conversation.
Sign Up
If you already have a RongvangIT account Login
Danh sách thư mục
Bắt đầu ngay với RồngVàngIT - nền tảng chia sẻ kiến thức lập trình tuyệt vời cho kỹ sư Việt Nam!

Hãy đăng nhập để sử dụng hàng loạt các chức năng tuyệt vời của RồngVàngIT !

  1. 1. Bạn sẽ nhận được các bài viết phù hợp bằng chức năng theo dõi tag và người dùng.
  2. 2. Bạn có thể đọc lại các thông tin hữu ích bằng chức năng lưu trữ nội dung.
  3. 3. Chia sẻ kiến thức, đặt câu hỏi và ghi lại quá trình trưởng thành của mình cùng RồngVàngIT !
Tạo tài khoản Đăng nhập
profile Pic