【问题标题】:Is it possible to server-side render Haskell frontend with Ghcjs, Haste, Elm, etc?是否可以使用 Ghcjs、Haste、Elm 等在服务器端渲染 Haskell 前端?
【发布时间】:2015-12-24 01:09:37
【问题描述】:

我认为 Haskell 提供了很棒的功能。也适用于 Web 开发。但是,我错过了一个功能。服务器端渲染。 原因是谷歌索引爬虫和预渲染以提高移动设备的性能。

是否可以使用 Ghcjs、Haste、Elm 或其他一些 Haskell->JS 编译器在服务器端渲染 Haskell 前端?

【问题讨论】:

    标签: haskell elm web-frontend ghcjs haste


    【解决方案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 并非易事。

      【讨论】: