header-object

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

  
class metz {
  var $email;
  function setEmail($data) {
    $this->email = $data;
  }
  function getEmail() {
    return $this->email;
  }
}
  

Và được sử dụng như sau:

$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.

$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.

 
$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

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

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

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
"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
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
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:
INSERT INTO `table`(`f1`,`f2`,`f3`) VALUES('v1','v2','v3'),('v4','v5','v6'),('v7','v8','v9')
  • Và thể hiện theo PHP:
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: http://danweb.vn/lap-trinh-website/php-mysql/359-toi-uu-khi-viet-code-php-phan-2.html

GV Huỳnh Công Đức

Thêm ý kiến


Security code
Làm mới


2

Facebook

Thống kê truy cập

Hiện có 398 khách đang truy cập
2546524