V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
geew
V2EX  ›  React

react 号称可以服务端渲染 这个服务端一定要是 nodejs 写的么

  •  
  •   geew · 2015-09-28 17:41:47 +08:00 · 19329 次点击
    这是一个创建于 3342 天前的主题,其中的信息可能已经有所发展或是发生改变。
    找了好多资料 没看到别的后端实现的

    找到一个 https://facebook.github.io/react/blog/2013/08/19/use-react-and-jsx-in-python-applications.html
    有人用过吗 谈谈经验咯
    第 1 条附言  ·  2015-09-28 21:19:23 +08:00
    好吧 前几天用了一下 react 来写公司的一个小需求 然后发现 几个问题 想跟大家探讨一下 也有可能是我理解有点误差
    1. react 是分模块来写前端的 但它是在代码运行起来的时候才去渲染生成组件的吧 我的问题是 我的组件如果不是动态的 比如表单 我为什么要在页面加载好了再去渲染生成呢 我其实可以直接写在页面上 react 只管理相应的表单交互就行了 但我在使用的过程中是动态生成表单的 官方的那个 demo 也是这样的 所以感觉有点怪 可以不这么用的吧

    2. 看到了 react 支持服务端渲染 感觉很开心 但是我找了好多资料都没有找到类似的实现 有的都是 node 的后端实现 感觉很奇怪 然后我理解的后端渲染是不是后端直接生成 html 返回给前端 然后前端 react 负责识别对应的 html 进而绑定相应的事件交互呢 那样的话不是很奇怪吗 我要在 render 方法里面去请求一下服务端 然后。。。。。算了 其实这里没怎么弄懂 求指教

    3. 我想用 python 的后端 然后前端用 react js 进行各种交互的实现 这种搭配有人尝试过吗?
    35 条回复    2017-07-23 14:06:29 +08:00
    zythum
        1
    zythum  
       2015-09-28 17:50:35 +08:00
    有.net, php, rail, python 版本. https://github.com/reactjs
    geew
        2
    geew  
    OP
       2015-09-28 17:56:50 +08:00
    @zythum 额 这货只是 jsx 转 js 的么
    YuJianrong
        3
    YuJianrong  
       2015-09-28 18:21:29 +08:00
    @geew react 只是一段纯 JS ,只要能跑 JS 的环境都可以做渲染,现在什么环境跑一段 JS 都很简单啊……
    zythum
        4
    zythum  
       2015-09-28 18:31:12 +08:00
    @geew 有些用 server render 的部分。 php , rail 有
    sox
        5
    sox  
       2015-09-28 19:12:34 +08:00
    服务器端渲染也就只是把 component 的初始状态渲染一遍

    谁知道除了不用 /#/ 之类的 hash route 还有什么好处
    joyee
        6
    joyee  
       2015-09-28 20:28:28 +08:00
    @sox SEO
    zythum
        7
    zythum  
       2015-09-29 11:56:05 +08:00   ❤️ 1
    我看了你的 append 。

    1. 你的理解些许问题。你直接输出的 html 是没法和 react 的 js component 直接绑定的。应为 react 内部是 vdom 方式做对比然后改变页面的。你看见用 react 生成的 html 上面有很多的 id 没有。哪些都是用来定位和 js component 的关系的。你自己生成的肯定没有。所谓 server rendering ,就是在后端做这个事情。

    2. 因为前端是 js 。所以后端也用 js 的话这个 component 是可以重用的。不然就只能在 py 里面跑个 v8.然后 renderToString 把 html 搞出来然后再拼进模版里。

    3. 我没有用过 py 。但是按照 2 的思路应该是可以的。

    ps>> 其实问题在于为啥你一定要做 server rendering. seo 的话现在的爬虫大部分都有处理 js 的能力。真不行就专为 seo 做个页面让他爬。没必要这么折腾。
    YuJianrong
        8
    YuJianrong  
       2015-09-29 11:59:59 +08:00
    @zythum “现在的爬虫大部分都有处理 js 的能力”——求引用,这个倒是很感兴趣,不知道爬虫怎么做的(在虚拟机沙盒里跑 JS 然后超时就杀掉?)
    zythum
        9
    zythum  
       2015-09-29 12:09:02 +08:00
    @YuJianrong 现在那么多网站都是 angular 什么 mvvm 的。爬虫肯定去想方设法的抓取内容。 js 虚拟机也很很多了。自己用的话 casperjs, phantomjs 什么的都可以。只是慢一点,做批量什么的有些问题, google baidu 专门做搜索引擎的肯定有他们自己的解决方案。不能说全部能够爬到。但是爬到七七八八总是可以的。
    转帖一些内容吧:
    http://blog.sina.com.cn/s/blog_6b61ed4b0100lfu1.html
    http://www.pythontab.com/html/2014/pythonweb_0311/712.html
    joyee
        10
    joyee  
       2015-09-29 12:40:16 +08:00
    @zythum 不是爬虫能爬 JS 生成的内容(何况这个不是一定的),网站就都愿意放弃做这个 SEO 的,不同搜索引擎有不同的策略,而且策略会变,这种东西能优化一点是一点,而且谁知道是不是 JS 生成内容也会影响排名呢(较差的 accesibility )?何况很多大站直到今天都还会考虑用户禁用了 JS 情况下的问题,纯 JS 生成的页面会给出一片空白而不是简单的功能+提示。另外不是所有 screen reader 都能正确执行 JS 生成内容,大站 /有情怀的网站多少要考虑一下这个。

    就 Google 而言,他们确实会爬 JS 生成的内容,只不过未必所有网站都愿意冒这个风险。
    测试: http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157
    Google 的指南: https://developers.google.com/webmasters/ajax-crawling/docs/learn-more
    WildCat
        11
    WildCat  
       2015-09-29 12:46:15 +08:00 via iPhone   ❤️ 3
    @geew React 只是 view 层,如果要写出完整 app ,需要搭配 flux/redux/relay(graphql) ,如果时间紧迫,请慎重考虑。
    Server render 在大多数情况下都还是需要 JavaScript 运行时的,你可以把用 node.js 写的 server render 模块用 Python 调用。 但是据我了解,目前还没有这方面的 best practice. 大多数都是放弃了 SEO
    ysmood
        12
    ysmood  
       2015-09-29 12:51:28 +08:00
    其实我现在日常生活很少用到搜索引擎了,只有工作时的专业知识需要。如果以后人们不用通用搜索了,只用类似网站内部搜索, SEO 还有意义吗?
    zythum
        13
    zythum  
       2015-09-29 12:56:12 +08:00
    @joyee
    我不是说了么,真不行就专为 seo 做个页面让他爬。
    但是如果是个小东西,如 po 主说的小需求,那么没有必要专门做 seo ,爬虫会去想方设法的抓取内容。

    如果要专业做 seo ,那么还有很多要做的,链接评分加权什么的一堆一堆的东西呢。
    zythum
        14
    zythum  
       2015-09-29 13:04:07 +08:00
    @ysmood 还是用得到的。比如我问

    >> 叶良辰 是谁 <<<

    如果没有搜索引擎还是挺费劲的. 你去哪个网站的内部找呢。 233333333

    我跑题了。
    ysmood
        15
    ysmood  
       2015-09-29 13:55:42 +08:00
    @zythum 这种看上去就像某种热门人物的,上微博之类的 sns 上搜索下不行吗?
    ysmood
        16
    ysmood  
       2015-09-29 13:58:43 +08:00
    @zythum 再比如上知乎之类的,百度知道什么的,其实很多问题别人都问过了。即便是生活日常很多都被这些解决了,比如什么日子穿什么衣服,上去问问直接就有人问过了。
    zythum
        17
    zythum  
       2015-09-29 14:12:38 +08:00
    良辰,必重谢.
    joyee
        18
    joyee  
       2015-09-29 14:22:25 +08:00
    @ysmood 因为还会有新网站出现啊 0v0 而且不是所有网站都有(能用的)站内搜索(对 说的就是知乎……
    geew
        19
    geew  
    OP
       2015-09-29 14:26:54 +08:00
    @zythum
    @WildCat 哈哈 已感谢 顺便再问下 目前单页应用 交互比较多的那种 前端用什么框架实现比较好呢 主要是性能方面 以前一直用 backbone 现在打算用 react 试一下 别的还没用过
    joyee
        20
    joyee  
       2015-09-29 14:28:09 +08:00
    @zythum 我主要是觉得,你不能假设爬虫真的对你那么上心……人家是个黑盒子,还是有多种型号的黑盒子 2333
    geew
        21
    geew  
    OP
       2015-09-29 14:28:48 +08:00
    @joyee 求不歪楼 这里不是讨论爬虫的喂
    joyee
        22
    joyee  
       2015-09-29 14:30:10 +08:00
    @geew 掩面
    YuJianrong
        23
    YuJianrong  
       2015-09-29 14:33:42 +08:00
    @zythum 阁下转的文章完全没有说服力啊……

    @joyee 阁下两篇文章不错,不过 google 官方文档说自家的爬虫只抓静态文本, ajax 要抓自己转成文本;非官方文档不错分析了很多,但并没有说到用于分析的 js 的复杂程度。 Google 基于 dom 和简单的 JS 来自己转页面可以想象,但复杂如 angular 这样的 JS 就不一定还运行了吧,毕竟那个分析看起来使用的 case 都比较简单,说不定爬虫只是针对性优化,亦或爬虫配备的 JS 环境非常有限(递归层数限制或者循环量总长限制什么的),把宝压在这样的测试结果上感觉风险很大。
    WildCat
        24
    WildCat  
       2015-09-29 15:07:02 +08:00 via iPhone
    @geew 我的建议是:用你熟悉的。 React 学习成本略高。
    自己只是个学生,只用过 Angular 和 react 。
    React 的理念和社区反应不错,但是有人说性能可能不见得比其他的 virtual dom 好。因为不打算深究,所以就选个人气高的吧。
    zythum
        25
    zythum  
       2015-09-29 15:17:46 +08:00
    @YuJianrong
    @joyee

    朱一的意思是技术上是可行的。但是具体搜索引擎怎么做,是黑盒我们永远不知道。
    所以说了么。
    如果要做 seo ,最简单就专门给 seo 做个页面让他抓。毕竟 server rendering 要配合起来还是比较麻烦的。
    如果不做 seo ,搜索引擎也会抓到一些内容的,爬虫没有那么笨。毕竟做爬虫的都是专家。

    @geew
    喜欢啥用啥。 backbone 和 react 也能配合使用。
    geew
        26
    geew  
    OP
       2015-09-29 15:21:21 +08:00
    @WildCat 对于 react 怎么说呢 感觉它是要全局管理页面上的一切元素 包括元素的生成 以及各种交互等等 就是它要产生 html 的 因此只有在页面加载完毕之后它才能发挥作用 总会有一点的延迟吧 相对而言 backbone 个人感觉更好一些 毕竟 backbone 可以对页面上已经存在的 dom 进行管理 你只要写好对应的交互就行 所以 react 写 web 端的优势在哪 我倒是看不懂
    geew
        27
    geew  
    OP
       2015-09-29 15:24:13 +08:00
    @zythum 确实 混合灵活使用是不错的选择 react 毕竟更侧重于 view 的构建 可以拿来写页面的某些组件
    chloerei
        28
    chloerei  
       2015-09-29 15:26:09 +08:00
    前端阵营的特洛伊木马。
    WildCat
        29
    WildCat  
       2015-09-29 15:37:44 +08:00 via iPhone
    @geew 没有 template engine ,只有 component , UI 构建更加细化,写复杂界面更容易。
    现在还有一个重量级优势: React Native
    WildCat
        30
    WildCat  
       2015-09-29 15:41:53 +08:00 via iPhone
    @zythum 我觉得朱一大大说的专门做页面让爬虫爬是最好而且是最简单的方案( Server Render 自己实现起来真的不容易),但是之前在坛子里有人说这样算作弊。
    ysmood
        31
    ysmood  
       2015-09-29 15:54:32 +08:00
    @joyee 注意我说的是大部分,不是说全部。如果未来一个普通人一天 100 次搜索,只有 1 次需要用到传统的搜索引擎,那么我们是不是能说只需要投入 1%的精力去处理 SEO 呢?而且这 1%的搜索相较于站内搜索往往效率更低,搜索很容易包含更多垃圾信息。
    zythum
        32
    zythum  
       2015-09-29 15:59:52 +08:00   ❤️ 1
    @WildCat 如果你认为通过 useragent 判断是否是爬虫是作弊的话。你可以用<noscript>标签判断让禁用了脚本的用户和爬虫看到的一样,总不算作弊了吧。
    WildCat
        33
    WildCat  
       2015-09-29 16:05:09 +08:00
    @zythum 好的,谢谢。
    Paranoid
        34
    Paranoid  
       2015-09-29 16:54:42 +08:00   ❤️ 1
    ### react 要解决的是问题是高效的 DOM 操作!!!###

    所以
    1. 不一样需要 react 呀,看实际情况,如果这是一个联系我们的页面,用啥 逗逼 的 react ?
    2. 服务端你真的需要么???
    3. RestFul API + react 视图组件

    不过 react 多视图组件,官方是引入了 flux 。至于如果你又引入了其他的东西,学习曲线很高。

    现阶段玩玩就可以了,单页面可以考虑,如果整个项目用一个单页面入口(还要引路路由==), AngularJS (我还有数据绑定呢)放哪呢?
    itbdw
        35
    itbdw  
       2017-07-23 14:06:29 +08:00
    如果是为了解决 seo 问题,即百度、搜狗、360 全部对 js 支持基本为 0,可以试试针对爬虫提供服务器渲染,这样对正常业务没有任何影响,希望能帮助困惑在 JavaScript 生成的网站收录不佳的同行,https://github.com/itbdw/server-render-javascript
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3102 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 123ms · UTC 13:48 · PVG 21:48 · LAX 05:48 · JFK 08:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.