我正在建立一个网站,并且正在加载越来越多的课程。目前我在index.php中包含了每个类,并且我还有一个包含每个类的ajax处理程序,因此我基本上将所有PHP文件包含在ajax调用和网站的每个页面上。
这是不好的做法吗?
我已经尝试了一下,看到有一个名为spl_autoload_register
的函数。通过阅读一点,我的理解是,如果找不到类,它会尝试包含定义的文件。但是,它与require_once
或include_once
有什么不同。
假设我将文章放在文件中,然后使用require_once('myclass.php');
class Myclass {
function myMethod {
//some code here
}
}
但是,在使用$class = new Myclass;
初始化之前,该类尚未使用所以现在与运行
function my_autoloader($class) {
require_once('classes/' . $class . '.php');
}
spl_autoload_register('my_autoloader');
当我想使用它时,我仍然需要使用$class = new Myclass;
对其进行初始化。它们中的任何一个都有一些性能提升还是更偏好?
还有一个问题。 PHP应该像使用JS和CSS一样被缩小,还是用PHP来实现这一点毫无意义?
答案 0 :(得分:2)
2018年,使用自动加载的最佳方式是Composer - 构建以便于工作和性能优化。
Download composer(即使你的项目开始,也取决于你)
创建composer.json
并告诉他从以下目录加载类的目录或文件:
{
"autoload": {
"classmap": "/src"
}
}
使用最开放友好的classmap
option。
通过CLI命令重建缓存:
composer.phar dump
将其包含在index.php
require_once __DIR__ . '/vendor/autoload.php';
你准备好了!
答案 1 :(得分:1)
如果你不加载每个页面上的每个文件,代码在技术上会运行得更快,但是如果配置“OpCache”,它将在很大程度上消失,它将所有编译的类定义加载到共享记忆。在某些时候,您最终可能会得到一个页面,该页面需要加载90%的代码来完成其工作。 (这也与你关于缩小的问题有关 - PHP是在服务器上编译的,因此缩小对任何人都没有帮助。)
自动加载的另一个优点是维护 - 当你定义一个新类时,你不必将它添加到某些包含的主列表中,确保它在其父类之后加载但是在它的子类等之前,你将类定义放在一个有意义的命名文件和目录中(非常适合人类找到它!)并且自动加载器会在需要时找到它。
答案 2 :(得分:0)
我对TYPO3(PHP)进行了大量测量,包括带有SSD的机器上的数百个类文件。我创建了一个包含所有可用类的脚本。与其他问题相比,课堂阅读并不是一个非常昂贵的部分。
一旦解决了所有更重要的问题,我将专注于此优化。