由于国内的搜索引擎对 js 的支持糟糕,那么是否可以这样,客户端请求的时候,将渲染之后的结果发送回服务端,保存为静态文件(根据比对内容决定是否更新),那么当下一次请求该页面的时候,直接返回已保存的静态文件即可。
( PS :我知道可以在服务端跑一些渲染程序,只是哪一个解决方案更好罢了)
1
int64ago 2017-02-03 11:54:54 +08:00
SSR
|
2
otakustay 2017-02-03 12:19:41 +08:00
1. 使用 react 等技术直接输出 HTML ,这无疑是最好的,即便有一定的服务器资源开销也非常小,因此可以不考虑缓存、静态化等事情,也就无需去做复杂的缓存过期策略等工作。代价是会被某些框架捆绑
2. 用 seojs 等做基于实际渲染的 HTML 输出,开销非常之高,如果可以正确识别出爬虫的话,考虑到爬虫的频率不高,可以不做缓存,事实上就爬虫这个频率,你缓存也没用基本等下次来爬也过期了 3. 你自己说的方法,前提是爬虫来之前有用户访问,但通常爬虫的速度比普通用户还要快 |
3
chairuosen 2017-02-03 12:29:27 +08:00
不信任任何客户端发来的东西,更何况 html
|
4
AlwaysBee OP @chairuosen 好不容易想到一个方案,突然又被你否决了,感谢
|
5
kamkam 2017-02-03 13:31:10 +08:00
国内的搜索引擎对 js 的支持糟糕?
|
6
grayon 2017-02-03 13:42:26 +08:00
HTTP 304
|
7
54sword 2017-02-03 14:02:36 +08:00
|
9
AlwaysBee OP |
10
wanghanlin 2017-02-03 14:21:08 +08:00
prerender.io 开源的
|
12
54sword 2017-02-03 14:23:09 +08:00
|
13
ijse 2017-02-03 14:26:37 +08:00
有一些在线平台可以做,比如 https://prerender.io/
|
14
AlwaysBee OP |
15
wanghanlin 2017-02-03 14:36:40 +08:00
@AlwaysBee 你是怎么试的?用的在线版还是自己部署的?
|
16
AlwaysBee OP @wanghanlin 在线版,有一个添加链接的表单,我加上去之后查看渲染结果是空白的
|
17
uzumaki 2017-02-03 14:41:48 +08:00 via Android
看携程
|
19
wanghanlin 2017-02-03 14:58:53 +08:00
@AlwaysBee laravel log 有没有报错?
|
20
wanghanlin 2017-02-03 15:15:24 +08:00
@AlwaysBee 可能跟你那图片 src 有问题有关系
``` 0|prerender | [Vue warn]: Error when rendering component <lazy-image>: 0|prerender | https://artizen.cc/dist/main.js:8 in Lr ``` |
21
AlwaysBee OP @wanghanlin 对,刚刚我在查原因也看到了
|