纵观当前的WordPress代码库,很明显函数被过度使用了。我的计数超过8100个函数/方法是在WordPress代码库中定义的。这是可怕的,也是对资源的可怕使用。
The problem with that many functions (or classes) is that means wordpress is not DRY (do not repeat yourself) and I\'m sure many of these blocks could be combined or replaced with better patterns.
然而,我们需要某种方式来缓冲当前的API(所有这些函数),这样我们就可以开始组合后端代码,而不必更改“接口”(松散使用)。
解决方案是什么
PHP 5(&;6具有类的SPL自动加载。这是一个允许PHP在加载类之前等待它需要一个类的特性。这
prevents wasted resources 因为未使用的功能/文件在需要时才会加载。
不幸的是,WordPress无法使用此功能,因为PHP中的“自动加载”仅适用于类。。WordPress是一座功能之山。
我正在考虑清理WordPress代码库的选项和挑战,这似乎是最大的挑战。
由于WordPress为插件/主题开发人员创建了如此多的功能(而不是公开类),因此似乎无法在不打破数千个主题的情况下走出这个深渊;插件。
我唯一能想到的想法是编写一个脚本,它可以查看所有函数,并将它们转换为类,然后自动加载。取而代之的是shell函数,它调用函数的类化版本。
类似这样:
function wp_foo_bar() {
call_user_func_array(array(\'foo\' => __FUNCTION__), func_get_args());
}
还有其他人试图清理WordPress代码库吗?这种方法还有其他问题吗?
更新以澄清将系统转换为使用自动加载是第一步,这使我们能够更好地控制资源的加载方式,并在我们将一些核心功能迁移到更好的设计中时设置外观。贬低函数要困难得多。因此,这个问题从开始重新写入系统开始。
如果我们停在这里,那么我们的性能可能会有净损失,因为我们有相同数量的函数,现在类也开始自动加载。
因此,这与过程代码与OOP无关。这是缓冲API对整个系统的更改的最佳方法。目前的wordpress开发团队已经在以非常缓慢的速度进行这项工作。wordpress系统中已经有60多个类。
SO网友:Mark Kaplun
函数解释的代码总是比OOP更快。比较
function hello_mark() {
echo \'hello mark\';
}
hello_mark();
使用
class mark {
function say_hi() {
echo \'hello mark\';
}
}
$m = new mark();
$m->say_hi();
我认为很明显,什么是更快的解释和执行。
人们之所以这样做,不是因为OOP更快,而是因为它更好地代表了“问题域”,并且生成了更易于维护的代码。
代码应该以一种更易于维护和开发的方式进行组织,以确保速度始终可以使用更好的解释器,或者编译成机器代码,或者像Facebook的hiphop那样减少您支持的语言的功能,并将web服务器集成到您的解释器中。
特别是对于wordpress来说,对网站速度影响最大的是正在使用的缓存的质量。php代码中的任何改进都不会像使用对象缓存一样提高性能。
无论如何,仅仅因为有许多函数不是延迟加载的,并不意味着即使在延迟加载下,wordpress完成初始化时也不会加载它们。要感谢核心开发人员对该语言有足够的了解,能够在不破坏软件逻辑结构的情况下,将初始化不需要的函数放在自己的文件中(即,将update\\u选项放在另一个文件中,然后将delete\\u选项放在另一个文件中是愚蠢的,因为在初始化过程中没有调用delete\\u选项)
SO网友:Otto
祝您好运,但这不会真正提高性能。
随着时间的推移,随着不断的变化,WordPress确实变得越来越面向对象。过去4年中的每一次更新都将一些主要代码重构为更面向类的设计。
然而,OO和自动加载以及其他类似的东西并不是天生的“更快”,也不是真正的“更好”。不过不用担心,这是一个常见的谬论。
OOP通常是编程中一种不同的组织方式。对于很多情况来说,这是一种更理智、更干净的方法。但它并不是天生的“更好”,事实上,在几乎所有现实世界场景中,它都非常慢,内存更密集,或者充其量是收支平衡。OOP模型通常是首选的,因为a)它更易于维护和代码测试,b)它在许多学校被认为是“正确”的方法,c)程序员是喜欢构建事物模型的人。OOP非常符合这种“模型”思维。用一段代码表示一个“东西”,然后让你的“东西”与其他“东西”交互,比如把乐高积木装配在一起。整洁,干净,整洁。:)
事实是,对于操作码缓存之类的东西,自动加载实际上没有速度优势,只有组织优势。别误会,利益就是利益,更好的组织是件好事。但通过组织工作,而不是通过自动化流程,你可以获得更好的组织。
您是否可以编写代码将所有代码移动到类中,然后将函数仅仅挂钩到这些类中?当然,可能吧。这会有什么帮助?没有什么实质性的东西。
要满足您的特定愿望:
因此,贬低函数要困难得多,这个问题从重新编写系统开始。
首先,我想你的意思是“不赞成”。
其次,你不能一下子重写整个事情,从而实现你的目标。这就是我的全部观点。返回并查看3.1或3.2。现在看看4.0。请注意随着时间的推移,类的数量以及它们确实被重构的方式。
花大量时间重写工作代码而最终得到相同的结果是没有意义的,除非您打算在这个过程中对其进行实际改进。随着WordPress中的每一部分都得到改进,它通常会被修改为类/面向对象系统。逐步演变。随着时间的推移,允许旧插件消亡,并创建新代码来支持它并得到修复等等。你不可能在一夜之间打破世界,并期望每个人都跟着你,你必须缓慢而有条理地改变事情。
SO网友:markratledge
@森克罗斯,
您在WP Dev配置文件中编写
你可能会注意到,我的一些问题深入到某些问题的核心,因为我努力在我的应用程序中实现尽可能高的优化。
对于一个应用程序、你的应用程序或你正在开发的应用程序来说,这一切都很好;或者您自己的编程理念和技术。
但Wordpress是一个社区,因此工作方式不同。它可能会在编程结构、语言和效率方面做出牺牲(因为没有更好的词),而这些都是小型或单个项目的优先事项。
但作为一个社区,Wordpress获益匪浅。生态系统庞大多样,不断发展,因此,WordPress非常受欢迎。
作为一个社区,Wordpress不能假设与单个项目或开发人员的工作方式相同。
你在比较苹果和桔子,以及它们生长的树和喜欢苹果胜过桔子的人。
我不认为自己是一个程序员,我也不能争辩OOP、类、过程等等的好处和优点