Chr*_*nov 7 performance categories opencart
我在我的服务器上运行Opencart 1.5.2,在导入大量产品后,我的速度大了很快.我尝试安装一个 必须加速网站的vq mod ...它没有.
我知道我在网站上有一些相对较大的元素,但在导入之前运行良好.
cha*_*suf 12
类别中的产品计数是opencart中缓慢页面加载的重要来源.有一些地方可以计算出来,你必须摆脱所有这些因为这个因素而注意到页面加载时间的改善.
如果编辑Catalog
模块,则可以通过设置Product Count:
为禁用导航菜单的产品计数(默认情况下显示在左栏中)Disabled
.
默认主题还具有显示在站点主菜单中的产品计数.您可以在catalog/controller/common/header.php中找到此代码:
$product_total = $this->model_catalog_product->getTotalProducts($data);
$children_data[] = array(
'name' => $child['name'] . ' (' . $product_total . ')',
'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
);
Run Code Online (Sandbox Code Playgroud)
删除或注释掉任何引用$product_total
:
//$product_total = $this->model_catalog_product->getTotalProducts($data);
$children_data[] = array(
'name' => $child['name'],
'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
);
Run Code Online (Sandbox Code Playgroud)
这应该处理默认的opencart安装中的所有引用,但如果您使用自定义主题或模块,则可能会有更多.更一般地说,您可以在整个目录/目录中搜索引用model_catalog_product->getTotalProducts()
.
如果您搜索其他引用,getTotalProducts()
请确保不删除使用产品计数进行分页的引用,否则分页将无法正常工作.以下是catalog/controller/product/search.php中的一个示例,该文件需要产品计数才能正常运行.
$pagination->total = $product_total;
Run Code Online (Sandbox Code Playgroud)
删除这些引用导致我的开发服务器上的页面加载时间增加了近10倍,在opencart安装中有大约2,000个产品.
Mat*_* P. 12
如果您seo urls
在opencart中启用了它,它可能是一个缓慢的重要来源.
我有大约3K类别和40K产品的oc v1.5.5.1.我在共享主机上运行它,起初我的加载时间大约是40秒甚至更高.然后我对opencart有了更多的了解,并意识到它oc_url_alias
在oc数据库中的表上发出了大量的请求.所以我的建议是:
1.Add index to query column in oc_url_alias table
有了这个,我的加载时间下降到每页约7秒.
2.Add index to keyword column in oc_url_alias table
在这两个步骤之后,我将其降低到每页大约1-3秒.
现在我的oc每页运行大约1秒钟,我通过在我的mysql表中添加更多索引来实现这一点,根据这个人的帖子http://bloke.org/php/opencart-is-slow-with-many- category /,它们是:
Index on parent_id column in category table
Index on category_id column in product_to_category table
Index on language_id column in category_description table
Index on store_id column in category_to_store table
Index on attribute_id AND language_id columns in product_attribute table
Index on manufacturer_id column in product table
Index on language_id column in product_description table
Index on store_id column in product_to_store table
另外,正如其他答案中所述,我也删除了产品数量:catalog/controller/product/category.php
和catalog/controller/module/categories.php
.如果仍然经历缓慢,您可以从侧边栏完全禁用类别模块.
最后,您可以尝试使用此扩展程序:http://www.opencart.com/index.php ? route = expand/extend/info&expand_id = 10464,但它不支持seo URL,所以我不得不调整它有点(通过解码$_REQUEST['_route_']
参数,其中包含seo url请求,在函数中run
).
小智 10
搞定了.在OC团队发现的SQL查询中似乎有一种"新的"方法,它应该被称为"DDoS自己死".
产品库已经发展到129种类别中的37k种产品(从18k到夜晚,大声笑......不应该自动编写自动导入脚本并将其分配给lamer ......)并且加载时间从6-12秒增长到20-25秒,用力点击SQL服务器:
[quote]Вопросовначинаясзапуска:514,064,911(自启动以来的问题)øвчас:1,301,788(小时平均值)øвминуту:21,696(问题平均分钟)øвсекунду:362(问题平均为秒)[/ quote ]
这不正常,因为系统上有2个用户 - 自动脚本(限制 - 每秒30个问题,然后睡眠(1))和我(362-30 =每秒332个查询?由人类?WTF开发人员? ).基于此统计信息,OC以这种方式需要一个严肃的服务器场,同时为500多个用户提供服务.不会发生.不是在今生.
我确实维护了各种网站并重写了几乎所有网站.我访问量最大的网站(每天20万次访问)每天产生"仅"2.5Mil的问题.而且它很重(内容),相信我.如果OC被平均加载(20万次观看),这意味着每天将有100-120Mil的问题.
此外,查询不是那么明智,使用ORDER BY(我怀疑)和SELECT DISTINCT(痛苦!!!)给服务器带来困难.
此外,每个查询都设置了许多选项,无论它们是否由用户设置(排序,顺序等).即使用户不想要任何排序顺序(ASC,DESC等),这也会比预期长4-5倍.
还有以这种糟糕的方式写的问题,这让我很开心.你怎么能通过使用5个phps和3个查询来提取任何东西的总数,只要你能做简单的1行"SELECT COUNT(*)FROM ..."?OC团队似乎并不关心执行时间和服务器负载.
如果有人对我写的内容感到不满,我想道歉,但就我而言,我是对的:实现目标的整个方法都是错误的(快速执行37k产品/ 129只猫).对于拥有2个类别和50个产品的人来说,OC可能会很好(哈哈?).不知道.我可能不会发现.
作为INFO - 缓存不是解决方案.服务器端缓存已经足够了.除此之外的任何事情意味着您有严重的编码问题.所以不要......我会重复不要购买缓存模块.隐藏问题,而不解决问题.如果缓存模块可以隐藏40k产品的问题,它将无法在140k产品中实现.您将需要用于缓存模块的缓存模块,lol.
现在,到解决方案.简单的方法.我们只会修改主要问题.我不会解释我对我的版本进行的修改,因为它们在很多文件中并且如果你不明白你在做什么就很关键(你可能会遗漏你想要保留的OC选项,而我却不在乎关于选项,只要网站加载半分钟).所以 - 只进行小修改.
威尔说 - 解释版本1.5.5.1股票,股票主题.手段 - 没有mods.修改后你会松开左边的区块,但是你的网站会加载非常快(37k产品/ 129只猫 - 平均5次加载时平均值> 0.137秒,服务器距离约为200mi)
0)备份您的网站.我们将修改文件.你可能会搞得一团糟.然后哭了.
1)获取/catalog/controller/product/category.php查找行:184
必须包含: $product_total = $this->model_catalog_product->getTotalProducts($data);
用...来代替: //$product_total = $this->model_catalog_product->getTotalProducts($data);
描述:评论类别计数,因为计算129个类别的产品需要相当多.(129个查询?WTF?)
2)获取/catalog/controller/product/category.php查找行:187
必须包含:'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : '')
,
用...来代替: 'name' => $result['name'],
描述:清理 - 没有计数显示在类别中,因为我们不再计算它们.
3)获取/catalog/controller/product/category.php查找行:388必须包含: 'common/column_left',
用...来代替: // 'common/column_left',
描述:在类别视图中生成左列的Skippng.
4)获取/catalog/controller/product/product.php查找行:463必须包含: 'common/column_left',
用...来代替: // 'common/column_left',
描述:在产品视图中生成左列的Skippng.
5)获取/store/catalog/view/theme/default/template/product/product.tpl查找行:1
必须包含: <?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
用...来代替: <?php echo $header; ?><?php echo $column_right; ?>
描述:从主题 - 产品视图中删除左列.
6)获取/store/catalog/view/theme/default/template/product/category.tpl查找行:1
必须包含: <?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
用...来代替: <?php echo $header; ?><?php echo $column_right; ?>
描述:从主题 - 目录视图中删除左列.
DONE.测试你的加载速度.如果你的问题像我一样,那应该是相当惊人的.
注意:请注意,我不熟悉OC的任何版本,并且从未使用过它.由于我们已经解决了部分问题,因此尚未完全解决.这是一个临时修复.删除导致负载缓慢的部件是一种解决方案,直到您再次编写它们,这次希望更好.如果有人想要超过我的老板,我愿意改写它.我可以休假并为你工作:)我的付款目前是每周4700欧元.以正确的方式理解和重写此左列不应超过1-2个工作日.
PP.将这个发布在几个地方,因为我不认为OC开发团队会喜欢他们读过的东西,不管我不想冒犯他们 - 只是为了指出他们犯下的重大错误(25.31平均加载时间)对于测试中的每个页面 - 没有客户会在离开另一个站点之前等待超过3-4秒!Dafuq?).通过不让我发布这些信息,人们不知道如何解决问题,并购买一个"缓存模块",实际上是疯狂的硬盘上的文件.浪费金钱,浪费硬盘资源,浪费电力......所有这一切 - 为了创造幻觉,一切都运行良好,而事实并非如此.
归档时间: |
|
查看次数: |
36867 次 |
最近记录: |