2010-01-03 11 views
6

Recientemente comencé a trabajar en un pequeño CMS. Usualmente desarrollo aplicaciones .NET en C#, y estoy muy acostumbrado a comentar mis campos y métodos. Mi amigo me dijo Earler que tener comentarios en scripts PHP es bastante malo, ya que PHP es dinámico y se analiza cuando se solicita, por lo que tener que analizar los comentarios tomará más tiempo.PHP - ¿Haciendo un comentario excesivo?

¿Se aplica esta afirmación a mi situación, que es comentar cada método y campo?

Ejemplo de una de mis clases:

<?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

Tu amigo es un idiota. –

+0

Votar para cerrar como descaradamente ofensivo porque subjetivo y argumentativo simplemente no acaba de cortarlo. Además, la existencia de alguien que es tan pedante me ofende. –

+0

@NSD: 2nded. No apoyo el exceso de comentarios con cosas estúpidas cuando el código habla por sí mismo, pero los comentarios en su código están bien (bien, incluso). No te preocupes por los tiempos de análisis, no solo con comentarios, sino algo menor como eso. La legibilidad es mucho más importante. – mpen

Respuesta

4

Usted tiene un comentario y comentario. Especialmente a los principiantes les gusta traducir cada línea de código en un "lenguaje legible por humanos".

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

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

// Return y. 
return $y; 

Mientras expertos (BIT) programadores más experimentados menudo sólo hacen:

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

o incluso

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

Ni que decir tiene que la primera es un ejemplo de " sobre-comentar ". Sin embargo, ese tipo de comentarios también pueden colocarse perfectamente como un comentario de función. Simplemente escriba el código de autoexplicación, p. no use variables como $x, pero déle un nombre , como $speed o más y asigne a las funciones un verbo nombre, como increment_speed() o menos. De esta forma, puede dejar todos los comentarios dentro de la función, que ya están explicados por el código en sí.

"Hacer un comentario excesivo" sin embargo, no dañosa impacto en el rendimiento. A menos que sea un trillón de líneas de comentarios en una sola línea de código, especialmente si es un lenguaje de interpretación. Los lenguajes compilados como Java no sufren de esto; los comentarios ya se eliminaron después de la compilación.

Actualización: incluyó un ejemplo de código; de hecho, es demasiado para comentar las propiedades privadas, especialmente si ya tienen un nombre que se explica a sí mismo. Los comentarios sobre las funciones están bien.

+1

-1 Por usar la palabra 'expertos' – AntonioCS

+2

¿Huh? Perdón si te lastimé. – BalusC

+1

Cada parte del código que ha publicado está "sobre-comentada"; en 'return do_stuff (" a ");' es absolutamente obvio que estás "haciendo cosas con una y luego regresándola". Ningún comentario es necesario. – DisgruntledGoat

7

Eso es b * llshit, la cantidad de comentarios no tiene nada o muy poco que ver con los tiempos de procesamiento reales, ya que los comentarios no se analizan.

Cuanto más significativos sean los comentarios que tenga en su código, mejor será para el próximo que tenga que mantenerlo.

El estilo de comentarios presentado en el ejemplo del código es ejemplar ya que está utilizando comentarios donde se necesitan comentarios y está utilizando la sintaxis de phpdoc, lo que hará que la creación de documentación sea muy sencilla.

Algunos pueden criticar el comentario de cada variable de clase, pero en mi opinión, ese es el punto de usar la sintaxis de phpdoc para que todas las variables, métodos y clases tengan una explicación.

+0

Ha, adore su intento de censurarse a sí mismo;) – DisgruntledGoat

+0

+1 phpdocs solo en algunos casos es suficiente razón para hacer esto. – JasonDavis

+0

mientras que no puedo decir si es importante para el rendimiento, los comentarios son procesados ​​por el tokeniser al igual que todo lo demás es – thrau

3

No escuche a su amigo. No debe preocuparse por las optimizaciones de micro-desempeño a menos que haya perfilado su aplicación y descubra que pasa la mayor parte del tiempo analizando comentarios en sus archivos PHP (y lo más probable es que no esté allí ... necesitaría muchos, muchos megabytes de comentarios para que sea notorio).

Hay muchas otras formas en que puede hacer que su aplicación se ejecute lentamente, como utilizar estructuras de datos incorrectas o configurar incorrectamente su base de datos. Eliminar todos los comentarios solo confunde a otros programadores hace que el rendimiento perjudique los errores (y más importante: los errores lógicos) es más probable que suceda.

10

Tu amigo habla tonterías.

PHP es dinámico y debe analizar los scripts como se solicite, pero el tiempo que toma analizar los comentarios es insignificante (porque tan pronto como encuentra un comentario cae a la siguiente línea relevante, probablemente solo sea un poco más que los espacios en blanco) y el valor de los comentarios para usted y los futuros mantenedores del sistema es mucho, mucho mayor que cualquier posible golpe de rendimiento.

No dude en comentar generosamente.

Sin embargo, puede acelerar PHP bastante usando un mecanismo de caché de código de operación como APC o eCache. Invierte tu esfuerzo y tu tiempo en soluciones reales como esa, sin presuntas tonterías como omitir comentarios.

+0

+1 por mencionar APC :) – AntonioCS

+0

Por cierto, los mecanismos de caché de opcode son geniales, pero si se está ejecutando un sitio web pequeño ' a menudo es innecesario. Para explicar mejor: un sitio web sin memoria caché con 2,678,400 páginas vistas por mes tendría, en promedio, una vista de página por segundo. La mayoría de los proyectos pequeños no llegarán a eso, y la mayoría de las generaciones de sus páginas tardarán milisegundos. Por supuesto, este ejemplo no tiene en cuenta el hecho de que los hits de la página se distribuirán de manera no uniforme, pero mi punto es que para la mayoría de los desarrolladores, su tiempo podría ser gastado en otra parte. – Warty

25

Los otros comentaristas aquí tienen exactamente razón en cuanto al rendimiento. El rendimiento no debe ser una consideración al comentar en el código.

Sin embargo, para comentar sobre su ejemplo específico, creo que su clase tiene demasiados comentarios. Por ejemplo, echar un vistazo a este campo:

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

Hay una gran cantidad de "ruido visual" allí y el comentario no explica nada de todos modos. Tienes 4 líneas de comentarios que no le dicen al lector ningún detalle interesante.Si desea poner un comentario allí, debe explicar algo interesante sobre el código, no solo repita lo que hace el código. Por ejemplo:

/** 
* 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 = ""; 

escoger en otro ejemplo, echar un vistazo a este comentario:

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

Este comentario es un buen comienzo, pero le falta alguna información crucial: ¿Qué significa exactamente el parámetro show_details ¿hacer? ¿Qué detalles faltarán si no está habilitado? ¿O qué se incluirá cuando esté habilitado??

Los comentarios no son fundamentalmente malos, y más comentarios no siempre son peores que menos comentarios. ¡Es importante tener comentarios correctos!

+4

+1 Si '$ username =" ";' necesita ser comentado, el lector no necesita tener acceso a la fuente. – Sampson

+1

+1.¡No tienes que comentar a todos los miembros! Si no hay nada útil para agregar como en el ejemplo anterior, no tema dejarlo. El documento de estilo oficial de Java comentando 'getFoo' como 'Obtiene un foo' con '@ this this this' y '@return that' es un desorden visual sin valor que hace * más difícil * leer el código de IMO. – bobince

5

Comenta todo lo que necesites, para aclarar el significado de tu código. El tiempo que gana, si lo hay, al no analizar los comentarios se ve abrumado por el dolor de mantener el código opaco.

Dicho esto, los comentarios deben ser significativos, y tiene un poco más de lo estrictamente necesario. Por ejemplo:

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

Me pregunto si el comentario grande aquí agrega algo a su código.

3

yo consideraría que un caso de manera absurda contraproducente prematura micro-optimización:

  • Haciendo caso omiso de los comentarios es casi el menos complejo y requiere mucho tiempo parte de análisis
  • Si el rendimiento es importante, Querrá utilizar un servidor que almacene en caché el bytecode de PHP de todos modos, haciendo que la operación de análisis sintáctico sea irrelevante
  • Nunca intercambie mantenimiento por el rendimiento a menos que tenga datos duros que demuestren que tiene un problema de rendimiento y dónde exactamente se encuentra
0

Si el rendimiento es una prioridad para su código PHP, se debe utilizar una caché de código de bytes, tales como:

Bytecode almacena en caché el código de tienda que se ha analizado y compilado en bytecode. La posterior ejecución de la misma página PHP no tiene que analizar el código, y mucho menos los comentarios.

Por lo tanto, los comentarios del código tienen un impacto en el rendimiento solo en implementaciones de aplicaciones que no se preocupan por el rendimiento.