如何使用 Magento 2 获得最大效率。 Max Pronko 访谈
已发表: 2017-01-17Max Pronko 是新手必须遵循的 Magento 大师之一。 他是 Magento 专家和公众演讲者、Magento 认证开发人员和流行的 Magento 2 博主。
Max 在 Magento 拥有 10 年的软件开发和咨询经验,成功地设计和实施了从中型到大型规模的高质量产品。
在 Twitter 上关注 Max。
最近 Max 去见了 Magento 匈牙利,并在 Magento 2 主题演讲中展示了性能优化的真实用例。 在这方面,我们想从几个与本演示文稿直接相关的问题开始我们的采访。
第 1 部分:常见的 Magento 扩展挑战
几乎每个 Magento 2 商家都使用 3d 派对扩展,一方面极大地增强了默认平台的功能,但另一方面,对性能工作流程产生了负面影响。
Natalie:总的来说,您如何评价 3d 派对扩展的代码质量以及它们可能影响服务器负载的方式?
Max:感谢您有机会谈论 Magento 2,Natalie。 我关注你的博客已经一年多了,每次访问它,我都会发现一些有趣的文章。 这次真是万分感谢。
你可能知道,我喜欢查看代码有以下几个原因:
- 首先,我获得了经验并观察了如何将业务需求转换为功能齐全的高质量特性的有趣技术。 尤其是在 Magento 2 方面。
- 其次,它帮助我了解 Magento 生态系统中的知识共享有多好。
95% 的 3rd 方扩展需要广泛的代码审查和改进代码的指导。
到目前为止,我已经进行了大约 2 年的 3rd 方扩展代码审查。 不幸的是,我不能说我对我得到的结果感到满意:95% 的 3rd 方扩展需要大量的代码审查和改进它的指导。 让我对编码标准保持沉默。
即使扩展程序创建并仅涵盖具有某些特定功能的页面选择,我也会遇到所有网站页面的性能问题。 例如,在默认布局配置文件中包含不可缓存的块。 Magento 会自动为所有页面禁用页面缓存。
另一个例子是使用耗时的后端操作而不将执行结果存储在类变量中。 它可能会大大减少首页加载。
我有机会查看了大约 60 个扩展程序,包括付费和免费扩展程序,所以我的评分是基于这个数字。 当然,我可能会推荐使用一些扩展。
Natalie:您认为最常见的代码优化问题是什么?
我从未见过在 3rd 方扩展中使用代理类。 但是,它可能会减少递归对象初始化的时间。
Max:通常扩展是在一轮中创建的,没有性能优化,我可以称之为“实施和交付”。 第二轮很少出现,代码未优化。 例如,我从未见过在 3rd party extensions 中使用Proxy 类。 但是,它可能会减少递归对象初始化的时间。
Natalie:你能给那些为 Magento 2 编写第一个扩展的新手开发者什么优化建议?
Max:在本地环境之外使用 Magento 2 测试您的扩展是一个好主意,最好是在云中的某个地方。 如今,以 5-10 美元的价格从 DigitalOcean 或 AWS 购买虚拟服务器并运行基本的端到端用户测试并不昂贵。 至少,与开箱即用的 Magento 2.x 版本相比,它可能显示出相当不错的性能差异。
第 2 部分:M2 性能优化
Natalie:你对块缓存的特性有什么看法(在缓存键中最好使用/避免什么)?
Max:Magento 2 社区版带有 Varnish 代理服务器支持。 对于所有在缓存未准备好时不担心首次访问者的商家来说,这非常有用。 块缓存对未存储在 Varnish 中的页面起作用。 您可能期望客户帐户、目录搜索、购物车等页面上没有清漆。
每个块的正确缓存键对于构建正确的缓存条目和增加对后端存储(如 Redis)的缓存命中非常重要。 理想情况下,所有涉及前端渲染的实体都应该实现getIdentities()方法附带的Magento\Framework\DataObject\IdentityInterface接口。 如果您需要为块缓存编译正确的缓存键,此方法非常有用。
Natalie:关于 SQL 查询优化的任何信息?
Max:对于 SQL 优化,我通常会尝试列出从表中选择的所有可能的数据变化。 理想情况下,所有查询都应该命中 MySQL 索引以获得更好的性能。 我知道这是一个理想的情况,但是,它确实有助于加快对表中大量记录的查询。 当然,SQL 查询优化是一个巨大的话题,所以我可以讲几个小时。
第 3 部分:Magento 2 搜索
Magento 2 可以吹嘘比 M1 具有更好的开箱即用搜索,但仍然不支持复合查询、拼写错误、自动更正、同义词。 此外,M2 搜索不扫描类别和 CMS 页面。
Natalie:在 CE 版本中改进搜索的最佳方法是什么:扩展或外部搜索引擎?
Max:我考虑将 Elasticsearch 用于 Magento 2 社区版。 当然,无论是内部开发还是使用 3rd 方扩展,它都需要开发。 对于 Magento 2 项目之一,我们使用了带有附加配置的内置搜索,例如同义词和重定向到常见搜索查询的登录页面。 但是,这是一个短期解决方案,我会选择一些外部服务。
Natalie:谈到外部搜索引擎,哪个更适合小型/中型/大数据网站:Solr、Sphinx 或 Elasticsearch(或其他)?
Max:对于小型网站,我会考虑使用默认的 Magento 2 搜索。 对于其他人来说,如果您想构建自己的解决方案,更多的是关于扩展和文档的好坏。 Elasticsearch 是我的首选。
Natalie:你能推荐一些可以改进默认功能的搜索扩展吗?
Max:我有经验审查 MageWorx 为 Magento 2 制作的 AutoComplete 模块。 与默认的 Magento 2 社区版自动建议功能相比,它显着改善了用户体验。 MageWorx AutoComplete 模块将为商家带来更多转化和销售。 关于代码实现,我的得分是 4.5 分(满分 5 分)。可以做一些小的改进来提高整体开发人员的体验。 AutoComplete 模块的优点之一是它可以免费下载。 我会考虑为 Magento 2 Merchants 使用并推荐这个模块。
除此之外,我将继续审查 Magento 2 的搜索相关模块,并提供我对代码质量的反馈。
第 4 部分:Magento 2 挑战
Natalie:您是一位久经考验的 Magento 开发人员,在与 Magento 合作多年后,第二版平台带来的最具挑战性的问题是什么?
例如,据我所知,即使是 M2 中的微小代码更改也会导致许多操作(如 bin/magento setup:upgrade、bin/magento setup:static-content:deploy、bin/magento setup:di:compile 等。 )
Max:我认为在大多数情况下,当开发人员坐在 PHPStorm 前编写代码时,没有时间真正深入研究 Magento 2 架构。 例如,我认识一些优秀的开发人员,他们抱怨 UI 组件并且缺乏使用它们的真实示例。 新的 Magento DevDocs 很好地概述了UI 组件。
在 Magento 1 方面具有良好经验的开发人员会发现 Magento 2 复杂且有时具有挑战性。 新技术总是带来学习新事物的新机会。
甚至还有一张关于它的图片。
Natalie:最后,Magento 2 于 2015 年 11 月发布。你认为它是否已经完全准备好让全球的商家开始迁移?
马克斯:绝对是的。 Magento 2 作为一个软件,比 GitHub 上的一些未解决的问题有更多的好处。 在精心策划的迁移和营销策略的情况下,与 Magento 1 相比,它显然可以带来更多的收入。 我记得我在 2015 年 8 月对我们的一个 Magento 2 项目说“是”,当时它只是一个 Beta 版本。 现在我们非常乐意使用和构建基于 Magento 2 的电子商务网站。
我在Pronko Consulting的团队将很高兴将新的愿景带入生活并推出新的 Magento 2 网站。
*****
我们要感谢 Max 接受这次采访,并祝愿他和他的团队在这一年富有成效和成功。