mate8
1
网页就是极其简单的模板:
<html>
<body>
<p>
这是一个最简单的模板。
</p>
</body>
</html>
打算调用eww看看效果,结果倒没啥,就是突然看到emacs内存占用直接涨了几十兆,而且一直没下去,就用profiler在emacs -Q再次测试了一下,是两个函数set-window-buffer和set-window-configration造成的,不知道怎么优化,就换了个思路有没有别的简单方式来渲染这个网页,我并没有用eww上网的需求,谢谢各位指点
如果elisp能够实现就最好,支持超链接和基本标签就好,不习惯用org-link这个所以没考虑
ginqi7
2
Emacs 内置 shr 用于渲染 HTML,可以直接 shr-render-buffer
mate8
3
eww默认就是调用shr做渲染的吧,这个有性能问题,我已经用profiler跑过了,虽然影响不大,但是不确定会不会随着访问的html增加而不断增大内存占用
shr这个感觉可以外部进程渲染好以后,发结果给emacs呀
mate8
5
不是很明白,shr应该是纯elisp实现的,所以请问这个外部进程具体是什么呢,感谢指点
可以 HTML → pandoc → Markdown → Emacs markdown-mode (开启 markup-hidding, 当作预览).
mate8
7
首先非常感谢建议
不过你看我举的例子就是那种非常基础的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 个赞
mate8
9
非常感谢,我先自己研究一下,还是希望以网页的方式来呈现
LdBeth
10
这是很正常的现象,本身刚启动新加载一个包多用 10MB 是很常见的,Emacs 的内存模型也决定了从系统请求内存后正常就不会还回去,没有优化的必要。
开个浏览器保底就 1GB,怎么用 Emacs 就 60MB 都出不起了?这连过早优化都算不上了。
1 个赞
mate8
11
我最后使用了emacs-w3m,诚如manateelazycat说的用外部命令渲染内存占用会比shr这种纯elisp实现低很多
另外我并没有使用主流浏览器,使用的是falkon,本着简单的需求就用简单的实现原则,所以才来论坛提问请教而已,非常感谢建议
LdBeth
12
Falkon 用的 QtWebengine,实际上就是 Chromium,根本不轻量
用 Netsurf 还差不多