Tôi quen với việc tối ưu hóa. tôi thấy các chương trình của người khác với một đôi mắt khác - đây là của tôi:
Thông thường, vi mô hóa được coi là không có giá trị với lời giải thích sau: nó có thể tăng tốc chương trình ít hơn một phần trăm, nhưng không ai quan tâm đến sự gia tăng nhỏ đó - đó chỉ là quá ít thay đổi để được chú ý.
Điều buồn cười là, một thay đổi như vậy dẫn đến 99%. mười thay đổi như vậy làm cho chương trình nhanh hơn đáng chú ý. đối với nhiều kỹ sư, những thay đổi trong cách tiếp cận viết chương trình của họ có thể khiến chương trình thực thi nhanh hơn nhiều lần. chỉ cần nhận thức được hiệu quả và viết theo cách đó có thể làm cho chương trình của bạn nhanh hơn nhiều lần mà không cần phải làm thêm. lợi ích như vậy không phải là tối ưu hóa vi mô, imo.
lưu ý: tôi không bao giờ đề xuất tối ưu hóa theo ngữ cảnh theo ngữ cảnh trong cuộc thảo luận này.
Hơn nữa, có thể có một số trình xử lý sự kiện bắn một nghìn lần mỗi giây và thoát ra rất nhanh - trước khi nó được bắn lại. Không ai quan tâm nó nhanh đến mức nào - làm cho nó nhanh hơn không thể được ghi nhận, bởi vì nó đã "nhanh như có thể quan sát được".
và có khả năng nó đã thực hiện nhiều công việc hơn mức cần thiết vì 1kHz cao hơn nhiều so với nhiều trường hợp yêu cầu. nguồn xử lý sự kiện này là gì và tác dụng của nó là gì? nếu chỉ đơn giản là cập nhật giao diện người dùng và các sự kiện có thể được thu thập và kết hợp lại, thì công văn 1kHz chắc chắn là quá mức cần thiết (hơn 1% - giống như 25x). đối với một hệ thống có các nguồn mulitple và được truyền nối tiếp, thì 1kHz có thể không đủ nhanh (ví dụ MIDI).
Tuy nhiên, trong thiết bị di động, tiêu thụ năng lượng là một yếu tố quan trọng. Trình xử lý sự kiện tương tự được tối ưu hóa để chạy nhanh hơn mười phần trăm sẽ dẫn đến tiêu thụ ít năng lượng hơn và đó là thời lượng pin dài hơn và thiết bị hoạt động lâu hơn. Làm thế nào chính xác là phán đoán sau về các thiết bị di động? Có bất kỳ ví dụ thực tế cuộc sống nào xác nhận hoặc từ chối nó?
dựa trên các chương trình tôi đã xem, không có nhiều người xem xét (hoặc quan tâm đến) những tối ưu hóa đó, mặc dù việc thay đổi cách tiếp cận của bạn đối với các chương trình viết có thể mang lại lợi ích đáng kinh ngạc (> 10 hoặc nhanh hơn nhiều). nhiều thứ mà tôi đã thấy (ở phía phát triển ứng dụng) chỉ cần viết sau đó thực hiện phương pháp từ trên xuống hoặc "mưa đá" khi (/ nếu) các vấn đề về hiệu suất bắt kịp với chúng. tương tự như vậy, nhiều người thậm chí sẽ không dành thời gian để lập hồ sơ cho đến khi xảy ra như vậy. vào lúc đó, tiếng ồn của rất nhiều sự thiếu hiệu quả khiến cho việc lấy thông tin hữu ích từ một hồ sơ rất khó khăn. các ví dụ về phương pháp tiếp cận mưa đá sẽ là tối ưu hóa các khu vực sai (có hoặc không tìm kiếm các khu vực có vấn đề), hoặc chỉ ném thêm lõi vào các khu vực có vấn đề; điều này xảy ra thay vì sửa chữa sự thiếu hiệu quả hiện có.
đối với chương trình hiện có điển hình (trong số các chương trình di động tôi đã thấy), tối ưu hóa không phải là mối quan tâm cao khi nó được viết. vì vậy "có" chúng (trong trường hợp điển hình) đáng giá thời gian, miễn là nó nằm trong ngân sách và là một ưu tiên. trong trường hợp đó, mười thay đổi đó làm cho chương trình nhanh hơn đáng kể có thể được thực hiện trong vài giờ và ít hơn một ngày.
"Viết một cách lười biếng và hồ sơ khi nhìn lại" vì hành động duy nhất để cải thiện chương trình là một ý tưởng tồi tệ: dành thời gian để học cách viết một chương trình hiệu quả (vì nó được viết, chứ không phải bằng cách kết hợp nó vào cuối) cách tiếp cận (imo); sử dụng đúng thuật toán, cấm sao chép lãng phí, phân bổ, tính toán (+ nhiều, nhiều danh mục khác). Tất nhiên, phân tích hiệu suất khi nhìn lại có giá trị của nó, nhưng nếu bạn viết chương trình để có hiệu quả ngay từ đầu, bạn sẽ có một mức độ hiệu quả hoàn toàn mới bởi vì bạn học được nhiều và xem xét và đánh giá việc thực hiện từ nhiều khía cạnh.
một điều nữa là các chương trình nên (thường) được viết để sử dụng lại, một chương trình được viết kém sẽ đưa ra các thay đổi có thể phá vỡ chương trình của khách hàng khi không hiệu quả (hoặc vẫn không hiệu quả để tránh phá vỡ các chương trình hiện có).
Một lợi ích tuyệt vời của việc xem xét nó khi bạn viết là bạn có một ý tưởng rất rõ ràng về cách chương trình sẽ hoạt động (mặc dù không phải là một bức tranh hoàn chỉnh), bạn có thể sử dụng thông tin này để hỗ trợ thiết kế giao diện và cách lưu trữ dữ liệu của nó . sự thật là, một kỹ sư có thể thực hiện một cái gì đó nhanh hơn vài lần (ví dụ> 10 lần) so với các giải pháp "một kích thước phù hợp với tất cả" tiêu chuẩn được cung cấp với HĐH.
cuối cùng, nó cũng có giá trị vượt ra ngoài các thiết bị di động. Có rất nhiều chương trình không hiệu quả ngoài kia, được viết với suy nghĩ rằng phần cứng sẽ nhanh hơn trong hai năm (lý do thường xuyên, ngay cả đối với các chương trình được viết ngày hôm nay!). Trong khi đó không phải là không chính xác , nó quá lạc quan. đồng thời, song song hóa có mục đích nhưng đó là "giải pháp mặc định" sai cho nhiều chương trình. nhiều trong số các chương trình hiện tại có thể được cải thiện tốt nhất bằng cách loại bỏ sự thiếu hiệu quả hiện có trước tiên.
vì vậy ... thường có hàng tấn các trường hợp 1%, 2%, 7% (và tệ hơn nhiều) trong thế giới thực. sửa chúng hoặc (quan trọng hơn) không viết / phơi bày chúng ở nơi đầu tiên có thể mang lại lợi ích lớn. nhiều trường hợp có thể dễ dàng xác định vị trí và sửa chữa (với điều kiện kỹ sư có một số kinh nghiệm với việc này). tuy nhiên, nó thực sự có thể là một nỗi đau để sửa chữa và kiểm tra lại sau khi thực tế. nếu một chương trình là tối ưu, lý tưởng nhất là nó sẽ được viết theo cách đó ngay từ đầu.
với tư cách là người dùng cuối, thật khó chịu khi liên tục chờ đợi các chương trình chậm và ném hai lần phần cứng vào các vấn đề được tạo ra bởi các chương trình chậm / không hiệu quả: Q: "bạn sẽ làm gì bây giờ khi bạn có gấp đôi lõi và gấp đôi bộ nhớ?" Trả lời: "lấy lại khả năng đáp ứng và năng suất tôi có trước khi tôi nâng cấp phần mềm của mình - đó là về nó". khá bất cẩn của nhà phát triển (imho).