当文档一打开就卡死时该怎么办?

你有没有这样的场景,当你不小心写了一个非常占用资源的SQL查询或者当你复制了某位大神写的死循环的代码,这时你的文档突然卡死,CPU也飙到100%。

但,不幸的时,由于思源会记住上次打开的文档,这时,哪怕你强制关闭思源,那么再次重启思源,这个文档依然会被首先打开,思源依然会卡死。

当出现这种情况该怎么办呢?

请看下文。

准备工具:

思源vscode插件,浏览器

操作步骤:

第一步,任务管理器强制退出思源,但不要退出内核

image

注意: 正常情况下,你退出SiYuan进程,随后SiYuan-Kernel进程也会退出了,但卡死情况不会。

第二步,打开思源工作空间,随便复制个文档id,但不要是出问题的文档

第三步,打开浏览器输入http://127.0.0.1/?id=刚才你复制的文档id,这时就打开了你指定id的文档了,不会打开原来的文档了

第四步,在目录找到刚才出问题的文档,然后右键插件->集成编辑环境->markdown->在新标签中打开,然后修改有问题的代码即可。

image

注意,第四步找到文档后,千万不要打开,打开后又会被卡死了。

这第四步也可以在文档树目录中右键文档,然后查看历史,在历史中恢复上一个版本即可。

更进一步

鉴于你可能不知道文档具体在哪个文件夹中,建议你先安装下面这个js代码片段,然后就可以通过全局搜索来查找文档,注意,查找后千万不要点击文档,一旦打开就又卡死了,你只需要向下翻滚即可,找到想要的文档后,使用中键点击,即可在文档树中定位该文档了。

但这个查询很可能是精确匹配,在搜索预览时卡死,如果确定会精确匹配的,也可以用query挂件用SQL查询。

js代码片段如下

// 搜索列表,鼠标中键在文档树中定位文档
(()=>{
    document.addEventListener('mousedown', async function(event) {
        // 检查是否按下了鼠标中键
        const isModifierKeyPressed = event.button === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey;
        if (isModifierKeyPressed) {
            const item = event.target.closest('[data-type="search-item"]');
            if(!item) return;
            const docId = item?.dataset?.rootId;
            if(!docId) return;
            const docInfo = await requestApi('/api/filetree/getDoc', {id: docId});
            if(!docInfo?.data?.path || !docInfo?.data?.box) return;
            (siyuan?.mobile?.docks?.file||siyuan?.mobile?.files||siyuan.layout.leftDock.data.file).selectItem(docInfo.data.box, docInfo.data.path);
            const closeBtn = item.closest('.b3-dialog__container')?.querySelector('.b3-dialog__close');
            if(!closeBtn) return;
            closeBtn.dispatchEvent(new MouseEvent('click', { bubbles: true }));
        }
    },true);
  
    async function requestApi(url, data, method = 'POST') {
        return await (await fetch(url, {method: method, body: JSON.stringify(data||{})})).json();
    }
})();

代码备份地址

https://gitee.com/wish163/mysoft/blob/main/%E6%80%9D%E6%BA%90/%E6%90%9C%E7%B4%A2%E5%88%97%E8%A1%A8%E9%BC%A0%E6%A0%87%E4%B8%AD%E9%94%AE%E5%9C%A8%E6%96%87%E6%A1%A3%E6%A0%91%E4%B8%AD%E5%AE%9A%E4%BD%8D%E6%96%87%E6%A1%A3.js

开发者方法

如果你是开发者,还可以在数据库里搜索相关的块信息,然后查到相关的文档id,根据文档id的sy文件进行清除(不推荐,我没试过,理论上应该可以)。

image.png

留下你的脚步
推荐阅读