请教如何简单的渲染一个静态网页

网页就是极其简单的模板:

<html>
  <body>
    <p>
这是一个最简单的模板。
    </p>
  </body>
</html>

打算调用eww看看效果,结果倒没啥,就是突然看到emacs内存占用直接涨了几十兆,而且一直没下去,就用profiler在emacs -Q再次测试了一下,是两个函数set-window-buffer和set-window-configration造成的,不知道怎么优化,就换了个思路有没有别的简单方式来渲染这个网页,我并没有用eww上网的需求,谢谢各位指点

如果elisp能够实现就最好,支持超链接和基本标签就好,不习惯用org-link这个所以没考虑

Emacs 内置 shr 用于渲染 HTML,可以直接 shr-render-buffer

eww默认就是调用shr做渲染的吧,这个有性能问题,我已经用profiler跑过了,虽然影响不大,但是不确定会不会随着访问的html增加而不断增大内存占用

shr这个感觉可以外部进程渲染好以后,发结果给emacs呀

不是很明白,shr应该是纯elisp实现的,所以请问这个外部进程具体是什么呢,感谢指点

可以 HTML → pandoc → Markdown → Emacs markdown-mode (开启 markup-hidding, 当作预览).

首先非常感谢建议

不过你看我举的例子就是那种非常基础的html代码,感觉用这个流程有点杀鸡用牛刀了

我再去查资料看看有没有更简单的实现,只需要支持超链接就行

不会很复杂 (如果要的功能不是很麻烦的话), 几行代码的事:

;; 可以改成 after-save-hook 触发
(defun html-buffer-to-markdown-buffer (html-buffer markdown-buffer)
  "Turn HTML buffer to Markdown Buffer. "
  (let ((html-temp (make-temp-file "html-buffer"))
        (markdown-buffer (get-buffer-create markdown-buffer)))
    (with-current-buffer html-buffer
      (write-region (point-min) (point-max) html-temp))
    ;; 可以改成异步
    (shell-command (concat "pandoc -f html -t markdown "
                           html-temp)
                   markdown-buffer)
    (with-current-buffer markdown-buffer
      (markdown-view-mode))
    ;; 可以改成不跳转, 而是在另一个窗口显示
    (switch-to-buffer markdown-buffer)))
1 个赞

非常感谢,我先自己研究一下,还是希望以网页的方式来呈现

这是很正常的现象,本身刚启动新加载一个包多用 10MB 是很常见的,Emacs 的内存模型也决定了从系统请求内存后正常就不会还回去,没有优化的必要。

开个浏览器保底就 1GB,怎么用 Emacs 就 60MB 都出不起了?这连过早优化都算不上了。

1 个赞

我最后使用了emacs-w3m,诚如manateelazycat说的用外部命令渲染内存占用会比shr这种纯elisp实现低很多

另外我并没有使用主流浏览器,使用的是falkon,本着简单的需求就用简单的实现原则,所以才来论坛提问请教而已,非常感谢建议

Falkon 用的 QtWebengine,实际上就是 Chromium,根本不轻量

用 Netsurf 还差不多