Tối ưu khi viết code PHP - Phần 1

Thảo luận trong 'Lập Trình PHP' bắt đầu bởi lebichvan888, 21/9/15.

  1. Mã:
    class metz {
    var $email;
    function setEmail($data) {
    $this->email = $data;
    }
    function getEmail() {
    return $this->email;
    }
    }
    Và được sử dụng như sau:
    Mã:
    $person = new metz();
    $person->setEmail('metz'); // Thiết lập giá trị
     echo $person->getEmail(); // Lấy giá trị
    
    Đúng, theo phân tích phương thức và thuộc tính của hướng đối tượng là như thế, tuy nhiên sẽ thật là quá máy móc khi code như thế, thay vào đó bạn có thể sử dụng một phương pháp trực tiếp.
    Mã:
    $person = new metz();
    $person->email = 'metz'; // Thiết lập giá trị
    echo $person->email; // Lấy giá trị
    
    2. Đừng tạo những biến khi không cần thiết
    Rất nhiều lập trình viên khởi tạo và sử dụng những biến hoàn toàn không cần thiết, chủ yếu để làm code "sạch" và "đẹp" hơn. Nhưng trong kỹ thuật tối ưu thì không như vậy vì nó làm bạn tốn nhiều RAM hơn.

    Mã:
    $title = $_POST['title'];
    $description = $_POST['description'];
    $content = $_POST['content'];
    echo $title;
    echo $description;
    echo $content;
    
    Nếu dữ liệu nhập vào từ 3 biến đó là 200kbs ( 204800 ký tự ). Một vấn đề bình thường cho một bài viết, thì bộ nhớ khi thực hiện Script này sẽ chiếm gần 400kbs.

    Thay vào đó bạn có thể viết

    Mã:
    echo $_POST['title'];
    echo $_POST['description'];
    echo $_POST['content'];
    
    Giảm thiểu được 1/2 lượng memory phải sử dụng.

    3. Mọi biến toàn cục (global) đều tồn tại
    Mã:
    for($i=1;$i<=9;$i++){
     echo $i;
    }
    echo $i; // 10
    
    Biến $i vẫn tồn tại, hãy "xả" nó khi không cần thiết và không phải "đụng" với code bên dưới

    Mã:
    for($i=1;$i<=9;$i++){
     echo $i;
    }
    unset($i);
    
    4. Tận dụng tối đa câu truy vấn
    • Một câu truy vấn INSERT đơn
    Mã:
    "INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v1','v2','v3')"
    
    • Và khi cần INSERT vào 3 dòng dữ liệu, thông thường bạn sẽ dùng cả 3 câu truy vấn
    Mã:
    INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v1','v2','v3');
    INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v4','v5','v6');
    INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v7','v8','v9')
    
    • Sau đó thể hiện nó trong một vòng lặp for/while/foreach hoặc tệ hơn là một đệ quy
    Mã:
    for($i=1;$i<=9;$i+=3){
     $sql = "INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v".$i."','v".($i+1)."','v".($i+2)."')";
     mysql_query($sql);
    }
    
    • Và bạn phạm luôn 02 lỗi trong kỹ thuật tối ưu. Thứ nhất là tối ưu query và thứ 2 là tối ưu giá trị biến.
    • Theo INSERT query, bạn hoàn toàn có thể viết cho 1 câu duy nhất:
    Mã:
    INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v1','v2','v3'),('v4','v5','v6'),('v7','v8','v9')
    
    • Và thể hiện theo PHP:
    Mã:
    for($i=1;$i<=9;$i+=3){
     $data[] = "('v".$i."','v".($i+1)."','v".($i+2)."')";
    }
    unset($i);
    mysql_query("INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES".implode(',',$data));
    // Tìm hiểu về hàm implode()
    
    Còn tiếp....Phần 2:

    GV Huỳnh Công Đức

Chia sẻ trang này