optimizing source code

35
OPTIMIZING SOURCE CODE Thực hiện: Nhóm 24

Upload: kieve

Post on 09-Feb-2016

63 views

Category:

Documents


0 download

DESCRIPTION

OPTIMIZING SOURCE CODE. Thực hiện: Nhóm 24. 1. 2. 3. 5. 4. Tại sao cần tối ưu mã nguồn ?. Phương pháp tối ưu hóa giao diện. Phương pháp tối ưu hóa xử lý. Các công cụ hỗ trợ tối ưu hóa mã nguồn. Phương pháp tối ưu hóa kiến trúc. Nội dung. Tại sao cần phải tối ưu mã nguồn ?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: OPTIMIZING  SOURCE CODE

OPTIMIZING SOURCE CODE

Thực hiện: Nhóm 24

Page 2: OPTIMIZING  SOURCE CODE

Tại sao cần tối ưu mã nguồn ?1

Phương pháp tối ưu hóa giao diện.2

Phương pháp tối ưu hóa xử lý.3

Nội dung

Các công cụ hỗ trợ tối ưu hóa mã nguồn5

Phương pháp tối ưu hóa kiến trúc.4

Page 3: OPTIMIZING  SOURCE CODE

Tại sao cần phải tối ưu mã nguồn ?

Trình biên dịch

Microsoft Visual Studio

Netbeans

Eclipse

Lập trình bằng hình thức trực quan.

Mã nguồn kém tối ưu.

Page 4: OPTIMIZING  SOURCE CODE

Kỹ năng tối ưu mã nguồn là một kỹ năng rất cần thiết đối với lập trình viên.

Một đoạn mã nguồn tốt sẽ tận dụng tối đa ưu điểm của ngôn ngữ và khả năng xử lý của hệ thống.

Hầu hết các trình biên dịch phổ biến hiện nay đều hỗ trợ tốt việc tối ưu mã khi biên dịch.

Tuy nhiên, để đạt hiệu quả tốt nhất, lập trình viên cũng nên tập thói quen tối ưu mã lệnh mỗi khi viết chương trình.

Tại sao cần phải tối ưu mã nguồn ?

Page 5: OPTIMIZING  SOURCE CODE

Vì sao nên tối ưu hoá giao diện ?◦ Người dùng chủ yếu tương tác với hệ thống thông

qua giao diện◦ Chương trình phải có bố cục chặt chẽ.◦ Chương trình phải tiện dụng, thân thiện, dễ hiểu

và dễ sử dụng.◦ Chương trình phải có tính thẩm mỹ cao, tạo ấn

tượng đối với người dùng. Giao diện như thế nào gọi là tối ưu ?

Tối ưu hóa giao diện

Page 6: OPTIMIZING  SOURCE CODE

Tối ưu hóa giao diện

Page 7: OPTIMIZING  SOURCE CODE

Tối ưu hóa giao diện

Page 8: OPTIMIZING  SOURCE CODE

Tối ưu hóa giao diện

Page 9: OPTIMIZING  SOURCE CODE

Tối ưu hóa giao diện

Page 10: OPTIMIZING  SOURCE CODE

Tối ưu hóa giao diện

Page 11: OPTIMIZING  SOURCE CODE

Một số chuẩn–quy ước khi thiết kế giao diện:◦ Các ứng dụng đầu tiên nên có hiển thị giới thiệu về

ứng dụng.◦ Hầu hết các màn hình, hộp thoại nên có các nút

Minimize, Restore, Close.◦ Icon ứng dụng phải thích hợp thể hiện được chức

năng mà nó có thể làm.◦ Tất cả các màn hình hộp thoại cần phải có chú

thích thích hợp theo ngữ cảnh sử dụng.◦ …

(trích GUI Testing Handbook )

Tối ưu hóa giao diện

Page 12: OPTIMIZING  SOURCE CODE

Phương pháp chung:◦ Tuân theo các chuẩn về giao diện trong quá trình

thiết kế.◦ Trong quá trình lấy yêu cầu, sử dụng các

prototype sẽ giảm thiểu rủi ro trong quá trình thiết kế giao diện.

◦ Thiết kế giao diện có thể thay đổi tuỳ theo mục đích của người sử dụng.

◦ Kiểm thử giao diện bằng các checklist.◦ Kiểm thử giao diện trên số lượng lớn người sử

dụng và thu thập ý kiến phản hồi.

Tối ưu hóa giao diện

Page 13: OPTIMIZING  SOURCE CODE

Tối ưu hóa xử lý

Tối ưu hóa thuật toán.

Tối ưu hóa dữ liệu.

Page 14: OPTIMIZING  SOURCE CODE

Đơn giản hóa các biểu thức toán học.◦ CPU sẽ xử lý phép toán cộng, trừ nhanh hơn nhân,

chia.◦ CPU xử lý tính toán với số nguyên (integer) chậm

hơn số thực (float, double).◦ Trong một số trường hợp nhân/chia số nguyên, sử

dụng toán tử dời bit (bit shifting) sẽ nhanh hơn. VD: A *= 128 A <<= 7 Trong C/C++, ta có thể tối ưu bằng cách dùng trực

tiếp Assembly trong code như sau:__asm shl A,7;

Tối ưu hóa thuật toán

Page 15: OPTIMIZING  SOURCE CODE

Tối ưu việc sử dụng biến tạm◦ Sử dụng biến tạm sẽ làm giảm tốc độ tính toán.◦ Để hạn chế điều này, ta nên tách các biểu thức

phức tạp thành các biểu thức nhỏ gọn hơn. VD: Bài toán hoán vị 2 số A = 7; B = 8 (int)

Tối ưu hóa thuật toán

int temp = A;A = B;B = temp;

A = A^B;B = A^B;A = A^B;

A = A + B;B = A - B;A = A – B;

o Các trình biên dịch ngày nay đã hỗ trợ các cơ chế giúp tối ưu chương trình theo cách này khi biên dịch mã lệnh.

Page 16: OPTIMIZING  SOURCE CODE

Tối ưu các biểu thức điều kiện và luận lý.◦ Những điều kiện dư thừa có thể làm chậm việc tính

toán và gia tăng kích thước mã lệnh.◦ Đưa ra các điều kiện có xác xuất xảy ra cao nhất,

và tính toán nhanh nhất lên đầu biểu thức.◦ VD :

Biểu thức logic: ((A||B) && C) (C && (A||B)) Kiểm tra một giá trị thuộc 1 miền giá trị cho trước:

Tối ưu hóa thuật toán

if (p <= max && p >= min && q <= max && q >= min) { //thực hiện khi thoả miền giá trị} else { //thực hiện khi không thoả miền giá trị}

if (p > max || p < min || q > max || q < min) { //thực hiện khi thoả miền giá trị }

else { //thực hiện khi không thỏa miền gt }

Page 17: OPTIMIZING  SOURCE CODE

Tối ưu các biểu thức điều kiện trùng lặp.

Tối ưu hóa thuật toán

if ((mydata->MyFunc() ) < min){

// ...}else if ((mydata->MyFunc() ) > max){ // ...} int temp_value = mydata->MyFunc();

if (temp_value < min){ // ...}else if (temp_value > max){ // ...}

Page 18: OPTIMIZING  SOURCE CODE

Tối ưu các vòng lặp.◦ Việc lạm dụng các vòng lặp là 1 nguyên nhân làm

giảm tốc độ chương trình.◦ Đối với vòng lặp có số lần lặp nhỏ, ta không nên

dùng vòng lặp.◦ Đối với các vòng lặp phức tạp, cần hạn chế việc

cấp phát các biến nội bộ và các phép tính lặp lại bên trong vòng lặp mà không liên quan đến biến đếm lặp.

◦ Đối với vòng lặp từ 0 đến n phần tử, nên thực hiện việc lặp từ giá trị n trở về 0

◦ Nên sử dụng ++i (--i) thay vì i++ (i--)

Tối ưu hóa thuật toán

Page 19: OPTIMIZING  SOURCE CODE

Tối ưu các vòng lặp.◦ VD:

Tối ưu hóa thuật toán

int students_number = 10000;for( int i = 0; i < students_number; i++ ){ //hàm MyFunc mất nhiều thời gian thực hiện double sample_value = MyFunc(students_number); CalcStudentFunc(i, sample_value);}

int students_number = 10000;double sample_value = MyFunc(students_number);for( int i = 0; i < students_number; i++ ){ CalcStudentFunc(i, sample_value);}

Page 20: OPTIMIZING  SOURCE CODE

Là tiến trình xác định, nhóm các thuộc tính và các hành động liên quan đến một thực thể đặc thù, xét trong mối tương quan với ứng dụng đang phát triển.

VD: Ứng dụng bán xe◦ Thuộc tính

Tên, Số lượng xe bán được, Tiền hoa hồng◦ Hành độngNhập tên nhân viên bán xeNhập số lượng xeTính tiền hoa hồng …

Đâu là những thuộc tính và những hành động cần thiết cho một vấn đề đặt ra?

Tối ưu hóa dữ liệu Sự trừu tượng hóa dữ liệu

Page 21: OPTIMIZING  SOURCE CODE

Thuận lợi:◦ Tập trung vào vấn đề.◦ Xác định những đặc tính thiết yếu và những hành

động đòi hỏi.◦ Giảm thiểu những chi tiết không cần thiết.

Việc trừu tượng hóa dữ liệu là cần thiết, bởi vì không thể mô phỏng tất cả các hành động và thuộc tính.

Tối ưu hóa dữ liệuSự trừu tượng hóa dữ liệu

Page 22: OPTIMIZING  SOURCE CODE

Data Structure: Phơi bày dữ liệu ra và không có định nghĩa về phương thức (functions).

Object: Ẩn dữ liệu (Data) và phơi bày ra các phương thức trên dữ liệu của nó.

Tối ưu hóa dữ liệuData Structure & Object

Page 23: OPTIMIZING  SOURCE CODE

Code Thủ tục (Procedural code): ◦ Sử dung Data Structure.◦ Dễ để thêm một function vì nó không ảnh hưởng đến

các Data Structure đã có.◦ Khó để thêm một Data Structure vì tất cả các

function phải thay đổi. Code hướng đối tượng (Object-oriented):

◦ Sử dụng Object.◦ Dễ để thêm một Class vì tất cả các function của các

Class đã có không thay đổi.◦ Khó để thêm một function vì phải thêm ở tất cả

Class.

Tối ưu hóa dữ liệuData Structure & Object

Page 24: OPTIMIZING  SOURCE CODE

Memcached

Các công cụ hỗ trợ

Page 25: OPTIMIZING  SOURCE CODE

Giới thiệu chung Phân phối bộ nhớ cache Kiến trúc Memcached DEMO cài đặt và thực hiện các thao tác cơ

bản trên Memcached (ngôn ngữ PHP)

DEMO MEMCACHED

Page 26: OPTIMIZING  SOURCE CODE

Free & open source được phát triển bởi Danga Interactive for LiveJournal.

High-performance, distributed memory object caching system (hệ thống cache phân phối đối tượng bộ nhớ hiệu năng cao)

Nó chỉ là bộ lưu trữ các record “key-value” (lấy từ việc đọc DB, từ các hàm gọi API, ...) trong bộ nhớ chính.

Hướng sử dụng: tăng tốc cho các ứng dụng web động bằng việc giảm tải cơ sở dữ liệu thông qua việc lưu trữ bản sao các đối tượng (objects) và dữ liệu được truy cập nhiều lần trong RAM để giảm thiểu số lần phải đọc từ nguồn dữ liệu ngoài (database, xml, …).

Giới thiệu chung - 1

Page 27: OPTIMIZING  SOURCE CODE

Thiết kế đơn giản của nó đẩy mạnh quá trình tiển khai, phát triển dễ dàng và giải quyết được nhiều vấn đề liên quan đến lượng dữ liệu lưu trữ lớn.

Đa số ngôn ngữ đều có các hàm API hỗ trợ cơ chế Memcached.

Hầu hết các trang web lớn trên thế giới như: Youtube, Facebook, Wikipedia, Flickr, Twitter…đều sử dụng.

Giới thiệu chung - 2

Page 28: OPTIMIZING  SOURCE CODE

Phân phối bộ nhớ

Mỗi server thực thi nhiệm vụ hoàn toàn độc lập nhau.

Chỉ dùng được tối đa là 64MB cache.

Tất cả các server làm việc trên một vùng logic chứa bộ nhớ chung cho tất cả.

Mỗi item nhất định được lưu trữ và luôn được lấy từ cùng 1 vị trí trên toàn bộ website.Tổng kích thước cache sử dụng tăng gấp đôi.

Page 29: OPTIMIZING  SOURCE CODE

Kiến trúc hệ thống - 1 Hệ thống sử dụng kiến trúc server-client:

◦Server: quản lý mảng các “key-value”◦Client: thao tác trên mảng “key-value” và

try vấn trên nó.

Page 30: OPTIMIZING  SOURCE CODE

Kiến trúc hệ thống - 2 Cơ chế liên lạc Client-Server:

◦ Client liên lạc với Server qua tên và port của dịch vụ (mặc định là 11211).

◦ Nếu một client muốn set hay get một giá trị tương ứng với một key nào, đầu tiên dựa vào key tính toán ra một “hash of key” để xác định server nào đang giữ giá trị của key đó liên lạc với server.

◦ Server sẽ tính toán 1 “hash of key” thứ hai để quyết định vị trí để lưu trữ hay đọc giá trị tương ứng.

◦ Nếu tất cả các thư viện sử dụng trên client có cùng một thuật toán “hashing” (băm) để xác định server thì các client có thể đọc được các dữ liệu được cached từ các client khác lý tưởng.

Page 31: OPTIMIZING  SOURCE CODE

Hướng dẫn cài đặt Cài đặt cho WINDOWS Cài đặt để sử dụng cho ngôn ngữ PHP

Page 32: OPTIMIZING  SOURCE CODE

Cài đặt trên WINDOWS Tải về memcached-win32 Cài đặt:

◦ Giải nén và chép memcached.exe vào một thư mục (C:\memcached chẳng hạn).

◦ Để cài đặt dùng lệnh (chạy từ commandline) C:\memcached\memcached.exe -d install

◦ Để start dịch vụ: C:\memcached\memcached.exe -d start

Page 33: OPTIMIZING  SOURCE CODE

Cài đặt trên cho PHP Chép tập tin php_memcache.dll vào thư

mục chứa Extensions của PHP. Nếu chưa có tập tin trên có thể tìm và download phiên bản phù hợp với phiên bản PHP.

Tìm file cấu hình php.ini của PHP và thêm vào: extension=php_memcache.dll.

Khởi động lại Apache. Hoàn thành. Có thể sử dụng Memcached.

Page 34: OPTIMIZING  SOURCE CODE

Q & A

?

Page 35: OPTIMIZING  SOURCE CODE