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

Posted

技术标签:

【中文标题】正在使用“require_once”影响网站的速度【英文标题】:is using " require_once " affect the speed of the website 【发布时间】:2018-07-02 00:21:28 【问题描述】:

我正在开发一个框架,以使我的工作流程更快,例如入门主题和样板。所以使工作更快的主要部分之一是复数......

例如,当我需要创建新的帖子类型而不是为每个新的自定义帖子类型编写一大块代码(130 行)时,我在 function.php 中...我将代码移动到单独的文件夹然后我调用它由

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

通过这种方式,我可以将许多现成的自定义帖子类型作为文件,并且对于每个项目,我也可以添加文件以供将来维护,而不是在非常大的 1000 多个函数文件中滚动...这将是一个包含 require_once 列表和文件夹的短文件,其中所有代码都在单独的文件中

我的问题:

require_once 吗?影响网站速度? 什么时候应该使用它,什么时候不应该使用它 过度使用它以获得更有条理的代码有什么害处?

这个问题更像是 PHP / 服务器相关而不是 WordPress。

编辑 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 

custom-post-type1.php

// 130 line of code to create custom post 1 

custom-post-type2.php

// 130 line of code to create custom post 2

custom-post-type3.php

// 130 line of code to create custom post 3 

custom-post-type4.php

// 130 line of code to create custom post 4 

custom-post-type5.php

// 130 line of code to create custom post 5 

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

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

【问题讨论】:

您不应该在 PHP includerequire 的上下文中考虑 IO。如果您正在接近 IO 真正重要的负载,则包含将位于瓶颈列表的底部。恕我直言,你应该着眼于语言的 OOP 特性,如类、命名空间、包和作曲家,专门编写更多......现代和模块化的代码。 【参考方案1】:

答案:

    require_once 吗?影响网站速度? 没有 什么时候应该使用它,什么时候不应该使用它 当你需要它在整个 PHP 脚本中包含一次时,你应该使用它,阅读http://php.net/require_once 过度使用它以获得更有条理的代码有什么害处? 这取决于它们包含的代码,我的意思是如果所需文件包含太多代码将被执行(不仅是函数)需要它的脚本的速度会变慢下来。

警告:如果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
?>

编辑,关于您的CASEs

我建议你做两个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 的文件,其中包含所有文件可以共享的所有功能。

在这个文件中,您可以通过将所有类似的函数分组到一个单独的文件中来更紧凑的代码,并在其中包含它。

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

【讨论】:

非常感谢...你能解释一下最后一点吗?这取决于它们包含的代码。并给出一些可能导致问题的案例? 感谢您的编辑...我现在看到您的最后一点。我明白它是如何工作的......就像从请求的文件中复制代码并将其粘贴到原始文件中......对吗? 好的,我看到了这个例子......但是如果我不使用 require_once 并且只是将相同的代码添加到文件中,那么减速会一样吗? 是的,这是真的。但是为了提高代码的可读性和可维护性,我建议您将所有函数放在一个单独的文件中,然后使用 require_once 将其包含在您需要的每个文件中 我编辑了我的代码并添加了现实生活中的例子......请你检查一下【参考方案2】:

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

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

也许人们可以有不同的意见,可以提供更好的帮助:)

【讨论】:

关于 require_once 我知道它会包含一次文件......但关键是这将需要处理和时间,例如,当您加载图像而不是加载 100 张图像时,然后全部添加到一张大图像中加载它会使网站更快,因为我认为 require_once 应该作为 1 行代码工作。在它工作之后,就像我调用的文件得到了一个副本并粘贴在 require_once 代码行的位置。 关于索引,我把页面的各个部分做成单独的文件,比如投票。调用它 vote_blox.PHP 然后在我需要它的任何页面上我通过 require_once 调用它我知道我可以将它变成一个小部件,但我认为 require_once 将使用比创建小部件更少的资源......加上它实现了目标可插入性跨度> 我理解你的观点,但我认为很快就会在代码中变成很多 require_once,如果你决定将这些文件移动到另一个目录,你将不得不更改所有 require_once你的代码,这就是为什么 PSR-4 标准更好:) 谢谢你帮了大忙,你的观点很好,但是对于这个问题,第二个人详细回答了我的问题【参考方案3】:

我认为您假设读取文件的时间可以忽略不计,以对第一条语句回答“否”。

由于php在执行时编译,如果你只有1个大文件,你会读取一次,加载到内存中编译执行。

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

另外,读取内存会消耗内存,因此未使用的函数不会增加执行时间但会消耗内存,垃圾收集器对此进行控制,但无论如何你在丢弃它之前读取它。 (小尖刺)

所以正确的答案恕我直言,这必须是时间和记忆之间的妥协。

如果您想要更短的时间,您需要更多的内存并包含更少的内存以避免访问时间。

由于内存总是很昂贵,因此使用更少的内存并增加一点时间可能是更好的选择。您还可以获得更具可读性的代码。

所以真正的答案取决于应用程序。 在您使用框架的情况下,答案是包含文件并在执行中添加很少的时间。

【讨论】:

以上是关于正在使用“require_once”影响网站的速度的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响网站页面速度的情况下在我的网站上使用谷歌字体

影响网站加载速度的因素有哪些

谷歌分析如何影响网站的加载速度?少数分析工具之间会不会有冲突?

影响网站的打开速度因素有哪些?

网站的打开速度往往被css等文件影响着

如何修复'require_once()无法打开流'