CPU hôm nay nhanh hơn máy năm 2005 cả trăm lần, RAM nhiều gấp hàng chục lần, ổ đĩa đọc nhanh gấp nghìn lần. Vậy mà một trình soạn thảo văn bản vẫn mất vài giây để mở, và một trình duyệt vẫn ăn vài GB bộ nhớ chỉ với dăm thẻ. Toàn bộ phần tăng tốc phần cứng đã đi đâu?
Định luật ẩn: tài nguyên rẻ thì người ta tiêu hoang
Khi bộ nhớ đắt, lập trình viên đếm từng byte, vì phải thế. Khi bộ nhớ rẻ, việc tối ưu bộ nhớ không còn đáng công so với việc ra thêm tính năng và ra nhanh hơn đối thủ. Đây là lựa chọn kinh tế hợp lý của từng đội — không ai sai cả — nhưng cộng dồn qua hàng nghìn quyết định như vậy thành phần mềm phình to không ngừng. Có một câu nói cũ trong ngành: phần mềm nở ra để lấp đầy mọi tài nguyên sẵn có, và phần cứng nhanh lên bao nhiêu thì phần mềm cũng chậm lại bấy nhiêu.
Nhiều lớp trừu tượng chồng lên nhau
Một ứng dụng để bàn hiện đại có thể là: một giao diện web chạy trong một trình duyệt rút gọn, đóng gói cùng một bộ chạy JavaScript đầy đủ, gọi xuống các thư viện gốc, rồi mới tới hệ điều hành. Mỗi lớp đều có lý do tồn tại chính đáng — thường là để lập trình viên viết một lần chạy được trên Windows, macOS và Linux — nhưng mỗi lớp đều lấy phần của nó. Cái tiện cho người viết được trả bằng tài nguyên của người dùng, và người dùng thì không có mặt trong cuộc họp quyết định đánh đổi đó.
Đo trước khi trách
Cảm giác "nặng" thường đến từ độ trễ chứ không phải thông lượng. Người dùng chịu được một chương trình tính toán lâu nếu biết nó đang làm việc lớn; nhưng họ rất ghét giao diện đơ nửa giây mỗi khi bấm một nút, vì nó phá vỡ cảm giác điều khiển. Có những ngưỡng tri giác khá ổn định:
- Dưới 100ms — cảm giác tức thì, như thể máy phản ứng cùng lúc với tay bạn.
- Khoảng 1 giây — vẫn liền mạch nhưng đã thấy có chờ.
- Trên 10 giây — người dùng bỏ đi làm việc khác, và mất luôn mạch chú ý.
Nghịch lý là một chương trình "nhẹ" về tài nguyên nhưng phản hồi 300ms mỗi thao tác lại bị cảm nhận là nặng hơn một chương trình ngốn nhiều RAM nhưng luôn phản hồi tức thì. Người dùng đo bằng cảm giác chờ, không bằng con số trong trình quản lý tác vụ.
Điều bạn làm được
Với người dùng: chọn công cụ gọn cho việc làm hằng ngày — thứ bạn mở hàng chục lần mỗi ngày đáng để cân nhắc kỹ hơn thứ mỗi tháng dùng một lần. Và đừng để những phần mềm nặng chạy nền nếu bạn hiếm khi mở chúng; mỗi thứ chạy nền đều lấy phần của nó ngay cả khi bạn không nhìn tới.
Với người viết phần mềm: đo độ trễ ở đúng thao tác mà người dùng lặp nhiều nhất, tối ưu quyết liệt đúng chỗ đó, và để yên phần còn lại. Tối ưu chỗ không ai chạm tới là lãng phí; bỏ mặc chỗ người dùng chạm nghìn lần mỗi ngày là thứ khiến cả sản phẩm bị gọi là "nặng".
Thảo luận