Questions tagged «optimization»


8
重构Wordpress以提高内存性能
我仔细查看了Wordpress的内存消耗。在我的网站上,似乎为每个页面命中分配了20MB的RAM,只是为了为所有插件的运行准备一个舒适的环境。因此,我对它进行了绘制: 没有一个地方可以优化,没有一个坏家伙会消耗大部分的内存。消费分布在许多许多php模块中。 我们如何才能使Wordpress仅在内存中初始化其环境一次,然后为每次命中多次重复使用它?我不想让缓慢的PHP在每次用户单击时都占用20 MB的空间-即使在具有大量内存的服务器上,也要花费数秒钟才能完成所有工作。基本上,您将需要可重用的只读内存块。 还有...为什么20MB?谁能提供对此的见解? 编辑:这是在我的开发计算机上运行的Wordpress上的WinCacheGrind输出(比共享主机快得多)。如您所见,仅花费一秒钟的时间就可以生成主页的HTML。通过共享主机降低速度,您会遇到麻烦。我选择了大部分时间使用的方法。您将如何进行优化? 编辑:这是此出色的functions.php分析工具的查询统计信息。 负载:12个查询-532ms-19.1MB-43次缓存命中/ 53 查询:15个查询-563ms-19.0MB-72个高速缓存命中次数/ 86 显示:21个查询-705毫秒-19.2MB-234个高速缓存匹配数/ 257 编辑:您是否想看到某些保证会吓到您的东西?将这些行插入index.php的末尾: echo "<pre>\n"; print_r(get_defined_vars()); echo "</pre>\n"; 我试图计算当前帖子的正文存储在内存中的次数。我计算了20个实例。然后我意识到PHP具有引用计数,因此副本的数量减少到只有三个:两个似乎在WP_Query中,一个在对象缓存中。我正在进一步调查。 这就是为什么我认为WordPress需要针对内存问题进行重构的原因。您再也不能将其内存消耗归咎于其功能的复杂性。它只是做错了很多事情。 编辑:经过一天的努力,这是我的发现: 1)88%的内存来自require或include或include_once调用类型: 2)php文件包含的内容大部分发生在服务请求的第一部分(并不奇怪),这也是消耗所有内存的地方: 3)绘制请求期间正在执行的所有功能非常有趣。共有12000多个电话。我将它们抖动以使其更加可见(“ Level”轴基本上是堆栈的深度): 4)我能想到的唯一方法是最大程度地减少包含的.php文件的数量。如果我将每个文件的功能分开,则可以看到许多文件最多被命中一次或两次。我们需要一种在不需要它们时如何跳过它们的方法。例如,我的远程数据库备份插件已加载并注册,根本就从未使用过。这是上面的图,按文件名分割: 我提供的赏金值得我所有声誉:)的重构,这将使我的博客内存占用减少30%或更多。 编辑:我安装了WP 3.1,这是与旧版本的比较。 蓝色是WP 3.1,红色是3.0.4。新的WP更快,​​但也占用更多内存。 这是包含文件的列表。 这让我意识到“ All In One SEO包”消耗了多少内存-一种途径是仅使用插件功能的一小部分来获取我想要的东西。另外,我自己的插件似乎还不错。 我想尝试对有条件加载,例如comment.php(我不允许在博客上发表评论)和其他几个条件。我删除了所有不推荐使用的代码。我整理了kses.php以仅按需加载其全局表。我简化了l10n(我不进行本地化),使它的函数立即返回字符串,而无需查找。我距离我随意设置的30%的目标还差得很远。 编辑:我下载并启用了APC的默认设置(操作码缓存为32MB)。比较如下: 您会看到代码加载速度大大加快,并且代码占用的内存也更少(可能是因为我们只处理操作码,而不是原始源代码)。但是,内存消耗仍然很高。

1
为批量操作优化帖子的插入和删除?
在处理单个帖子时并不是很明显,但是当您通过代码批量创建或删除成千上万个时,过程非常缓慢。 是否有任何可应用的好调整和切角? 内容: wp_insert_post() 传递类别和标签; 添加几个自定义字段; 创建和关联附件(从现有文件)。

3
如何为数以百万计的帖子优化WP网站
我正在一家公司的网站上工作,该公司很可能会通过自定义帖子类型创建数百万个帖子。他们是祈祷,所以基本上前端的用户只是通过表单提交了一个简短的短语。公司所关心的只是帖子内容和发布日期。该网站甚至还没有启动,他们已经有超过120,000个帖子,所以当我说几百万时,我非常认真。 因此,有几个优化问题: 假设我在具有500,000个帖子的自定义帖子类型中有一个“精选”类别。特色类别只有500个帖子。如果我为特色帖子创建查询,是查询整个500,000个帖子,还是仅查询500个特色帖子?如果我只想显示精选的十篇最新文章怎么办? 将这种自定义帖子类型保存到数据库时,我可以做些什么来减少服务器资源,特别是因为真正需要的只是帖子的内容和日期? 我是否应该使用自定义帖子类型?我原则上喜欢它,因为它已很好地集成到WordPress管理员中,但是如果性能存在明显的劣势,那么我想我可以做一些不同的事情。 我从未在如此规模的项目上工作过,所以我比平时更关心性能。谢谢你的帮助!

4
如何使用wp-super缓存来缓存json
在一个新项目中,我们使用wp-super-cache(客户端的首选插件)为自定义内容类型创建静态html文件。但是,我们正在尝试确定是否正确缓存了所有内容。 这是一个两部分的问题。 1)我们创建的主题利用页面模板来输出通过ajax调用吸收的json。即。如果您访问以下页面:theurl.com/sample-您将获得纯json。尽管每个页面和帖子都有一个非JavaScript版本,但Ajax驱动了该主题的前端。我们已经删除了这些文件中的页眉和页脚,以便它是纯json,并且我们正在尝试找出如何确定json是否正在缓存。从理论上讲,数据将被缓存,因为从技术上讲它是由wordpress提供的页面。但是,我们如何确定它是否正在缓存? 2)我们也使用json api插件来提供某些帖子数据。 http://wordpress.org/extend/plugins/json-api/ 对于此示例,假设我们正在使用插件的默认输出方法并访问此页面:my url.com/category/news?json=1-是否有谁知道我们如何验证此输出是否已缓存?如果不进行缓存,哪种方法可以实现? 网上似乎没有太多相关信息,因此本着创建引人入胜且经过优化的wordpress网站的精神,帮助兄弟们

2
除了使用$ content_width进行图像优化之外,还有什么更好的选择?
$content_widthWordPress中的GLOBAL通过限制图片大小和嵌入帖子的大小来影响许多主题,甚至影响某些插件,这是将主题提交给wordpress.org的要求。 通过使用以下命令设置: $content_width = 584; // Twenty Twelve example 如果在帖子中插入大图像(默认为1024x1024),则会导致: src="../wp-content/uploads/2013/02/IMG_1390-1024x682.jpg" width="584" height="328" 相反,如果您删除此全局设置并插入实际图像大小,则对其进行设置add_image_size将导致: src="../wp-content/uploads/2013/02/IMG_13901-584x328.jpg" width="584" height="328" 在包含多个图像的页面中,删除全局图像并插入大图像(这是非常常见的)通常会节省超过2倍的内存,我发现页面加载时节省了数百KB。 使用add_image_size和删除插入全尺寸图像的功能不是更好的选择吗? ps。我在这里用更准确的数据写过

6
如何对WordPress安装进行基准测试?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为WordPress Development Stack Exchange 的主题。 4年前关闭。 我正在尝试收集一些基准测试数据,以确定我对WordPress的优化的合理程度。我在“高流量提示”上找到了此页面,但其中不包含任何数据。有没有可以对WordPress进行基准测试的工具?它不仅可以很好地抵御流量,还可以处理诸如每小时执行X个帖子,每分钟执行X条评论以及WordPress其他正常使用案例时的缓存公平性等问题。 作为记录,我针对安装运行了Siege和Blitz.io,但这只是您的站点可以很好地缓存和处理/传播请求的方式。如果那是唯一可以持续产生的唯一度量(也许req / s是唯一可行的方法),那很好。如果还有其他工具可以显示在不同使用情况下可以维持多少请求/秒(必须在10分钟内重新生成缓存,如果它在刷新时服务,或者清除缓存然后刷新缓存,将产生很大的影响)。

2
WordPress的数据库慢-我应该切换到InnoDB吗?
我有一个WordPress网站,帖子数量超过1万,每当我添加和编辑帖子时,事情开始变得非常缓慢。页面对用户以及帖子的管理列表的加载速度都非常快,但是这是在发生写入或更新时,服务器将使用100%CPU并花费很长时间(有时比PHP的60秒超时时间长)。 我认为这很可能与MyISAM的表级锁定有关,并且正在考虑将其切换到InnoDB。这样做的含义是什么? 一些统计: select - per hour ~22k update - per hour ~7.6k set option - per hour ~7k 我知道我可以进行很多其他优化,但是我觉得这可能会产生最大的影响。 谢谢 编辑:我发现导致速度缓慢的主要问题之一是每次都重新生成“关联性”的是YARPP(还有另一个相关文章插件),这似乎是由于我们拥有2k +标签。我关闭了“考虑标签”选项,它的速度大大加快了。 此外,其他可重新生成内容的插件也可能导致此类问题,例如某些XML网站地图插件。 因此,尽管我仍然很想听到InnoDB与MyISAM for Wordpress的良好回答,但我的当务之急得到了解决!

4
在共享的Web主机上优化基于接近度的商店位置搜索?
我有一个项目,需要为客户建立商店定位器。 我使用的是自定义帖子类型“ restaurant-location”,并且我已经编写了代码以使用Google Geocoding API对postmeta中存储的地址进行地理编码(此处是使用JSON对美国白宫进行地理编码的链接,并且我将纬度和经度自定义字段。 我已经编写了一个get_posts_by_geo_distance()函数,该函数使用我在此幻灯片中的幻灯片中找到的公式,按地理上最接近的顺序返回帖子列表。您可能会这样调用我的函数(我从固定的“源”纬度/经度开始): include "wp-load.php"; $source_lat = 30.3935337; $source_long = -86.4957833; $results = get_posts_by_geo_distance( 'restaurant-location', 'geo_latitude', 'geo_longitude', $source_lat, $source_long); echo '<ul>'; foreach($results as $post) { $edit_url = get_edit_url($post->ID); echo "<li>{$post->distance}: <a href=\"{$edit_url}\" target=\"_blank\">{$post->location}</a></li>"; } echo '</ul>'; return; 这是函数get_posts_by_geo_distance()本身: function get_posts_by_geo_distance($post_type,$lat_key,$lng_key,$source_lat,$source_lng) { global $wpdb; $sql =<<<SQL SELECT rl.ID, …

2
WP_Query泄漏荒谬的内存量
每当我在下面的函数中调用WP_Query()时,Wordpress就会泄漏8兆的内存。而且,由于我多次调用此函数,所以事情很快就变得很毛茸茸了……:(我尝试取消生成的$ queryObject以及定期调用wp​​_cache_flush(),但似乎都没有任何效果。 function get_post_ids_in_taxonomies($taxonomies, &$terms=array()) { $post_ids = array(); $query = gen_query_get_posts_in_taxonomies($taxonomies, $terms); // var_dump($query); //Perform the query $queryObject = new WP_Query($query); //*****THE 8 MEGABYTES IS LEAKED HERE***** //For all posts found... if($queryObject->have_posts()) { while($queryObject->have_posts()) { $queryObject->the_post(); //Get the $post_id by capturing the output of the_ID() ob_start(); the_ID(); $post_id = …

3
计划WordPress数据库增长的好策略是什么?
希望随着WordPress数据库的增长而获得关于优化和保持性能的主题的一些反馈...描绘一幅画....假设您有一个WordPress / Buddypress MU网站,开始于150kb左右(香草安装) ...随着时间的流逝,用户添加博客,论坛,帖子和评论,数据库将增长到5mb...。明年将增长到10mb...。此外,假设托管控件是标准的共置设置,例如Cpanel或Plesk。 在什么时候数据库条目的数量会影响前端网站的性能? 作为网站管理员,您可以做什么来随着数据库的增长保持平稳运行? 当数据库容量为500-600mb时,在五年后的性能方面会有什么期望? 感谢您对保持紧密联系的任何反馈。 问候, S.

4
在get_posts()中为meta_query参数设置别名
有没有办法在运行meta时在meta_query参数上设置别名get_posts()?我的查询之一表现不佳。为了进行优化,我只需要能够重用相同的联接表,而不是只需要一个表就联接3个表。 我目前的例子 $args = array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'abc_type', 'value' => array('puppy', 'kitten'), 'compare' => 'IN', ), array( 'relation' => 'OR', array( 'relation' => 'AND', array( 'key' => 'abc_type', 'value' => 'puppy', 'compare' => '=', ), array( 'key' => 'abc_color', 'value' => 'pink', 'compare' …

2
如果Google将整个帖子分成几页,则将其编入索引
尽管这是一个问题,但对于使用分隔其帖子的发布者也是一个严重警告<!--nextpage-->。 和我一起裸露。我运行了一个流量很高的多作者平台,该平台在搜索引擎上排名很高。在进行与SEO相关的改进时,我注意到Google仅索引了分成几页的文章的第一页。我是怎么注意到的? 因为有人抓住了文章未索引页面的内容并将其发布在自己的网站中。这导致他们在该特定关键字上的排名高于我。实际上,让我重新表述一下,我网站的文章甚至没有被索引到第一页之外。 我的问题是,如果文章分成几页,如何使搜索引擎对整个文章进行索引?理想情况下,如果访问者是搜索引擎,则该脚本将显示完整的文章(如果这样做不会对SEO有害)。欢迎其他建议。 附带说明一下,如果我喜欢Black Hat技术,那将是我可以利用的内容的金矿。想一想。 而且,就个人而言,应该在以后的Wordpress更新中解决此问题。 更新:是详细讲述了一个类似的问题WordPress的创建相同的规范网址为分页序列的所有网页被要求在这里,然而答案被张贴,并标记为正确不回答这个问题。该解决方案仅适用于分页评论,不适用于分页帖子。 更新2:根据Google的这篇博客文章,我们可以使用rel=”next”和rel=”prev”指示页面之间的关系。例如,这就是我们应该在第2页中包括的<head>内容: <link rel="canonical" href="http://domain.com/article/2" /> <link rel="prev" href="http://domain.com/article/1" /> <link rel="next" href="http://domain.com/article/3" /> 如果在它之前/之后没有页面,则不应有rel =“ prev”或“ next”。

1
如何优化包含25,000个帖子的自定义帖子类型管理页面?
由于一次加载这么多帖子,我偶尔会收到过多的资源限制错误。我们已将PHP限制设置为128,但仅加载几种帖子类型的帖子列表会占用更多资源。 在具有25,000个帖子的管理页面上,有217个查询,在另一个具有15,000个帖子的管理页面上,有301个查询。 有没有一种方法可以缓存这些页面,或者可以使用另一种方法来加载这些页面而没有问题?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.