是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?
Posted
技术标签:
【中文标题】是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?【英文标题】:Is it possible to server-side render Haskell frontend with Ghcjs, Haste, Elm, etc? 【发布时间】:2015-12-24 01:09:37 【问题描述】:我认为 Haskell 提供了很棒的功能。也适用于 Web 开发。但是,我错过了一个功能。服务器端渲染。 原因是谷歌索引爬虫和预渲染以提高移动设备的性能。
是否可以使用 Ghcjs、Haste、Elm 或其他一些 Haskell->JS 编译器在服务器端渲染 Haskell 前端?
【问题讨论】:
【参考方案1】:我不相信亚历山大已经回答了这个问题。
问题是 Haskell Web 框架是否执行 javascript 的服务器端渲染 - vanilla JS 或 JS-via-Haskell(GHCJS、Fay 等)。我的理解是 Yesod 不会预渲染 JS(即执行 JS 并提供生成的 html)。相反,Yesod 通过 hamlet(或 blaze-html,或 lucid,取决于您的偏好)在服务器端生成 HTML。
我能找到的用于 Haskell 服务器端 JS 渲染(用于 Angular)的唯一库是:
https://github.com/danchoi/ngrender
但它仍处于测试阶段。
如果还有其他库/解决方案,我很乐意了解它们。这对我来说也是一个问题。我想在客户端使用 purescript-halogen,但是... SEO。
编辑:目前,最好的选择可能是在 Haskell 服务器前使用 nginx 作为负载平衡器,使用 prerender.io 为搜索机器人提供渲染的 JS 页面:
https://github.com/prerender/prerender
https://gist.github.com/thoop/8165802
【讨论】:
【参考方案2】:Stock Yesod 脚手架对 HTML 进行服务器端渲染,并为 HTML、CSS 和 JS 提供自定义的预处理语言。考虑到 Fay/Purescript 已经存在了一段时间,并且 yesod 至少为其中一个提供了脚手架,您应该能够毫无问题地集成 Fay/Purescript。
对于诸如 GHCJS 集成之类的东西,您会看到在即将发布的 stack
工具(例如 this issue)版本中取得了很大进展。从理论上讲,这将使全栈 Haskell 可以轻松实现。现在,据我了解,集成 GHCJS 并非易事。
【讨论】:
以上是关于是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?的主要内容,如果未能解决你的问题,请参考以下文章
jest-haste-map: Haste 模块命名冲突 (AWS, RN)