扫码关注官方订阅号
用prerender的原理是什么?还有一些疑惑的问题,主页“/”加载过来原文件几乎是空的,这样爬虫什么都看不到,用phantomjs生成文件给爬虫,这个就有点困惑。比如“/”下一个请求get news,这样的内容爬虫可以看到么?还是说当爬虫来找“/”,在服务器作出对此的响应返回内容给他,这样不就跟重写一个网站差不多么?
业精于勤,荒于嬉;行成于思,毁于随。
简单说吧,prerender是在服务器端放置了一个JavaScript engine。
prerender
当服务器收到一个请求,譬如:http://www.suibianba.com/news,你的单页应用返回一个几乎为空的HTML给客户端,然后由浏览器再对/news部分做前端路由,把数据动态填到DOM里。
http://www.suibianba.com/news
/news
DOM
那如果该请求是爬虫发来的,返回空显然不合适,所以我们有了prerender服务,它拿到请求够,直接在服务端的一个js engine里,运行这个HTML(就像浏览器做的那样),直到内容动态填完之后,再广播一个事件告诉phantomjs“内容已经好了,可以返回给爬虫了”,这样爬虫就拿到了一份完整的HTML,就和在浏览器里渲染完的一样
phantomjs
貌似目前更先进的方法是用node.js做服务器端的js渲染,不仅是针对爬虫的SEO,全局都这样处理。简单地说,就是: "第一次访问服务端渲染,后面客户端渲染"。具体可看这篇文章:前后端分离的思考与实践(二)。不过这篇不是针对angular的方案,期待有高手做出angular的方案。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
简单说吧,
prerender是在服务器端放置了一个JavaScript engine。当服务器收到一个请求,譬如:
http://www.suibianba.com/news,你的单页应用返回一个几乎为空的HTML给客户端,然后由浏览器再对/news部分做前端路由,把数据动态填到DOM里。那如果该请求是爬虫发来的,返回空显然不合适,所以我们有了
prerender服务,它拿到请求够,直接在服务端的一个js engine里,运行这个HTML(就像浏览器做的那样),直到内容动态填完之后,再广播一个事件告诉phantomjs“内容已经好了,可以返回给爬虫了”,这样爬虫就拿到了一份完整的HTML,就和在浏览器里渲染完的一样貌似目前更先进的方法是用node.js做服务器端的js渲染,不仅是针对爬虫的SEO,全局都这样处理。
简单地说,就是: "第一次访问服务端渲染,后面客户端渲染"。具体可看这篇文章:前后端分离的思考与实践(二)。不过这篇不是针对angular的方案,期待有高手做出angular的方案。