繁体   English   中英

每次都读取功能的正文吗?

[英]Does the body of my function get read every time?

我正在构建一个WordPress主题,并试图确定是什么导致它运行如此缓慢。 我的functions.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每次都读取它们,那么将它们放在首位是否会导致性能下降。

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

查看函数的定义:

function get_N_more ( )
{
}

它不会在对function_exists()的检查中得到保护。 这意味着,如果对该文件进行了多次以上的分析,则执行将失败并报告一个错误,表明已在此范围中声明了get_N_more函数。

在脚本解析期间,永远不会考虑代码的复杂性和运行时效率,而500行是相对琐碎的代码量。

tl; dr:这不是造成您变慢的原因。

简短的答案也许是。

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

这一切是什么意思?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM