【问题标题】:Does the body of my function get read every time?我的函数的主体是否每次都被读取?
【发布时间】:2016-03-13 18:57:58
【问题描述】:

我正在构建一个 WordPress 主题并试图确定是什么导致它运行如此缓慢。 Myfunctions.php 大约 500 行,并具有与数据库交互的功能,例如

add_action( 'wp_ajax_nopriv_get_N_more', 'get_N_more' );
add_action( 'wp_ajax_get_N_more', 'get_N_more' );
$N = 9;
function get_N_more ( )
{
    global $wpdb, $N;
    $thisTable = ($_POST['workType'] === 'projs') ? 'wp_nas_projs' : 'wp_nas_cases';
    $q = $wpdb->prepare(  "SELECT id,compname,descsmall,sumsmall,imageurl FROM $thisTable ORDER BY postdate DESC LIMIT %d, %d",  intval($_POST['numItemsLoaded']), $N);
    $nextNRows = $wpdb->get_results($q);
    removeEscapes($nextNRows);
    $stillSomeLeft = ($_POST['numItemsLoaded'] + $N) < count($wpdb->get_results($wpdb->prepare("SELECT * FROM $thisTable")));
    // ^ would like more efficient way of doing above  
    die(json_encode(array('stillSomeLeft' => $stillSomeLeft, 'workItems' => $nextNRows)));
}

此类函数不会在每次读取脚本时调用,但是我想知道如果 PHP 每次都读取它们,是否首先将它们放在那里可能会导致性能下降。

【问题讨论】:

  • 没试过wordpress,但是通常为了执行一个函数,需要调用函数
  • 下载并安装 Query Monitor 插件,然后查看哪些查询会降低网站速度。非常有用的插件,用于调试与慢速网站和查询相关的问题
  • 您在这方面取得了进展吗?

标签: php wordpress


【解决方案1】:

简短的回答是也许

  • 如果您针对已添加的操作多次调用 do_action(...),则可能是因为发出了多个 ajax 请求,并且在发出新请求时超时或被取消。
  • 页面运行缓慢的主要原因是您直接使用数据库。如果这些是自定义表,则很有可能您的索引设置不正确,并且查询需要永远返回或超时。
  • 您应该考虑将 get_posts 或 WP_Query 用于帖子或页面,因为您可以使用原生 wordpress 函数来提取数据。如果您制作了自定义帖子类型,则将数据存储在 post_meta 中,并使用 wordpress 核心功能而不是辅助表。
  • 一般来说,如果您的查询在几乎每次页面加载时都返回相同的信息,您可能需要考虑将它们存储到缓存中,这样您就不会重新计算每次页面加载。

这一切意味着什么?

  • 检查您的数据库表索引。运行查询,因为它是由您的代码在 mysql 工作台之类的东西中构建的。
  • 打开浏览器控制台或 firebug,查看加载页面时发出的 ajax 请求。
  • 检查您调用 do_action 的所有位置并进行相应调整。
  • 调试时将内容打印到文件或屏幕上。这将大有帮助。

【讨论】:

  • @Mauro 在所有标准的 wordpress 安装中都处理了 functions.php 文件,所以简短的回答是肯定的。但是,您可以在函数周围添加逻辑包装,以使其不执行,例如;但文件本身包含在 Wordpress 堆栈中。然而,作者询问他的特定逻辑是否每次都运行,这将取决于钩子是否正在执行。
【解决方案2】:

PHP 只能在请求期间读取您的函数一次,因此不会导致速度变慢。

看看你的函数的定义:

function get_N_more ( )
{
}

function_exists() 的检查中没有保护它。这意味着,如果该文件在任何地方被多次解析,执行将失败并报告您的 get_N_more 函数已在此范围内声明的错误。

在解析脚本时从不考虑代码的复杂性和运行时效率,500 行是相对微不足道的代码量。

tl;dr:这不是你速度变慢的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 2012-11-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多