【发布时间】:2017-09-20 05:19:41
【问题描述】:
我的公司使用 SilverStripe v3.1.21 以及 Subsite 模块来显示和管理许多销售产品的客户网站。这导致近 200 个子站点和数万页数。这些网站的加载速度非常慢,Google 的 PageSpeed 等工具告诉我们页面速度很差。我们已经完成了合并和最小化 JS 以及压缩图像等资源的步骤,这带来了一些改进,但是页面仍然很慢。系统在这种状态下交给了我们,进一步的硬件升级不是一个选项,也没有获得额外的资源进行重新开发。
我们查看了静态发布模块 (https://github.com/silverstripe/silverstripe-staticpublisher),发现当我们生成静态页面时,页面会变得很快并且在各种工具上都获得了不错的分数,但是重新生成所有这些页面的过程需要超过 14 小时,这是不可接受的,因为这些产品每天都从外部来源更新。我们还发现,重新生成过程是一个内存占用,因为模块在转储到文件之前在内存中构建所有页面,导致进程崩溃。我们不得不更改流程以逐个子站点运行以使其运行。
然后我们查看了静态发布队列模块 (https://github.com/silverstripe/silverstripe-staticpublishqueue),它似乎解决了我们的问题,方法是让它根据需要对页面进行排队以进行重新生成,使其对更改的响应更加灵敏。但是,该模块似乎有很多错误,并且在生成页面时经常崩溃。
有没有人在大型网站上使用过这些模块(或类似模块),并且可以提供有关如何成功实施静态发布的任何指示或想法?
【问题讨论】:
-
添加部分缓存也可能会加快静态发布者的速度,因为它不必一直计算所有内容。见docs.silverstripe.org/en/3/developer_guides/performance/…
-
部分缓存可能有帮助也可能没有帮助,主要取决于瓶颈是什么。我们主要在导航生成性能方面遇到了麻烦。如果导航需要 HTML 中的
active/path等类,则部分缓存没有多大帮助,因为它需要为每个页面重新生成。 -
@koodimyyra 当然,但你可以例如缓存一个不活动的子树,所以它可能会有所帮助
-
@wmk true,如果您需要显示不活动的子树
标签: silverstripe