代码之家  ›  专栏  ›  技术社区  ›  Daren Schwenke

与小型专用PHP脚本相比,单片PHP编码有哪些优点/缺点?

  •  1
  • Daren Schwenke  · 技术社区  · 16 年前

    也就是说,我编写了一个index.php,平均大小为70k-250k,并使用

    mod_rewrite
    

    把剩下的

    REQUEST_URI 
    

    另一种方法是编写许多小型php脚本,每个脚本专门用于特定目的。我认为我的一些更活跃的ajax脚本可能会从中受益。

    有一件事让我陷入了这个思考过程,那就是我不知道使用include,尤其是条件include会如何影响操作码缓存的性能。

    由于我对这一点的偏执,我通常会尽可能避免使用include,但这会导致代码重复或保持整体性。

    由于我使用的是mod_rewrite,所以在这两种方法之间的转换应该很简单。

    编辑:我的一个目标应用程序目前每秒处理80-100次页面点击(我有一些不错的硬件)。其中大多数是ajax请求。一切都很好用,很快,但我作为一名php程序员开发,没有任何批评,也需要它。

    4 回复  |  直到 16 年前
        1
  •  6
  •   Evan Meagher    16 年前

    模块化代码更易于理解和维护。一个巨大的单片代码库可以变成一个纸牌屋。它在实践中工作得很好,但是改变任何较低的元素都是不可能的。如果您将代码拆分为清晰的抽象,那么进行更改就会容易得多,如果您添加了开发人员,您将避免一场噩梦。

        2
  •  3
  •   Buggabill    16 年前

    返工是浪费。将代码从一个应用程序复制和粘贴到另一个应用程序是维护的地狱。

        3
  •  1
  •   Pekka    16 年前

    除了其他的评论(我完全同意),另一种观点:我的经验是,一个单一的方法,如果驱动到极端,会消耗宝贵的RAM-整个文件都必须加载才能被解释,不管它的所有内容是否都是需要的,仅此一点就消耗了大量的8,16,或者每个实例获得32 MB。

        4
  •  0
  •   Ivan Nevostruev    16 年前

    另外,如果我将所有代码存储在一个文件中,那么您很可能有一个错误的代码。这样的代码会倾向于使用全局变量。在这种情况下,很难在其他项目中重用此类代码。当然,你可以复制它,但记住,当你复制某样东西时,你会复制它所有的bug。只需对项目进行imagane,您就可以使用一组经过良好测试(感谢单元测试)的库。当新的错误出现时,它只是在一个地方修复。

        5
  •  0
  •   NVRM    6 年前

    对于Unix命令行脚本,单片方法允许非常高级别的可移植性。

    usr/bin

    sudo cp myprog /usr/bin
    /* (...) */
    sudo cp myprog /usr/games
    /* (...) */
    

    这样,只需键入,就可以从任何地方、任何路径调用程序 myprog 而不是 /PATH/./myprog . 确保它是可信的!

    我们必须特别注意这些小路。


    有关路径的一些简单示例:

    /* Create a folder in the home directory, named as the script name, if not existing. -*/
    if (!is_dir($_SERVER["HOME"]."/".$_SERVER["SCRIPT_NAME"])){
      @mkdir($_SERVER["HOME"]."/".$_SERVER["SCRIPT_NAME"]);
    }
    
    /* Program folder path: --------------------------------------------------------------*/
    $PATH = $_SERVER["HOME"]."/".basename($_SERVER["SCRIPT_NAME"])."/";
    
    /* Program running path, currently: --------------------------------------------------------------*/
    $JOBPATH = getcwd();
    

    手柄 POSIX SIGNALS

    /* Register cleaning actions at SIGINT ------------------------------------- */
    function shutdown() {
      // Perform actions at ctrl+c 
      echo "Good bye!";
      exit;
    }
    /* Register resize at SIGWINCH ---------------------------------------------- */
    function consoleResize() {
      @ob_start;
      $W = (int)exec("tput cols");   // Columns count
      $H = (int)exec("tput lines");  // Lines count
      @ob_end_clean();
      // Shell window terminal resized!
    }
    
    /* Register action at SIGSTOP (Ctrl + z) ---------------------------------------------- */
    function sigSTOP() {
      // Program paused!
    }
    
    /* Register action at SIGCONT (Type fg to resume) ---------------------------------------------- */
    function sigCONT() {
      // Program restarted!
    }
    
    register_shutdown_function("shutdown");
    declare(ticks = 1);
    pcntl_signal(SIGINT, "shutdown");
    pcntl_signal(SIGWINCH, "consoleResize");
    

    这并不意味着我们必须在一个块中写入所有内容,但将渲染合并到一个文件中可以在unix环境中提供许多额外的功能。

    推荐文章