|
|
1
6
__自动加载很好,但是在递归搜索函数中声明所有文件的成本很高。您可能希望查看如何构建用于自动加载的文件树。在我的框架中,我始终为文件的类命名,并使用缓存数据的映射。
|
|
|
2
5
一种常见的模式(例如Pear、Zend Framework…)是使类名反映路径,因此Db_Adapter_Mysql将位于/Db/Adapter/Mysql.php中,从添加到include路径的某个地方开始。 |
|
|
3
1
有两种方法可以很容易地做到这一点,首先,命名类,以便它们定义查找它们的结构
一个例子
|
|
|
4
1
如果使用如下智能分类法,性能不会受到影响: 1.每个库都保存在文件夹“包”中 2.通过将类名中的“\”替换为“/”并在末尾添加“.php”,可以定位每个类 类=我的应用程序智能对象 这种方法(几乎所有框架都使用)的好处也是对代码进行更智能的组织:-) |
|
|
5
0
到处寻找文件会让事情变得更慢(更多的磁盘点击)。加载所有类以备需要,这会占用更多内存。在每个文件中指定所需的类很难维护(即,如果不再使用这些类,它们不会被删除)。 真正的问题是,其中哪一个对你更重要?最后,它们都是权衡,所以你必须选择一个。不过,第二个和第三个选项中的大部分开销与实际编译代码有关,这是有争议的。使用类似 APC 可以显著减少每次页面加载时加载和编译每个类的开销。
|
|
|
6
0
我倾向于使用一种简单的方法,其中_autoload()引用将类名映射到相对路径的哈希映射,该哈希映射包含在一个文件中,该文件使用一个简单的脚本重新生成,该脚本本身执行递归搜索。 这要求在添加新类文件或重构代码库时运行脚本,但它也避免了_autoload()中的“聪明”,这会导致不必要的stat()调用,并且它的优点是我可以轻松地在代码库中移动文件,我知道我需要做的就是运行一个脚本来更新自动加载器。 脚本本身递归地检查我的includes/目录,并假设任何未在排除项短列表中命名的PHP文件(自动加载程序本身,加上我倾向于拥有的一些其他标准文件)都包含一个同名的类。 |
|
|
7
0
Zend Framework的方法是基于PEAR文件夹标准(Class_Foo映射到/Class/Foo.php)进行自动加载,而不是使用设置基路径,而是使用include_路径。 他们的方法存在的问题是,无法事先检查文件是否存在,因此自动加载将尝试包含任何包含路径中不存在的文件,出错,并且永远不会给任何其他使用spl_autoload_register注册的自动加载函数包含该文件的机会。
当然,你会有点搜索,但对于每个自动加载,你只会在最坏的情况下进行n次搜索,其中n是你正在检查的基本路径数。 但是,如果您发现自己仍然需要递归扫描目录,那么问题不是“自动加载会影响我的性能”,而是“为什么我要在随机结构中丢弃我的类文件?”坚持PEAR结构会让您省去很多麻烦,即使您决定手动执行include而不是自动加载,也不会在执行include语句时猜测类文件的位置。 |
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 1 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 1 年前 |