当前位置: 首页 > 后端技术 > Node.js

基于puppeteer的高性能SPASEO解决方案

时间:2023-04-03 15:48:13 Node.js

这是什么?这是一个基于puppeteer的高性能SSR解决方案。它使用HeadlessChrome将网页生成html,然后通过http返回html内容。它解决了什么问题?许多公司和开发人员使用JavaScript框架(包括AngularJS、BackboneJS、ReactJS、VueJS)来开发应用程序和网站。但是很多搜索引擎、社交媒体、爬虫不支持爬取JavaScript页面,所以无法做网站SEO。通过UserAgent判断,如果来自爬虫,那么通过nginx(tomcat,Apache)等反向代理到这个服务,就可以将渲染后的html网页内容传递给搜索引擎,从而间接实现SEO,从而间接实现SEO,这样一来,既能保持纯前端的起步思路,又能省去SSR带来的服务器负担。也可以用在爬虫中,生成网页截图,生成网页PDF场景githubhttps://github.com/zuoyanart/sparender使用gitclonecdsparernpminpmstart查看效果http://127.0.0.1:3001/render?url=http://www.example.comfunctionpuppeteerconnectionpoolrenderconcurrencylimitlog4jlog已经集成任务调度生产,开发环境配置redis缓存自动源,如果来自移动端会自动设置请求UA和视点(使用iphoneX的环境参数)性能对比服务器:12核16G并发:10运行时间:60S项目配置:不使用缓存、块图片、字体、多媒体等请求地址:http://xxxx/render?url=https://www.baidu.com单次渲染并发QPSprerender2054ms5.05(已经有错误)sparer476ms17.47渲染对比内容摘自https://markdowner.net/articl...,并根据我自己的经验做了一些修改。SPA的CSR客户端渲染的优缺点(更好的用户体验)*SEO不友好(如果爬虫没有执行js的能力,比如百度,获取的页面是空的,不利于网站推广)首屏加载慢(到达浏览器后加载数据,增加用户等待时间SSR服务器渲染SEO友好,首屏渲染快(页面可以缓存在服务器上,请求可以直接发html)代码改动大,需要做具体的SSR框架改动(经过我们的实践,原来的SPA代码改动非常大)丢失部分SPA体验节点很可能成为服务端动态渲染的性能瓶颈(使用user-agent)兼顾SPA优势,解决SEO问题需要服务端应用(但动态渲染只针对爬虫,不会成为性能瓶颈)动态服务端渲染(使用user-agent)使用SPA技术提升用户体验,以及SSR、预渲染等技术用于搜索引擎优化。技术方案存在一定差距,无法兼顾优势。但仔细想想,需要这些技术优势的用户其实是实时不同的。SPA针对的是普通浏览器用户,SSR针对的是网络爬虫,比如googlebot、baiduspider等,那为什么不能给不同的用户不同的页面呢?,服务端动态渲染就是这样的解决方案。基本原理:服务器端判断请求的user-agent,浏览器端直接发送SPA页面。如果是爬虫,则给出动态渲染的html页面(因为爬虫不会造成DDOS,所以这种方案相比SSR可以节省很多服务器资源)PS:你可能会问,如果给不同的页面给爬虫,会不会被认定为网页作弊?谷歌回应:动态渲染不是伪装Googlebot一般不会将动态渲染视为伪装。只要您的动态呈现生成相似的内容,Googlebot就不会将动态呈现视为隐藏真实内容。设置动态呈现时,您的站点可能会生成错误页面。Googlebot不会将这些错误页面视为隐藏真实内容,而是将错误视为任何其他错误页面。使用动态渲染为用户和爬虫提供完全不同的内容可以被认为是伪装。例如,一个网站对于用户来说是关于猫的页面,对于爬虫来说是关于狗的页面都可以被认为是伪装。也就是说,如果我们不是故意作弊,而是使用动态渲染的方案来解决SEO问题,爬虫对比网站的内容并没有明显的区别。别以为是骗人的。至于百度,请参考豆丁是不是在做黑帽SEO?从user-agent来看,将Baiduspider导向http页面的基本解释是:的确,从单一特征来看,会很难区分伪装型垃圾邮件和豆丁型搜索优化,但搜索引擎永远不会只用一个维度的A特征来判断垃圾邮件。像docin这样的网站,依靠其外部链接关系、Alexa流量、用户在搜索结果中的点击行为等诸多信号,就足以使其免受垃圾邮件的侵害。更重要的是,一般的垃圾邮件必须具有许多特征,例如关键字堆叠、不一致的文本语义、链接农场等。总之,antispam是一个综合算法,会参考很多元素,最后给出判断。如果真的失败了,白名单也可以作为最后的手段来弥补。保存这些大型网站是没有问题的。