2 TIP tăng năng suất cốt trong sbt project

Giảm thời gian chờ run

Thông thường khi run app thì chúng ta hay dùng sbt run. Khi sbt run sẽ khởi động sbt trước: bật máy ảo JVM, load các plugin, bật sbt server, etc sau đó mới chạy task run. Thời gian khởi động mất khoảng 25s. Thời gian này không ảnh hưởng đối với các app (thông thường là WEB APP) có hot reload  khi code change vì chúng ta chỉ khởi động sbt 1 lần. Đối với CLI APP thời gian này khá đáng kể cho mỗi lần chạy. Có 2 cách giải quyết cho vấn đề này:

1. Thay vì sbt run chúng ta bật sbt trước, sau khi khởi động xong thì chạy task bên trong trong sbt shell (eg: run)

2. Từ sbt 1.4.0 trở đi sbt ra mắt tính năng là thin client: lần đầu bật sbt thì sbt sẽ khởi động sbt server ở daemon cho mỗi project, các lần tiếp theo sẽ connect sbt server daemon và không phải chờ nữa: sbt –client run

Chú ý: Mặc định run sẽ không fork ra 1 process mới, chạy cùng JVM với sbt server dẫn đến hiệu năng các task ảnh hưởng hoặc các task sau sẽ có thể bị ảnh hưởng bởi task trước nếu có thay đổi state của JVM ví dụ như System.property. Scope ảnh hưởng: Đối với sbt shell trong cùng shell còn đối với thin client trong cùng 1 instance sbt server. Trên local thì ảnh hưởng này là không đáng kể. Chúng ta có thể loại bỏ ảnh hưởng bằng cách fork 1 process mới mỗi khi run (setting trong build.sbt).

 

Chạy project code trong REPL

Chúng ta hay sử dụng REPL để code nhanh và xem kết quả ngay lập tức như: stream file, split text, etc. Điều này rất hữu dụng khi code xong 1 function mà muốn test ngay xem function hoạt động đúng hay chưa hoặc test 1 function mà không có cách nào dễ dàng để gọi chúng (phải thông qua api, nhiều function khác mới có thể gọi đến function này). Với sbt project, sbt có hỗ trợ load toàn bộ project vào REPL giúp việc phát triển nhanh hơn: sbt console

VD: Kyotsu là dự án lấy data cho nhiều customer khác nhau. Mỗi customer có các yêu cầu về data khác nhau. Với customer A loại data X cần có field 1,2,3 trong khi customer B cần có field 2,3,4. Kyotsu đang lưu các yêu cầu về data này dưới dạng config file. Giả sử có yêu cầu là customer A đang khác customer B như thế nào. Có thể trả lời câu hỏi này bằng cách xem data file và so sánh, nhưng việc số lượng field và file là khá nhiều và code Kyotsu cũng không có cách nào đưa ra mà không cần phải sửa code. Nhưng điều này khá dễ dàng nếu code 1 script nhỏ trong REPL

Reference:

Sbt Native thin client: https://www.scala-sbt.org/1.x/docs/sbt-1.4-Release-Notes.html#Native+thin+client

Add a Comment

Scroll Up