万能的 v 友啊,求一个不同语言开发的 web 混合渲染方案(首屏渲染用的不是基于 node 的服务端渲染,但是增量渲染使用 spa)要怎么做。

142 天前
 PungentSauce

就比如 flarum ,这个 laravel(php) 的开发的论坛,我发现他的首屏是有一些 html 标签的,但是增量渲染全是靠接口和 js ,这个项目运行的时候也没有启动 node 。是如何做到的。问了下 ai 基本都是说用了一个类似 vue 的库,但是页面属性绑定,页面切换应该没这么简单就处理好吧。有做过不同语言混合渲染的同学可以分享一下吗。 在不引入 node 做 ssr 的情况下。

3204 次点击
所在节点    程序员
69 条回复
PungentSauce
142 天前
@kingofzihua 差不多,但是项目不是 php 的。所以想要个通用跨语言的方案。
daj2
142 天前
简单点就从用首屏的 webserver 也去 serve spa 的静态文件,可能需要额外实现类似 nginx 的 try_files 逻辑; spa 那边跳转到首屏不走 history ,直接 location 跳转就好了
kingofzihua
142 天前
@PungentSauce #41 项目是什么不重要吧?重要的是你怎么规划项目,本质来说就是内置一个 js 引擎,然后让他做首轮的服务端渲染,剩下的页面操作交给你客户端的 js 去做,只要保证同步和隔离就行了, 你 nodejs 服务端渲染不也是一样的道理吗?只不过 nodejs 本身就是 js 代码,并且可以服用逻辑,所以现在 node 做 ssr 是主流。
gaooo
142 天前
@PungentSauce vue 的 ssr 是最佳方案,缺点是 vue 团队只提供了 node 的 ssr api ,如果后端是其它语言,可以用 node 服务做 ssr 视图层,业务 api (非 node 语言)单独一个服务,或者自己封装一个 ssr api ,视图、api 就可以都在一个服务内。
shakaraka
142 天前
ssg 的话意味着你的首屏不会是最新的,只会是打包时的结果。

另外看起来你的目的是为了减少一个后端服务而已,这么可以说,如果你还需要使用前端框架:r 、v 、a 的话,就目前基本没有类似的,除非你用非 node 的 runtime 实现一个类似的,但是你也只能兼容其中某个框架而已,而且你还不一定能够做的比现有的 ssr 框架完善。
kingofzihua
142 天前
PungentSauce
142 天前
@wunonglin 对,限制就限制减少了一个专门基于主流的 ssr 服务,node 只有参与编译阶段,需要融合在 golang 里面。
PungentSauce
142 天前
@kingofzihua 好的 ,我再参考下 discourse 和 flarum
kingofzihua
142 天前
samnya
142 天前
@PungentSauce
我再思考了一下,觉得你说的这个是可以实现的。
这个其实就是下面这种通过 CDN 引入的方式,在你 php 返回的 html 一个页面里面引入 vue 的 js 。
https://cn.vuejs.org/guide/quick-start#using-vue-from-cdn

但问题其实是,因为没有官方 SSR ,所以必须要为前端项目和 php 渲染的 html 分别编写两套代码了。前端的 vue router 需要引入纯 vue 的组件,后端要出 html 模板是不太通用的。
reallycool
142 天前
十几年前 facebook 的 bigpipe ,你确定要学了用吗
PungentSauce
142 天前
@kingofzihua 之前看到一些前端的文档有提到 水合 ,😂 ,一直都没 get 水合具体干的事,还要研究研究。
PungentSauce
142 天前
@reallycool 😂还是用一些比较新的方案,或者就采用 discourse 和 flarum 类似的方案改造。
PungentSauce
142 天前
@samnya 这个方案也有考虑过,可以解决单页面交互,页面之间还是独立的。
PungentSauce
142 天前
@kingofzihua 这个分析工具看着不错。
longnight
142 天前
inertia: https://github.com/inertiajs/inertia 后端可以用多种语言的主流框架 前端可以随意搭配.
如果不追求客户端导航的话 unpoly: https://github.com/unpoly/unpoly 也不错 .
zzzyyysss
142 天前
inertiajs 如楼上
zzzyyysss
141 天前
不过这个方案得前后端一起改造,如果新项目可以尝试。
zzzyyysss
141 天前
@zzzyyysss #58 不过 inertiajs 的实现方式是 路由这些继续还是后端,包括鉴权。后端会根据请求的头信息选择返回完整的 html 或者 json 响应。体验还是很棒的。
accelerator1
141 天前
在 mvvm 框架出现之前,基本都是前后端不分离的,后端直接通过模板渲染返回完整页面,大家都是写原生 js 操作的,增量更新方式无非 ajax/pjax ,前者就是调用接口然后更新页面元素,后者直接请求 view 进行区域替换。
至于你说的现代 mvvm 框架与传统模板渲染结合的方式,我目前的认知是不行的,涉及水合问题,一般都是要由 mvvm 框架提供服务端渲染能力。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1150266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX