31/08/2018, 15:47

React Native tại Airbnb (P4): Ngày tàn của React Native

Do có quá nhiều vấn đề về kĩ thuật và cơ cấu tổ chức, chúng tôi đã quyết định ngừng dùng đến React Native và dồn hết tâm huyết vào lại cho native. Mặc dù có rất nhiều team dựa trên React Native và lên kế hoạch sử dụng đến nó trong tương lai gần, căn bản là chúng tôi vẫn chưa đạt ...

Do có quá nhiều vấn đề về kĩ thuật và cơ cấu tổ chức, chúng tôi đã quyết định ngừng dùng đến React Native và dồn hết tâm huyết vào lại cho native. 

Mặc dù có rất nhiều team dựa trên React Native và lên kế hoạch sử dụng đến nó trong tương lai gần, căn bản là chúng tôi vẫn chưa đạt được mục tiêu ban đầu. Bên cạnh đó, còn tồn đọng quá nhiều vấn đề về cả mặt kĩ thuât và tổ chức mà chúng tôi không thể giải quyết được, làm cho quá trình áp dụng React Native trở nên khó khăn và trắc trở hơn nữa.

Chính vì thế, chúng tôi sẽ kết thúc kỉ nguyên React Native tại Airbnb và quyết tâm đầu tư mọi nỗ lực vào native một lần nữa.

Thất bại trong việc đạt mục tiêu

Di chuyển nhanh hơn

Khi React Native hoạt động được đúng như kì vọng, các kĩ sư có thể hoạt động trơn tru mượt mà hơn cả máy. Tuy nhiên, họ vướng phải không ít vấn đề về cả mặt kĩ thuật lẫn tổ chức mà chúng tôi đã nêu khá kĩ trong toàn bộ series.

Maintain Quality Bar

Mới đây, khi React Native đã đủ chín và chúng tôi cũng đã tích luỹ được nhiều kinh nghiệm, chúng tôi đã đạt được môt số thứ mà mình không nghĩ là có thể. Chúng tôi đã build nên được các shared element transition, parallax, và có thể cải thiệc tối đa performance của một số screen thường xuyên bị drop frame. Tuy nhiên, một số khó khăn về mặt kĩ thuật khác như initialization và async render đầu tiên làm cho việc đạt được một số mục tiêu nhất định trở nên khó khăn hơn nhiều. Việc thiếu resources cả nội bộ lẫn bên ngoài làm mọi thứ không khá lên nổi.

Chỉ viết Code một lần

Mặc dù code trong các React Native feature dùng được trên hầu hết các platform, chỉ có một phần nhỏ trong app của chúng tôi là React Native. Ngoài ra, nó đòi hỏi một lượng lớn bridging infrastructure để giúp các kĩ sư product làm việc hiệu quả hơn. Do đó mà, chúng tôi cho ra supporting code trên cả ba platform thay vì chỉ 2. Chúng tôi nhìn thấy được tiềm năng share code sharing giữa mobile và web và có đã có thể share một vài npm package, nhưng quan trọng là, nó không mang nhiều ý nghĩa quan trọng lắm.

Cải thiện trải nghiệm cho Developer

Phần trải nghiệm cho developer với React Native là một hỗn hợp phức tạp. Trong một số trường hợp, ví dụ như thời gian build, mọi thứ sẽ trở nên dễ dàng hơn nhiều. Tuy nhiên , với số khác, như debugging, mọi thứ sẽ tệ hơn nhiều (chi tiết trong Phần 2 của series).

Kế hoạch 

Vì chúng tôi không thể đạt được mục tiêu của mình, dường như React Native không còn là lựa chọn đúng đắn nữa. Chúng tôi đang trong quá trình làm việc với các team để làm nên một kế hoạch chuyển giao thật trơn tru. Các feature React Native đã được tạm ngừng sử dụng và thực hiện kế hoạch chuyển hầu hết các screen đông traffic sang native đến cuối năm. Ngoài ra cũng có không ít sự thay đổi trong thiết kế bắt buộc phải có. Team native infrastructure của chúng tôi sẽ support React Native đến hết năm 2018. Trong năm 2019, chúng tôi sẽ giảm thiểu support và giảm lưu lượng React Native như khởi động runtime trên launch.

Tại Airbnb, chúng tôi tin tưởng vào open source. Chúng tôi chủ động dùng và cho đi rất nhiều project open source khắp thế giới và làm open source cho cả những project react native nữa. Vì không còn tiếp tục với React Native nữa, chúng tôi sẽ không thể maintain các React Native repo được nữa. Để có lợi nhất cho community, chúng tôi sẽ chuyển một só open source React Native sang react-native-community, như chúng tôi đã chuyển react-native-maps và sắp tới sẽ đến native-navigation và lottie-react-native.

Nó không hoàn toàn tệ

Mặc dù chúng ta ta không thể đạt được mục tiêu với React Native, các kĩ sư React Native nhìn chung đều có trải nghiệm khá tốt về nó. Trong số họ:

  • 60% nói rằng có có trải nghiệm rất tốt với nó.
  • 20% thì cảm thấy khá tôt.
  • 15% cảm thấy hơi tệ.
  • 5% cảm thấy thật sự tệ.

63% số kĩ sư nói rằng nếu được chọn lại họ vẫn sẽ chọn React Native và gần 74% đều cân nhắc sử dụng React Native cho project sau.

Các kĩ sư đã viết trên dưới 80,000 dòng product code trên hơn 220 screen cũng như 40,000 dòng javascript infrastructure. Ngoài ra, chúng tôi có khoảng 10x số lượng code và 4x số screen trên mỗi native platform.

React Native đang ngày càng tân tiến hơn

Series bài viết này kể toàn bộ trải nghiệm của chúng tôi với React Native. Tuy nhiên, Facebook và cả các công đồng React Native đang nỗ lực đưa React Native hoạt động trong các hybrid app trên quy mô lớn. React Native đang phát triển nhanh hơn bao giờ hết. Trong năm vừa qua đã có hơn 2500 commit và Facebook vừa mới tuyên bố rằng họ đã phát hiện ra một số khó khăn nhất định, tương tự với những cái chúng tôi đã gặp phải. Kể cả khi chúng tôi không còn bước tiếp với React Native, chúng tôi vẫn sẵn sàng tiếp tục theo dõi chúng vì những gì chúng tôi đạt được về mặt kĩ thuật với React native sẽ chuyển hoá thành những thành tựu thực ngoài thực tế với những ai đang sử dụng product của chúng tôi.

Cái mất

Chúng tôi thống nhất React Native thành các app lớn hiện có và di chuyển rất nhanh chóng. Nhiều trong số những vấn đề mà chúng tôi mắc phải là do phương pháp hybrid model mà chúng tôi đang áp dụng. Tuy nhiên, qui mô hiện tại chỉ cho phép chúng tôi giải quyết được một số vấn đề nhỏ lẻ mà các cônng ty nhỏ không sắp xếp được thời gian để giải quyết. Việc chạy React Native suôn sẻ với native là hoàn toàn có thể nhưng rất khó khăn. Mọi công ty đang sử dụng React Native đều được trải nghiệm function độc quyền của team mình, các app có sẵn, yêu cầu về sản phẩm, và sự phát triển của React Native.

Khi mọi thứ hoạt động cùng nhau, iteration speed, chất lượng, and trải nghiệm của developer đạt được những mục tiêu và kì vọng đề ra. Đó là lúc mà chúng tôi ngỡ như mình sẽ là người thay đổi diện mạo của ngành mobile vậy. Mặc dù những trải nghiệm này là cực kì tích cực, nhưng khi cân bằng được ưu điểm và khuyết điểm cộng thêm những nhu cầu và resource hiện tại từ team Kĩ sư của chúng tôi thì chúng tôi đã quyết định nó không còn phù hợp với mình nữa.

Quyết định xem có nên dùng platform mới hay không có lẽ là quyết định khó khăn nhất, phụ thuộc hoàn toàn vào nhưng đặc thù riêng của team. Những trải nghiệm trước đây không còn phù hợp với chúng tôi nữa. Trên thực tế, rất nhiều công ty vẫn tiếp tục sử dụng nó rất thành công và là sự lựa chọn tuyệt vời của nhiều tập đoàn khác.

Mặc dù chúng tôi không bao giờ ngừng đầu tư phát triển thêm vào native, việc từ dã React Native đã giải phóng được rất nhiều resource làm cho native tốt hơn thế nữa. Hãy đón xem phần cuối của series để xem được trong native của chúng tôi có gì mới.

TopDev via Medium

  React Native tại Airbnb (P3): Xây dựng một Mobile Team cross-platform
  Inspectorio đã thành công vòng gọi vốn "Series A" trị giá 10 triệu đô la Mỹ
0