DEVELOPER TRAINING

  • Trang chủ
  • Khóa học
  • Tutorials
    • React Native
  • Đăng ký
  • Tài liệu
    • Thường thức iPhone
    • Mạng xã hội , Social Network
    • Android, ios, Windows phone, Blackberry
    • CRM
    • ERP
    • Joomla, Wordpress, Drupal...
    • Codeigniter, Zend, Phalcon...
    • Magento, Prestashop, opencart ...
    • Tài liệu khác
  • Tuyển dụng
    • Tìm người cùng khởi nghiệp
    • Tuyển thực tập lập trình
  • Chuyển đổi số
    • Chuyển đổi số
    • Kinh tế số
    • Kinh tế chia sẻ
    • Fintech
    • Mạng xã hội
    • insurtech
    • Bất động sản 4.0

Tài liệu khác

Tài liệu

Series phản phác qui chân – luận về optimize code

  • Print

Đa số các bạn newbie thường phạm phải một sai lầm cơ bản: Quá mức quan tâm về tốc độ thực thi của code,  của ngôn ngữ lập trình. Đây là một thói quen nên bỏ!

Trong bài viết hôm nay, mình sẽ giải thích về việc tối ưu code: Optimize code một cách pro nhất! Khi nào cần optimize, khi nào không nên optimize code?

Optimize code là gì?

Optimize code (Tối ưu code) là việc chỉnh sửa/viết lại code nhằm giảm dung lượng, hạn chế input/output, tăng tốc độ thực thi, giảm lượng phần cứng cần sử dụng.

Thuở đi học, ta được học về Big O Notation, thuật toán được tối ưu sẽ chạy nhanh hơn, hoặc ít tốn bộ nhớ hơn. Đa phần các trường đại học dạy C, C++, làm việc trực tiếp với bộ nhớ, các thầy lúc nào cũng tâm niệm: Code viết ra phải càng tối ưu càng tốt.

Đi thi tin học, code viết ra chạy nhanh hơn, ít tốn bộ nhớ hơn thì sẽ được điểm cao hơn. Phỏng vấn của một số công ty lớn cũng đòi hỏi code viết ra phải tối ưu hơn. Điều này dẫn đến nhiều bạn có suy nghĩ: Phải ưu tiên tối đa việc optimize code!

comic

Trong ngành phần mềm, điều này không hề đúng! Tại sao vậy? Hãy đọc phần dưới nhé.

Khi nào không nên optimize code?

Ở bài trước về danh ngôn trong ngành phần mềm, mình có trích dẫn một câu danh ngôn của Donald Knuth về optimize code.

3

Nguyên văn câu này như sau:

Chúng ta nên bỏ qua những optimize vụn vặt, trong khoảng 97% mọi trường hợp: Optimize code sớm là nguồn gốc của mọi tội ác. Tuy vậy, chúng ta không nên bỏ qua việc optimize trong 3% còn lại.

Trong môi trường làm việc, performance chỉ là một khía cạnh của code. Như mình đã nói nhiều lần, code của bạn sẽ được đọc, được nâng cấp và bảo trì bởi nhiều người khác. Do đó, code cần phải rõ ràng, dễ đọc dễ hiểu rồi mới tính đến performance. Theo kinh nghiệm, nếu quá chú tâm vào tối ưu code, code của bạn có thể trở nên vòng vèo khó đọc.

Trong đa phần các trường hợp, sự đơn giản, tường minh của code quan trong hơn performance nhiều lần. Code tốt thật sự là code dễ đọc, dễ hiểu, dễ bảo trì. 

Ngoài ra, trong đa phần các trường hợp, ta sẽ không biết những chức năng nào cần optimize, đoạn code nào cần optimize. Nếu không xác định được việc này, optimize code một cách mù quáng sẽ giống như “thầy bói xem voi”, tốn thời gian mà chả được gì cả.

slide_3

Mình từng gặp một case như sau. Có bạn hỏi mình “Dapper performance nhanh hơn Entity Framework, web chạy chậm em có nên thay bằng EF bằng Dapper ko?”. Mình đề nghị họ dùng tool để đo performance trước.

Thời gian đọc dữ liệu từ DB chỉ là 50ms, có nhanh hơn gấp đôi cũng chỉ tiết kiệm được 25ms. Hóa ra web chậm là do gọi nhiều Ajax, load CSS/JS và hình ảnh lâu. Chỉ cần thêm cache, minify và bundle lại CSS/JS, chỉnh chất lượng ảnh là tốc độ đã tăng 2/3 lần mà ko cần sửa đụng chạm nhiều đến code.

Một số qui tắc cần nhớ khi optimize code

Như đã nói trong câu danh ngôn, chúng ta không nên optimize code sớm, chứ không phải là  không nên optimize code. Trước khi quyết định optimize code, hãy thử áp dụng các qui tắc sau nhé.

Khi quyết định optimize, làm theo những bước sau:

  1. Code phải chạy được
  2. Code phải chạy đúng
  3.  Sử dụng profiler để xác định những đoạn code chạy chậm
  4. Optimize code để code chạy nhanh hơn
  5. Xác nhận code chạy được và chạy đúng
  6. Đo lại bằng profiler để xác nhận code đã được optimize

Một lời khuyên khác của các chuyên gia về việc optimize:

  1. Đừng optimize code
  2. Đừng optimize code vội, để sau đã (Dành cho chuyên gia)
  3. Cần phải đo đạc trước khi optimize.

Một điều quan trọng nữa cần nhớ là: Hãy tự hỏi có thật sự cần optimize hay không? Lấy ví dụ, trang web bán hàng nọ có chức năng xuất report. Chức năng này chạy mất 1 tiếng đồng hồ. Chậm quá nhỉ, có lẽ bạn phải optimize? Khoan, hãy xem xét các trường hợp sau. Giả sử bạn mất 10 tiếng để optimize chức năng này, thời gian chạy xuống còn khoảng 30 phút.

opt

Nếu chức năng này được admin sử dụng mỗi ngày, sau 1 tháng họ sẽ tiết kiệm được 15 tiếng. Việc bỏ công sức ra optimize là chính xác.

Tuy nhiên, nếu như chức năng cả tháng hoặc nửa năm mới chạy một lần, thì phải mất vài năm thì công sức bạn bỏ ra optimize mới … hoàn vốn. Thay vì optimize nó, bạn nên bỏ thời gian đó để optimize các chức năng khác có ích hơn, được dùng nhiều hơn.

Ngoại lệ

Như mình đã nói, trong 97% các trường hợp các bạn không cần quan tâm đến việc optimize code. Tuy nhiên, vẫn có một số ngoại lệ (3% còn lại) mà việc optimize code khá quan trọng:

  • Code các hệ thống nhúng, bộ nhớ ít, vi xử lý nhỏ. Lúc này code cần được optimize để phù hợp với hệ thống.
  • Code phần cứng, driver, OS,… performance ở đây cực kì quan trọng.
  • Code các hệ thống real-time, cần sự chuẩn xác và nhanh tới từng millisecond.
  • Code một số thư viện/framework được nhiều người sử dụng (nén file, mapper, parser, …). Do code được sử dụng nhiều nên nếu code chạy nhanh sẽ tiết kiệm được rất nhiều thời gian của chương trình.
  • Code implement thuật toán, tham gia các kì thi.
  • Code các hệ thống rất lớn cho rất nhiều người dùng (Google, Amazon, StackOverflow, …), lúc này chỉ cần code chạy nhanh hơn 10-20% cũng đã tiết kiệm được vô số thời gian của người dùng.

server_01

Điều mình muốn nhắn nhủ sau bài viết là:

Performance của code cũng khá quan trọng, nhưng nó không phải là điều quan trọng nhất

Lập trình viên giỏi sẽ biết cách viết code chạy nhanh, biết cách optimize code

Lập trình viên xuất sắc sẽ biết khi nào cần phải optimize code, khi nào không

Một số nguồn tham khảo

  • https://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/
  • https://www.quora.com/Why-is-premature-optimization-a-bad-idea-in-software-development
  • http://c2.com/cgi/wiki?PrematureOptimization

toidicodedao

Có thể bạn quan tâm:
  • Hệ thống chấm công từ xa qua vệ tinh SAttendance và hệ thống định vị STracking
  • Hệ thống đánh giá đại lý, chi nhánh, cửa hàng SKPI ( hệ thống đánh giá thông minh trên smartphone và tablet)
  • Hệ thống giới thiệu sản phẩm, dịch vụ thông minh SCatalog và SBrochure ( hệ thống catalog và brochre thông minh trên smartphone và tablet)
  • Ứng dụng bán hàng trên smartphone, smart TV, mạng xã hội...
  • SChat là lựa chọn tuyệt vời nhất để trò chuyện và chăm sóc khách hàng của bạn
Giáo trình nghiệp vụ kế toán - chương 5 Phương Pháp Tổng Hợp - Báo Cáo Tài Chính
Bài giảng Quản trị nhân lực, quản trị nhân sự - Bài 1 Tổng Quan Về Quản Trị Nguồn Nhân Lực
Hướng dẫn tải miễn phí bản chính thức Windows 7, Windows 8.1, Windows 10, ... trực tiếp từ Microsoft
Hướng dẫn sử dụng APP QUẢN LÝ THU CHI, loại thu/chi một lần, thu/chi phổ thông
Bài giảng Quản trị nhân lực, quản trị nhân sự - Bài 7 Quản Trị Thành Tích
 

Có thể bạn chưa biết:

TUYỂN THỰC TẬP REACT NATIVE

* Trang bị kỹ năng về JS, lập trình hybrid app, sử dụng những công cụ hỗ trợ (VScode, github, sourcetree, ...)
* Thành quả mong muốn là các bạn tham gia sẽ có được kỹ năng lập trình hybrid app

Biểu mẫu đăng ký training tại đây >> http://bit.ly/2NK9YWd

TEAM MOBILE APPS - CTY DVMS

  • Prev
  • Next
  • tweet

Nhiều người quan tâm

  • Mã nguồn mạng xã hội giống y Facebook
  • Tìm co-founder cho các dự án khởi nghiệp
  • Phương pháp giải quyết phản bác
  • Gần 700 forum, trang rao vặt giúp tăng độ phủ quảng cáo, SEO, Backlink
  • Danh sách 6.500 website mua bán rao vặt, tốt để quảng cáo, SEO và tạo backlink
  • Top 10 nguồn học JavaScript trực tuyến tốt nhất

Tin mới

Sổ tay Git cơ bản cần phải biết khi đi làm 09 January 2019
Sai lầm thường mắc phải khi phát triển ứng dụng di động 15 January 2016
Microsoft trình làng Python Language Server dành cho Visual Studio Code 09 January 2019
Cách xem số điện thoại 19 August 2015
Tại sao lại sử dụng giao tiếp Serial? 22 August 2017
Cách kết nối máy ảo Genymotion với máy ảo Android Wear 09 January 2019

Blogs

  • Từ Điển Ngôn Ngữ Ký Hiệu
  • Kiểm tra nồng độ cồn trong máu
  • Kiểm soát đường huyết bằng smartphone và tablet
  • Khám phá những điều bí ẩn của vũ trụ
  • Mạng xã hội địa chỉ TIDICHI
  • Mời sinh nhật, đám cưới... nhanh và dễ dàng

Lập trình ứng dụng di động

  • Lập trình Android
  • Lập trình iOS
  • Lập trình Windows Phone
  • Lập trình BlackBerry OS
  • Lập trình BlackBerry 10
  • Lập trình J2ME
  • Lập trình game mobile
  • Đồ họa cho ứng dụng
  • Lập trình Phonegap
  • Lập trình Unity 3D
  • Lập trình Xamarin
  • Lập trình web mobile
  • Lập trình Node js

Học lập trình

  • Lập trình .NET
  • Lập trình C/C++
  • Visual C++
  • Visual C#
  • Lập trình Visual Basic
  • Visual Basic .NET
  • Lập trình Java
  • Lập trình trên Linux
  • Công cụ, ebooks .NET
  • Dự án lập trình .NET
  • Hỏi đáp về lập trình
  • Hướng dẫn cho người mới
  • Thủ thuật
  • Hỏi đáp tin học

Lập trình web

  • Lập trình PHP
  • Flash và các vấn đề
  • Thiết kế web
  • Lập trình web JSP
  • Lập trình web ASP
  • Lập trình web ASP.NET
  • HTML - CSS
  • Webmaster/ SEO
  • JavaScript / Ajax, jQuery
  • Lập trình Phalcon

Cơ sở dữ liệu

  • MS SQL Server
  • MySQL
  • Oracle
  • Các hệ CSDL khác
  • Bigdata
  • Blockchain

OpenSource Master

  • Lập trình và quản trị Joomla
  • Lập trình và quản trị Wordpress
  • Lập trình và quản trị Drupal
  • Lập trình và quản trị SugarCRM
  • Lập trình và quản trị VTigerCRM
  • Lập trình và quản trị Open ERP
  • Lập trình và quản trị Dolibarr ERP

 

Copyright © Tạo Ứng Dụng, All Rights Reserved. Developed By DVMS | All solution for smartphone & tablet.. Designed By JoomShaper

Tìm kiếm

  • Trang chủ
  • Khóa học
  • Tutorials
    • React Native
  • Đăng ký
  • Tài liệu
    • Thường thức iPhone
    • Mạng xã hội , Social Network
    • Android, ios, Windows phone, Blackberry
    • CRM
    • ERP
    • Joomla, Wordpress, Drupal...
    • Codeigniter, Zend, Phalcon...
    • Magento, Prestashop, opencart ...
    • Tài liệu khác
  • Tuyển dụng
    • Tìm người cùng khởi nghiệp
    • Tuyển thực tập lập trình
  • Chuyển đổi số
    • Chuyển đổi số
    • Kinh tế số
    • Kinh tế chia sẻ
    • Fintech
    • Mạng xã hội
    • insurtech
    • Bất động sản 4.0