LITHO FACEBOOK

Tiếp tục với bài viết lần trước về architecture qua từng thời kì, tôi tìm kiếm những phương thức không phải trường phái bảo thủ để viết Android và thấy khá vui khi Facebook opensource Litho vào đầu tuần trước.

Tại sao lại là Litho

Ứng dụng Facebook cho Android không phải là tuyệt vời, nhưng nó tốt hơn nhiều so với trước đây. Năm ngoái, công ty bắt đầu làm việc trên một giao diện người dùng mới cho ứng dụng Android, gọi là Litho. Mục đích là để cải thiện hiệu suất khi scroll trên một loạt các thiết bị, và bây giờ Facebook đã có nguồn mở thư viện cho bất cứ ai sử dụng.

Litho được thiết kế nhanh hơn và hiệu quả hơn của RecyclerView của Android, hiển thị các yếu tố từ bộ dữ liệu lớn bằng cách thu thập lại các tài nguyên ngay khi rời khỏi tầm nhìn của người dùng. Thực hiện thao tác này, cùng với một số quy trình khác, đôi khi có thể gây ra sự chậm trễ nhìn thấy khi di chuyển. Bằng cách so sánh, Litho di chuyển công việc nặng đến background và tách công việc rendering trên nhiều khung hình động.

Khuôn khổ Litho đã được sử dụng trong các ứng dụng Android dành cho Facebook, Facebook Messenger, Facebook Lite và Facebook Workplace. Tham khảo mã nguồn ở link sau https://github.com/facebook/litho

Litho hiệu quả như thế nào

Kể từ khi triển khai Litho, Facebook đã cho thấy hiệu quả cuộn lên đến 35% tốt hơn trong ứng dụng của họ, mã của họ đã được test dễ dàng hơn và ứng dụng có hành vi tốt hơn về các nhiệm vụ đòi hỏi bộ nhớ như hiển thị danh sách các mục dài. Litho là mã nguồn mở hoàn chỉnh và được phân phối như một API hoàn toàn được tối ưu, sẵn sàng để sử dụng. Thông báo của Facebook đã không nói liệu nó thực sự có thể được thực hiện vào mã hiện có, nhưng với tất cả các mã được dễ dàng đặt ra, một trong những sẽ được skirmish nói rằng nó sẽ là khó khăn để thực hiện vào chỉ là về bất kỳ dự án liên quan đến nặng tải liên quan đến cuộn. Nó bây giờ đã có trên GitHub và có thể được sử dụng và cải tiến bởi bất cứ ai. Facebook cũng đang viết document để giúp các nhà phát triển học cách sử dụng Litho, mà bạn có thể tìm thấy bằng cách làm theo link dưới đây. http://fblitho.com/docs/

Đăcj tính

Litho có các đặc tính:

  • Declarative: Litho sử dụng khai báo API để define UI components. Bạn chỉ cần mô tả cách bố trí cho UI dựa trên một tập hợp các đầu vào không thay đổi và framework sẽ làm còn lại
  • Asynchronous layout: Litho có thể đo lường và bố trí giao diện người dùng của bạn trước mà không cần thread UI.
  • View flattening: Litho sử dụng Yoga để bố trí giao diện và tự động giảm số lượng ViewGroup mà UI có
  • Fine-grained recycling: Bất kỳ thành phần nào như text hoặc ảnh đều có thể được tái sử dụng và sử dụng lại ở bất kỳ vị trí nào trong UI

Implement

build.gradle

dependencies {
  // ...
  // Litho
  compile 'com.facebook.litho:litho-core:0.2.0'
  compile 'com.facebook.litho:litho-widget:0.2.0'
  provided 'com.facebook.litho:litho-annotations:0.2.0'

  annotationProcessor 'com.facebook.litho:litho-processor:0.2.0'
  
  // SoLoader 
  compile 'com.facebook.soloader:soloader:0.2.0'

  // Optional
  // For debugging
  debugCompile 'com.facebook.litho:litho-stetho:0.2.0'

  // For integration with Fresco
  compile 'com.facebook.litho:litho-fresco:0.2.0'

  // For testing
  testCompile 'com.facebook.litho:litho-testing:0.2.0'
}

Application

public class MyApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    
    SoLoader.init(this, false);
  }
}

Khai báo 1 component

final ComponentContext c = new ComponentContext(this);

    final LithoView lithoView = LithoView.create(
    	this /* context */, 
    	Text.create(c)
            .text("Hello, World!")
            .textSizeDip(50)
            .build());
    	
    setContentView(lithoView);
  }

Đánh giá

  1. Document Phần lớn document của API Facebook thường rất khó đọc so với những document của thư viện khác. Tuy nhiên với Litho thì khác, Facebook có vẻ đầu tư tử tế hơn vào mảng này, tuy mới nhưng document của Litho khá đầy đủ, dễ đọc.

  2. Hiệu năng Facebook đưa ra phép so sánh trực quan nhất có thể với kết quả 35% rồi, ko có gì để bàn cãi về hiệu năng cả.

  3. Implement, contributing Khá thú vị khi code vừa ngắn, hiệu năng lại cao hơn dùng RecyclerView truyền thống nhỉ. Tôi đang xem xét khả năng ứng dụng Litho vào trong dự án của mình. Hơn nữa, thư viện đang ở giai đoạn mới mở opensource, có kha khá issue được report và pull requests là welcome. Bạn có thể tham khảo và contribute cho mã nguồn này ngay bây giờ.

Demo

Reference Video sự kiện launch Litho của Facebook https://developers.facebook.com/videos/f8-2017/litho-a-declarative-framework-for-efficient-uis/

http://fblitho.com/docs/