正在使用" require_once"影响网站的速度

时间:2018-01-23 08:39:47

标签: php mysql wordpress performance pagespeed

我正在开发一个框架,使我的工作流程更快,就像一个入门主题加上样板文件。因此,使工作更快的主要部分之一就是多个......

我在function.php中的例子,当我需要创建新的帖子类型而不是为每个新的自定义帖子类型编写一大块代码(130行)时...我将代码移动到分隔的文件夹然后我称之为通过

require_once( 'library/custom-post-type.php' );

通过这种方式,我可以将许多准备好的自定义帖子类型作为文件和每个项目,我可以添加该文件以供将来维护,而不是在非常大的1000+函数文件中滚动...它将是一个包含require_once列表的短文件和包含所有代码的文件夹

我的问题:

  • require_once !!影响网站的速度?
  • 当我应该使用它时,我不应该
  • 是否过度使用它以获得更安排的代码的危害?

问题更像是与WordPress相关的PHP /服务器。

编辑1: 例如,假设我有这个文件

案例1

1个文件

function.php

// lots of code 

// 130 line of code to create custom post 1 

// 130 line of code to create custom post 2

// 130 line of code to create custom post 3

// 130 line of code to create custom post 4

// 130 line of code to create custom post 5 

// lots of code 

案例2

共有6个文件,代码数量相同+ 5行require_once

function.php

// lots of code 

require_once( 'library/custom-post-type1.php' );
require_once( 'library/custom-post-type2.php' );
require_once( 'library/custom-post-type3.php' );
require_once( 'library/custom-post-type4.php' );
require_once( 'library/custom-post-type5.php' );

// lots of code 

定制后type1.php

// 130 line of code to create custom post 1 

定制后type2.php

// 130 line of code to create custom post 2

定制后type3.php

// 130 line of code to create custom post 3 

定制后type4.php

// 130 line of code to create custom post 4 

定制后type5.php

// 130 line of code to create custom post 5 

为什么我更喜欢这种情况,是较小的文件,易于查找和编辑,可以将任何文件移动到其他项目,只需调用它

我想创建一些模块结构......但不能损害速度

3 个答案:

答案 0 :(得分:3)

使用require_once,只包含一次文件,但出于代码重复的目的,你可能会发现自己要在50%的函数中添加require_once,除非你在“index.php”中添加它,这意味着你将结束加载文件,即使它不需要,也会发生许多文件。

在我看来,我建议遵循OOP,创建一个类并按照PSR-4加载依赖项,并在需要时使用该类。

也许人们会有不同的意见,可能会有所帮助:)

答案 1 :(得分:2)

解答:

  1. require_once !!影响网站的速度?
    • 没有
  2. 什么时候应该使用它,什么时候不应该使用它
  3. 是否过度使用它以获得更安排的代码的危害?
    • 这取决于它们包含的代码,我的意思是如果所需的文件包含太多将要执行的代码 (不仅仅是函数),那么需要它的脚本的速度会变慢下来。
  4. 警告:如果require_once失败,则根据require,会引发致命的E_COMPILE_ERROR level error

    在需要时可能会降低脚本速度的文件示例可能是:

    <?php
        if($condition)
        {
            // execute lots of code
        }
        else
        {
            // execute lots of code
        }
    
        // execute lots of code
    
        // those does not slow down if not called
        function f()
        {
            // ...
        }
        function f2()
        {
            // ...
        }
        function f3()
        {
            // ...
        }
    ?>
    

    函数require_once()require()include_once()include()这样做非常简单:在调用内容时复制内容而不是行。

    示例:

    如果文件functions.php包含:

    <?php
    function f()
    {
        // ...
    }
    function f2()
    {
        // ...
    }
    function f3()
    {
        // ...
    }
    ?>
    

    以下文件

    <?php
        require_once('functions.php');
    
        // some code
    ?>
    

    将如下:

    <?php
        function f()
        {
            // ...
        }
        function f2()
        {
            // ...
        }
        function f3()
        {
            // ...
        }
    
        // some code
    ?>
    

    修改,关于 CASE s

    我建议你做两个CASE的组合:

    CASE 1 + 2

    1个文件function.php本身需要5个特定文件:

    // lots of code 
    
    require_once( 'library/custom-post-type1.php' );
    require_once( 'library/custom-post-type2.php' );
    require_once( 'library/custom-post-type3.php' );
    require_once( 'library/custom-post-type4.php' );
    require_once( 'library/custom-post-type5.php' );
    
    // lots of code 
    

    通过这样做,您可以包含一个名为functions.php的文件,其中包含所有文件可以共享的所有功能。

    在这个文件中,你可以通过将所有类似的函数分组到一个单独的文件中并在其中需要它来压缩代码。

    结果是您的代码在将来编辑的前景中更具可读性和可维护性,并且更多开发人员将能够同时修改单个函数的文件。

答案 2 :(得分:0)

我认为您假设读取文件的时间对第一条陈述的回答为“否”。

由于php在执行时进行编译,如果只有1个大文件,则将读取一次,加载到内存中,然后编译并执行。

对于多个文件,请执行相同的操作,但是您必须为每个文件添加访问时间(可以忽略,但不为零)(这也是SSHD与传统HD的区别)

此外,读取内存会消耗内存,因此未使用的函数不会增加执行时间,但会占用内存,垃圾回收器对此有控制权,但是无论如何,您都必须先读取它,然后再丢弃它。 (小穗)

所以正确的答案是,必须在时间和记忆之间进行折衷。

如果您希望使用更少的时间,则需要更多的内存,并且需要更少的内存来避免访问时间。

与往常一样,内存是昂贵的,因此使用更少的内存并增加时间可能是一个更好的选择。此外,您还会获得更具可读性的代码。

因此,真正的答案取决于应用程序。 在您使用框架的情况下,答案是包含文件,并在执行过程中花费很少的时间。