【问题标题】:product list page of magento incredibily slowmagento的产品列表页面非常慢
【发布时间】:2016-11-16 17:05:21
【问题描述】:

我是 Magento 的新手,并且使用 CE 1.7.0.2 开发了一个网站。现在它已准备好上线,但我遇到了页面加载缓慢的问题。

我的网站产品主页、列表和详细信息页面最初需要 10-13 秒来加载页面,但在第一次加载之后,页面加载只需 1-2 秒。

我还在服务器上安装了 APC、Memcache 和 CDN,并为网站安装了整页缓存扩展,但速度很慢。我很沮丧,为什么我的网站会发生这种情况?

如果有人知道我们如何解决对我有帮助的加速问题。

谢谢!

【问题讨论】:

  • 您需要深入挖掘并检查导致问题的原因。您可以在 gtmetrix.com 或 tools.pingdom.net 上查看
  • 我相信很难找到您问题的解决方案,也许您可​​以进行一些调试并找到您认为问题所在的部分并提供一些代码? Stackoverflow 有一个很棒的 How to ask 指南,您可能也想看看。
  • 您是否安装了与目录相关的任何模块?

标签: magento


【解决方案1】:

您可以通过以下步骤进行 Magento 优化:

  1. 高性能专用服务器。例如:Amazon EC2 云
  2. 将 Apache 换成 NGINX
  3. 尽量减少 Javascript 的使用
  4. 缩小和压缩 CSS 文件
  5. “组合 CSS”旨在减少由 浏览器
  6. 优化图片
  7. 对图片使用延迟加载
  8. 指定图片尺寸
  9. 将图像组合成 CSS 精灵
  10. 使用内容交付网络 (CDN) 交付静态文件 比如 JS、CSS 和图像来卸载你的服务器
  11. 禁用不需要的模块/扩展
  12. 启用所有 Magento 缓存
  13. 使用整页缓存/清漆缓存/Memcache/RedisCache
  14. 如果你真的不需要,不要使用分层导航,它需要 很多资源
  15. 启用编译
  16. 限制产品概览页面上的产品数量。
  17. 仅将那些属性前端属性设置为“是” 其实打算用。将所有其他设置为“否”。
  18. 请勿用于快速搜索、高级搜索比较等:目录 -> 属性 -> 管理属性 -> 前端属性。
  19. 安装 Google Page Speed 模块
  20. 最小化重定向 – 最小化从一个 URL 到 另一个缩短了用户的等待时间。
  21. 首选异步资源 - 异步获取资源 防止这些资源阻塞页面加载。

【讨论】:

    【解决方案2】:

    此列表可能会帮助您提高 Magento 性能:

    启用 Magento 缓存

    这当然是优化的第一步:在 Magento 管理面板中启用所有可用的缓存。

    压缩图片

    许多人忘记了可以压缩图像(PNG、JPG),这会降低浏览器和网络服务器之间的带宽。不仅 Magento 皮肤使用的图像需要优化,目录图像也需要优化。多种工具可让您批量压缩图像,例如在线工具 Smush.It。

    禁用不需要的 Magento 模块

    通过禁用不需要的 Magento 模块,需要的资源更少——就这么简单。可以通过 Magento 管理面板中的配置或通过编辑 app/etc/modules 中的 XML 文件来禁用模块。例如,禁用对每个请求执行查询的 Mage_Log,但如果您使用外部程序收集站点统计信息,则不需要。

    为小型网店启用平面目录

    对于较小的网上商店,从复杂的 EAV 结构切换到平面目录可以节省时间。这种优化是可疑的,并且取决于许多参数,所以不要掉以轻心。

    W3C 合规性

    虽然可以说随着 HTML5 的到来,这一点变得不那么重要,但如果您的网页充满了丑陋的错误,浏览器将很难解释它,这仍然是一个事实。如果您坚持 W3C 合规性,则可以确保浏览器引擎能够轻松解析您的 HTML 代码。

    一般压缩输出

    通过启用 PHP 设置 zlib.output_compression,PHP 生成的输出在发送到浏览器时会被压缩。这节省了带宽。除了使用它,您还可以使用 Apache mod_deflate 模块,它还允许压缩非 PHP 输出(CSS、JavaScript、其他纯文本文件)。

    配置 PHP 选项

    大多数 PHP 设置实际上并不影响 Magento 的性能,只是设置了一定的限制。例如,memory_limit 和 max_execution_time 等设置不会增加页面负载,而只是确保某些操作不会超时或遇到内存问题。

    会话存储

    使用 Magento,会话可以存储在文件或数据库中(通过配置 app/etc/local.xml)。哪个选项性能最好,实际上取决于托管环境的设置方式。如果 MySQL 数据库运行良好,那么数据库中的会话存储可能会使您的站点受益。但如果 MySQL 设置不正确,最好的选择可能是文件。

    使用 PHP 加速器

    通过操作码缓存,可以加快 PHP 的执行。有各种 PHP 加速器可以完成这项工作(APC、ZendOptimizer+、eAccelerator、XCache)。 APC 和 ZendOptimizer+ 都与 Magento 完美配合。

    调整 PHP realpath_cache

    例如,通过将 PHP realpath_cache_size 调整为 128K(默认为 16K)并将 realpath_cache_ttl 调整为 86400,事情可能会加快。确保不会耗尽内存,因为每个 Apache 子节点都会消耗配置的缓存大小。

    使用 Apache mod_expires

    通过告诉浏览器哪些文件在缓存中保留多长时间,您可以优化浏览器缓存。例如,JavaScript 文件的更改往往比 CSS 文件少得多(至少在网站的第一阶段),但也许在网站平稳运行几个月后,您可以最大限度地延长到期日期。

    小心 404 错误

    每次找不到文件(如样式表或图像)时,都会生成 404 错误。因为 Magento 的默认 404 被 Magento 本身的应用程序捕获,这会导致 Magento 应用程序在遇到每个 404 时启动。检查您的 Apache 日志以确保所有 404 错误都已解决。

    禁用 Magento 日志记录

    在 Magento 配置中,您可以在 Developers 选项卡下启用日志记录。根据 Magento 模块的不同,这可能会导致需要将更多日志写入文件系统,从而降低您的商店速度。因为日志功能只需要调试一些东西,在日常使用中,最好完全禁用日志记录。

    MySQL 表优化

    通过 phpMyAdmin,您可以对特定的 Magento 数据库表执行命令 OPTIMIZE TABLE。当表混乱时,这可能会提高性能。这不仅适用于复杂的 EAV 表,也适用于经常使用的常规 MySQL 表(例如 core_config_data)。

    合并 CSS 和 JavaScript

    通过将所有 CSS 和 JavaScript 文件合并为一个大文件,浏览器只需一个 HTTP 请求即可获取此内容。这节省了带宽。对于这种合并,可以使用 FooMan Speedster 模块。 Magento 1.4 包含一个合并 CSS 的选项,而 JavaScript 文件默认是合并的。

    除了合并之外,FooMan Speedster 还提供了一个选项:它会从输出中删除空格,但是当压缩已经应用于 CSS 时,这个选项就不需要了。

    使用 Magento 编译器模块

    Magento 编译器模块限制了 PHP 在查找 PHP 文件时必须搜索的目录数量。这减少了 PHP 的执行时间,从而总体上加快了 Magento 应用程序的速度。

    请注意,在启用 Magento 编译器的情况下,对 Magento 系统进行更改时需要小心。只有在(暂时)禁用编译器时才应进行升级。

    一个非常巧妙的技巧是为 include/src 文件夹专门创建一个 tmpfs-mount。请注意,此 tmpfs-mount 至少需要 100Mb——最好是 200Mb。

    MySQL 服务器调优

    默认的 MySQL 设置足以运行一般的托管环境,但并非全部针对 Magento 进行了优化。调整诸如 query_cache_size 之类的设置可以显着提高性能,但也很危险,因为它在很大程度上取决于其他变量(数据库数量、每个数据库的表数量、查询数量、峰值使用量)。

    通过 CDN 提供静态内容

    图像、CSS 样式表或 JavaScript 文件等静态内容可以通过针对静态内容进行了更优化的其他服务器提供。例如,可以使用 CDN,以便始终从离访问者最近的位置提供静态内容。这对于为全球客户提供服务的网店而言至关重要。

    禁用本地 Magento 模块

    如果您的站点不需要本地 Magento 模块,您可以选择一起跳过对本地模块的搜索。在 app/etc/local.xml 文件中,您会发现一个 XML 标记允许您这样做。

    小心使用 HTTPS

    每次在webserver和浏览器之间使用ssl,加解密的过程都会加在两边。带宽也有轻微的开销。如果您对所有页面或仅几个页面禁用 SSL,Magento 站点的运行速度会稍快一些。但是,与此页面上的其他胜利相比,此“胜利”是如此之小,因此只能谨慎处理。获得的带宽并不重要,而如今几乎所有计算机都具有 CPU 处理能力,可以在几微秒内完成加密/解密过程。

    云中的 Magento

    虽然 CDN 可用于优化静态内容的带宽,但 Magento 应用程序也可以通过使用云计算以同样的方式进行优化。

    用于动态数据的基于内存的文件系统

    通过在 RAMdisk 或 tmpfs 等基于内存的文件系统上存储动态数据(var/cache、var/session),可以减少磁盘 I/O。

    禁用 Apache htaccess 文件

    当允许使用 htaccess 文件时,Apache 需要检查其路径中的每个目录以查看是否存在 htaccess 文件。通过将 Apache 配置指令从 htaccess 文件移动到 VirtualHost 配置文件,并一起禁用 htaccess 文件,Apache 的执行时间减少了。此提示可能在大多数情况下仅适用于专用服务器。

    使用 Nginx 或 Litespeed

    虽然 Apache 网络服务器的配置非常灵活,但还有其他网络服务器在内存使用方面得到了更好的优化:通过将 Apache 替换为 Nginx 或 Litespeed,您可以进一步加快 Magento 脚本的速度。两个网络服务器都需要手动配置以允许 SEF URL。

    对图片使用延迟加载

    当页面加载时,访问者通常会等待该页面上的图像加载。根据这些图像的数量和大小,这可能需要一些时间。除了在页面加载时立即加载图像,您还可以添加 LazyLoad JavaScript 效果,确保仅加载可见图像(在浏览器屏幕内),而其余图像仅在访问者向下滚动时加载。

    最小化 Apache 日志记录

    如果最小化 Apache 日志记录,则每个传入请求所需的文件操作更少。当然,更少的日志记录也意味着在出现问题时更少的洞察力。另一种方法是优化存储 Apache 日志的文件系统。默认情况下,Apache 将日志记录到 /var 文件系统,但无需为该文件系统启用日志等功能。

    参考:http://magentotutorialbeginners.blogspot.in/2014/05/magento-performance-improvement.html

    【讨论】:

      【解决方案3】:

      如果您已经完成了所有类型的服务器和缓存优化。转到代码级别。

      1) 查看您是否在 foreach 循环中加载集合。

      2) 尝试优化代码。

      3) 如果您正在加载集合,请仅过滤集合以获取所需的属性。

      4) 检查您的产品图片。使用 png 图片并尽量将图片大小保持在 500 KB 以下。

      5) 尝试评论您在该页面上提供的自定义功能。并使用 GTMetrix 等工具进行检查。你实现了多少时间来加载页面。尝试找出需要很长时间加载的代码。

      6) 在分层导航中仅保留用于过滤目的的必要属性。

      7) 尝试禁用不必要的模块。

      8) 启用编译后尝试。

      希望这些建议对你有用。

      【讨论】:

      • 但是我不明白在哪里为产品集合编写代码。请建议我的代码文件路径,这将有助于检查代码
      • @user3611432 尝试检查 \app\design\frontend\default\yourtheme\template\catalog\product\list.phtml 文件的代码自定义
      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多