代码之家  ›  专栏  ›  技术社区  ›  maxhb

后端页面复制速度非常慢

  •  0
  • maxhb  · 技术社区  · 4 年前

    我有一个大型的TYPO3 8.7.39安装,大约2500页,30种不同的语言。

    当我尝试在后端复制一个页面(作为登录页面模板)时,在本地计算机上完成操作大约需要5分钟。该页面包含130个内容元素(包括自写扩展和文本网格元素),这些元素引用了多个图像。

    当我记录在复制操作期间执行的所有数据库查询时,我得到了大约8000个查询。由于每5分钟8000 db的操作减少到每0.04秒1 db的操作,因此复制页面所需的时间似乎是合理的。

    我的问题是:有什么办法可以加快页面复制速度吗?也许至少可以通过cli或调度程序任务复制页面,这将是一个解决方案。

    系统信息:

    • 类型3 8.7.39
    • 运行Ubuntu 18.04
    • 数据库结构是最新的
    • #第2500页,#num_languages=30,#num_fe_users~80
    0 回复  |  直到 4 年前
        1
  •  0
  •   maxhb    4 年前

    我可以通过创建一个命令控制器来解决这个问题,该控制器使用数据处理程序将源页面复制到目标页面。

    /**
     * @param int $src
     * @param int $target
     */
    public function copyCommand(int $src, int $target): void
    {
        /** @var PageRepository $pageRepository */
        $pageRepository = GeneralUtility::makeInstance(PageRepository::class);
        $srcPage = $pageRepository->getPage($src);
    
        if (empty($srcPage)) {
            throw new InvalidArgument("$src ist not a valid page uid");
        }
    
        if (empty($pageRepository->getPage($target))) {
            throw new InvalidArgument("$target ist not a valid page uid");
        }
    
    
        $cmd = [
            'pages' => [
                $src => [
                    'copy' => [
                        'action' => 'paste',
                        'target' => $target,
                        'update' => [
                            'title' => sprintf("Copy of #%d: %s", $src, $srcPage['title']),
                            'hidden' => 1,
                        ]
                    ]
                ]
            ]
        ];
        /** @var DataHandler $dataHandler */
        $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
    
        $dataHandler->start([], $cmd);
        $dataHandler->process_cmdmap();
    
    }