2010-01-03 38 views
6

Gần đây tôi đã bắt đầu làm việc trên một CMS nhỏ. Tôi thường phát triển các ứng dụng .NET trong C#, và tôi rất quen với việc bình luận các trường và phương thức của mình. Người bạn của tôi nói với tôi rằng việc có nhận xét trong các tập lệnh PHP là khá xấu, vì PHP là động và được phân tích cú pháp khi được yêu cầu, vì vậy việc phân tích các nhận xét sẽ mất nhiều thời gian hơn.PHP - Ghi chú quá mức?

Tuyên bố này có áp dụng cho trường hợp của tôi, nhận xét mọi phương pháp và trường không?

Ví dụ về một trong các lớp học của tôi:

<?php 
/* 
*  jWeb 
*  Copyright (C) 2010 AJ Ravindiran 
* 
*  This program is free software: you can redistribute it and/or modify 
*  it under the terms of the GNU General Public License as published by 
*  the Free Software Foundation, either version 3 of the License, or 
*  (at your option) any later version. 
* 
*  This program is distributed in the hope that it will be useful, 
*  but WITHOUT ANY WARRANTY; without even the implied warranty of 
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
*  GNU General Public License for more details. 
* 
*  You should have received a copy of the GNU General Public License 
*  along with this program. If not, see <http://www.gnu.org/licenses/>. 
*/ 

/** 
* Controls database connections. 
* 
* @author AJ Ravindiran 
* @version 1.0.0 Jan-02-2010 
*/ 
class database { 
    /** 
    * The database connection ip address. 
    * @var string 
    */ 
    private $host = ""; 

    /** 
    * The database user's name. 
    * @var string 
    */ 
    private $username = ""; 
    /** 
    * The database user's password. 
    * @var string 
    */ 
    private $password = ""; 

    /** 
    * The database that this instance will write to, and read from. 
    * @var string 
    */ 
    private $database = ""; 

    /** 
    * Holds the mysql connection instance. 
    * @var resource 
    */ 
    private $connection = null; 

    /** 
    * Whether the instance is connected to the specified database. 
    * @var bool 
    */ 
    private $connected = false; 

    /** 
    * Constructs a new database instance. 
    * @param string $host The database server host. 
    * @param string $port The database server port. 
    * @param string $username The database's username authentication. 
    * @param string $password The username's specified password. 
    */ 
    public function __construct($host = "localhost", $username = "root", $password = "") { 
     $this->host = $host; 
     $this->username = $username; 
     $this->password = $password; 
    } 

    /** 
    * Connects to the given database. 
    * @param string $database 
    */ 
    public function connect($database) { 
     $this->database = $database; 

     // TODO: handle errors. 
     $this->connection = @mysql_connect($this->host, $this->username, $this->password) or die(); 
     @mysql_select_db($this->database, $this->connection) or die(); 

     /* 
     * If the connection was successful, we can now 
     * identify that the connection is sustained. 
     */ 
     if ($this->connect != null) { 
      $this->connected = true; 
     } 
    } 

    /** 
    * Gets the specified connection details from this instance. 
    * @param boolean $show_details 
    * @return string The connection string. 
    */ 
    public function getConnectionString($show_details = false) { 
     if ($show_details) { 
      return "database[host=" . $this->host 
        . ", port=" . $this->port 
        . ", user=" . $this->username 
        . ", pass=" . $this->password 
        . ", database=" . $this->database . "]"; 
     } else { 
      return "database[host=" . $this->host 
        . ", port=" . $this->port . "]"; 
     } 
    } 
} 
?> 
+32

Bạn của bạn là kẻ ngốc. –

+0

Bỏ phiếu để đóng như blatantly tấn công vì chủ quan và tranh luận chỉ không hoàn toàn cắt nó. Ngoài ra, sự tồn tại của một ai đó là người phạm tội gây xúc phạm cho tôi. –

+0

@NSD: Đã được xếp thứ hai. Tôi không xác nhận quá bình luận với những điều ngu ngốc khi mã nói cho chính nó, nhưng các ý kiến ​​trong mã của bạn là tốt (tốt, thậm chí). Đừng băn khoăn về thời gian phân tích cú pháp, không chỉ với các bình luận, nhưng bất cứ điều gì nhỏ như thế. Khả năng đọc là quan trọng hơn nhiều. – mpen

Trả lời

4

Bạn có nhận xét và nhận xét. Đặc biệt là những người mới bắt đầu thích dịch tất cả các dòng mã thành một "ngôn ngữ có thể đọc được của con người".

// Assign "a" to x. 
$x = "a"; 

// Do stuff with x and get y. 
$y = do_stuff($x); 

// Return y. 
return $y; 

Trong khi chuyên gia (bit) lập trình viên có kinh nghiệm hơn thường chỉ làm:

// Do stuff with "a" and return it. 
$x = "a"; 
$y = do_stuff($x); 
return $y; 

hoặc thậm chí

// Do stuff with "a" and return it. 
return do_stuff("a"); 

Không cần phải nói rằng người đầu tiên là một ví dụ về " over-commenting ". Tuy nhiên, những loại bình luận đó cũng có thể được đặt thành một nhận xét chức năng. Chỉ cần viết mã tự giải thích, ví dụ: không sử dụng các biến như $x, nhưng cung cấp cho nó một danh từ tên, như $speed hoặc lâu hơn và cung cấp cho các chức năng một động từ tên, như increment_speed() hoặc lâu hơn. Bằng cách này, bạn chỉ có thể để lại tất cả các bình luận bên trong hàm mà nó đã được giải thích bởi chính mã đó.

"Nhận xét quá mức" tuy nhiên không một cách hiệu quả hiệu suất tác động. Trừ khi đó là hàng tỷ dòng nhận xét trên một dòng mã, đặc biệt nếu đó là ngôn ngữ phiên dịch. Các ngôn ngữ được biên dịch như Java không bị điều này; nhận xét đã bị xóa sau khi biên dịch.

Cập nhật: bạn đã bao gồm một ví dụ mã; nó thực sự là quá nhiều để bình luận tài sản cá nhân, đặc biệt là nếu họ đã có một tên tự giải thích. Các bình luận về các chức năng đều ổn.

+1

-1 Để sử dụng từ 'chuyên gia' – AntonioCS

+2

Huh? Xin lỗi nếu tôi làm tổn thương bạn. – BalusC

+1

Mọi đoạn mã bạn đăng là "quá nhận xét"; trong 'return do_stuff (" a ");' rõ ràng là bạn đang "làm việc với một cái rồi trả về nó". Không có bình luận nào cả. – DisgruntledGoat

7

Đó là b * llshit, số lượng ý kiến ​​không có gì hoặc rất ít để làm với thời gian xử lý thực tế, như các ý kiến ​​không được phân tích cú pháp.

Nhận xét có ý nghĩa hơn mà bạn có trong mã của mình, thì nó càng tốt cho người tiếp theo phải duy trì nó.

Kiểu nhận xét được trình bày trong mẫu mã của bạn là ví dụ khi bạn đang sử dụng các nhận xét cần chú thích và bạn đang sử dụng cú pháp phpdoc, việc này sẽ giúp tạo tài liệu dễ dàng.

Một số có thể phê bình nhận xét của mọi biến lớp, nhưng theo ý kiến ​​của tôi, đó là điểm sử dụng cú pháp phpdoc mà mọi biến, phương thức và lớp có ý nghĩa đều có giải thích.

+0

Ha, yêu nỗ lực của bạn trong việc kiểm duyệt chính mình;) – DisgruntledGoat

+0

+1 phpdocs một mình trong một số trường hợp là đủ lý do để làm điều này. – JasonDavis

+0

trong khi tôi không thể nói liệu nó có quan trọng đối với hiệu năng hay không, các bình luận được xử lý bởi tokeniser giống như mọi thứ khác là – thrau

3

Đừng nghe bạn bè của bạn. Bạn không nên lo lắng về tối ưu hóa hiệu suất vi mô, trừ khi bạn đã lược tả ứng dụng của mình và thấy rằng nó dành phần lớn thời gian phân tích các nhận xét trong các tệp PHP của bạn (và rất có thể nó không có ở đó .... bạn sẽ cần nhiều, nhiều megabyte ý kiến ​​cho nó để được chú ý).

Có nhiều cách khác để bạn có thể làm cho ứng dụng chạy chậm, chẳng hạn như sử dụng cấu trúc dữ liệu sai hoặc cấu hình cơ sở dữ liệu không chính xác. Loại bỏ tất cả các bình luận chỉ gây nhầm lẫn cho các lập trình viên khác làm cho các lỗi gây tổn hại hiệu năng (và quan trọng hơn là: các lỗi logic) có nhiều khả năng xảy ra hơn.

10

Bạn của bạn nói sự ngớ ngẩn.

PHP động và phải phân tích cú pháp các tập lệnh theo yêu cầu, nhưng thời gian cần để phân tích nhận xét là không đáng kể (vì ngay khi gặp chú thích nó xuống dòng có liên quan tiếp theo; nó có lẽ chỉ cao hơn một chút so với khoảng trắng) và giá trị của các nhận xét cho chính bạn và những người duy trì trong tương lai của hệ thống là rất nhiều, lớn hơn nhiều so với bất kỳ hoạt động tiềm năng nào.

Hãy thoải mái nhận xét một cách tự do.

Bạn có thể tăng tốc độ PHP khá nhiều bằng cách sử dụng cơ chế bộ nhớ đệm opcode như APC hoặc eCache. Đầu tư nỗ lực và thời gian của bạn vào các giải pháp thực sự như vậy, không được coi là silliness như bỏ ý kiến.

+0

+1 để đề cập đến APC :) – AntonioCS

+0

BTW, cơ chế đệm mã hóa opcode rất tuyệt vời nhưng nếu bạn đang chạy một trang web nhỏ ' thường xuyên không cần thiết. Để giải thích rõ hơn: trang web ít bộ nhớ cache với 2.678.400 lượt xem trang mỗi tháng sẽ có, trung bình, một lượt xem trang mỗi giây. Hầu hết các dự án nhỏ sẽ không đạt được điều đó, và hầu hết các thế hệ trang của họ sẽ mất vài phần nghìn giây. Tất nhiên, ví dụ này không tính đến thực tế rằng số lần truy cập trang sẽ không được phân phối đồng đều, nhưng quan điểm của tôi là đối với hầu hết các nhà phát triển, thời gian của bạn có thể được chi tiêu ở nơi khác. – Warty

25

Những người nhận xét khác ở đây chính xác về hiệu suất. Hiệu suất không được xem xét khi bình luận trong mã.

Tuy nhiên, để nhận xét về ví dụ cụ thể của bạn, tôi tin rằng lớp học của bạn có quá nhiều nhận xét trong đó. Ví dụ: hãy xem trường này:

/** 
* The database user's name. 
* @var string 
*/ 
private $username = ""; 

Có rất nhiều "tiếng ồn trực quan" ở đó và nhận xét không thực sự giải thích bất cứ điều gì. Bạn có 4 dòng giá trị của ý kiến ​​mà không nói cho người đọc bất kỳ chi tiết thú vị.Nếu bạn muốn đặt một bình luận ở đó, nó sẽ giải thích một điều gì đó thú vị thú vị về mã, không chỉ lặp lại những gì mã này làm. Ví dụ:

/** 
* The database user's name. This field has to be 5 to 10 characters long. It 
* is not required if the connection security is disabled. 
* @var string 
*/ 
private $username = ""; 

Để chọn trên một ví dụ khác, hãy nhìn vào nhận xét này:

/** 
* Gets the specified connection details from this instance. 
* @param boolean $show_details 
* @return string The connection string. 
*/ 
public function getConnectionString($show_details = false) { 
    ... 

Nhận xét này là một khởi đầu tốt, nhưng nó thiếu một số thông tin quan trọng: chính xác là gì tham số show_details làm gì? Những chi tiết nào sẽ bị thiếu nếu nó không được kích hoạt? Hoặc những gì sẽ được bao gồm khi nó được kích hoạt?

Nhận xét về cơ bản không tồi và nhiều nhận xét không phải lúc nào cũng tồi tệ hơn ít nhận xét hơn. Điều quan trọng là phải có ngay nhận xét!

+4

+1 Nếu '$ username =" ";' cần được nhận xét, người đọc cần không có quyền truy cập vào nguồn. – Sampson

+1

+1.Bạn không cần phải bình luận mọi thành viên! Nếu không có bất cứ điều gì sử dụng để thêm vào như trong ví dụ trên, đừng ngại bỏ nó ra. Tính năng nhận xét tài liệu phong cách Java "getFoo" độc đáo như ‘Gets a foo’ với ‘@this a this’ và ‘@return’ là sự lộn xộn trực quan vô giá khiến cho nó * khó hơn * để đọc mã IMO. – bobince

5

Bình luận nhiều như bạn cần, để làm cho ý nghĩa của mã của bạn rõ ràng. Thời gian bạn đạt được, nếu có, bằng cách không phân tích bình luận bị choáng ngợp bởi nỗi đau của việc duy trì mã mờ.

Điều đó nói rằng, nhận xét phải có ý nghĩa và bạn có nhiều hơn một chút là cần thiết. Ví dụ:

/** 
* The database that this instance will write to, and read from. 
* @var string 
*/ 
private $database = ""; 

Tôi đặt câu hỏi liệu nhận xét lớn ở đây có thêm gì vào mã của bạn hay không.

3

Tôi muốn xem xét rằng một trường hợp vô lý phản tác dụng sớm vi-tối ưu hóa:

  • Bỏ qua những ý kiến ​​chỉ là về ít nhất phức tạp và tốn thời gian một phần của phân tích
  • Nếu hiệu suất là rất quan trọng, bạn sẽ muốn sử dụng máy chủ lưu trữ bytecode PHP, làm cho chi phí phân tích không liên quan
  • Không bao giờ giao dịch bảo trì cho hiệu suất trừ khi bạn có dữ liệu khó chứng minh rằng bạn gặp vấn đề về hiệu suất và vị trí chính xác của nó là
0

Nếu hiệu suất là một ưu tiên của mã PHP của bạn, bạn nên sử dụng một bộ nhớ cache bytecode như:

Mã byte lưu trữ Bytecode đã được phân tích và biên dịch sang bytecode. Việc thực hiện tiếp theo của cùng một trang PHP không phải phân tích cú pháp mã, hãy để một mình nhận xét.

Do đó, nhận xét về mã chỉ tác động đến hiệu suất trong triển khai ứng dụng không quan tâm đến hiệu suất.

Các vấn đề liên quan