vue SSR

1 篇文章 0 订阅
定义

服务端渲染,指的是把vue组件在服务器端渲染为组装好的HTML字符串,然后将它们直接发送到浏览器,最后需要将这些静态标记"激活"为客户端上完全可交互的应用程序。

优点
  • 更好的SEO,搜索引擎爬虫可以抓取渲染好的页面
  • 更快的内容到达时间(首屏加载更快),因为服务端只需要返回渲染好的HTML,这部分代码量很小的,所以用户体验更好。
缺点
  • 首先就是开发成本比较高,比如某些声明周期钩子函数(如beforeCreate、created)能同时运行在服务端和客户端,因此第三方库要做特殊处理,才能在服务器渲染应用程序中运行。
  • 由于服务端渲染要用Nodejs做中间层,所以部署项目时,需要处于Node.js server运行环境。在高流量环境下,还要做好服务器负载和缓存策略
解释
  • 基本用法
var vue=require('vue');
const app=new vue({
	template:'<div>app</div>'
})
const render=require('vue-server-renderer').createRenderer();
render.renderToString(app).then(html=>{
	console.log(html)
}).catch(err=>{
	console.log(err)
})
  • 服务端集成
var Vue=require('vue');
var server=require('express')();
var renderer=require('vue-server-renderer').createRenderer();
server.get('*',(req,res)=>{
	const app=new Vue({
		data:{
			url:req.url
		},
		template:'<div>您访问的{{url}}</div>'
	})
	renderer.renderToString(app).then((html)=>{
		
		res.end(`
			<!DOCTYPE html>
			<html>
				<head>
					<meta charset="UTF-8">
					<title></title>
				</head>
				<body>
					${html}
				</body>
			</html>

		`)
	}).catch(err=>{
		if(err){
			res.status(500).end('server error');
			return;
		}
	})
})
server.listen(3000)
  • 引入html文件
  • server.js
var Vue=require('vue');
var app=new Vue({
	template:'<div>hello world</div>'
})
var render=require('vue-server-renderer').createRenderer({
	template:require('fs').readFileSync('./index.template.html','utf-8')
})
var context={
	title:'hello',
	meta:`
		<meta charset="UTF-8">
	`,
	css:`
		<link rel="stylesheet" href="css/swiper.min.css" />
	`,
	javascripts:`
		<script type="text/javascript" src="js/ast.js" ></script>
	`
}
render.renderToString(app,context).then(html=>{
	console.log(html)
}).catch(err=>{
	console.log(err)
})
  • index.template.html
<!DOCTYPE html>
<html>
	<head>
		{{{meta}}}
		<title>{{title}}</title>
		{{{css}}}
	</head>
	<body>
		<!--vue-ssr-outlet-->
	</body>
	{{{javascripts}}}
</html>
原理解析

https://github.com/niuyueyang/vueSSR

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值