当前位置: 首页 > wzjs >正文

青岛网站关键词推广优化seo哪家好

青岛网站关键词推广,优化seo哪家好,可以做网站的软件上传歌曲,设计素材网站有哪些免费小白最快学会的前端灰度方案 首次访问效果如下,点击立即更新会访问灰度版本。本地cookie存在version字段后,后续访问都是指定版本代码,也不会出现弹窗提示 一、引言:为什么需要灰度发布? 1.1 血泪教训:全量…

小白最快学会的前端灰度方案

首次访问效果如下,点击立即更新会访问灰度版本。本地cookie存在version字段后,后续访问都是指定版本代码,也不会出现弹窗提示

一、引言:为什么需要灰度发布?

1.1 血泪教训:全量发布的风险

因为一次上线,导致登录异常,用户无法使用。复盘时候,测试反馈预发环境不能完全模拟出生成环境。要不做一个灰度发布,实现代码最小化影响。

1.2 技术思考:面试的需要

多了解点技术方案,总没有坏事

二、前端灰度方案

  • 在网上搜索前端灰度方案,整体看来就目前这个比较简单,上手快,易实现
  • nginx + 服务端 + 前端 js(可以考虑封装成一个通用工具 js)
大致思路
> 前端通过获取版本规则,服务端计算规则
> 命中规则,重新访问页面,nginx 通过版本信息,返回指定版本
> 未命中规则,继续访问当前稳定版本页面

ps: 额外探讨,如果希望服务端接口也能有灰度版本,是不是只需要通过 nginx 配置就能实现?

【顺便吆喝一句,技术大厂跳板,前后端测试捞人,待遇还可以,感兴趣的兄弟一试。】

三、实现细节

1. 版本规则接口

这个规则是可以自己定制的;这里我简单以 userId 进行匹配

  • 案例服务端框架:koa2 + mongoose
/*** 获取当前用户的版本* @param {*} ctx*/
exports.getVersion = async (ctx) => {try {const version = ctx.cookies.get("version");const userId = ctx.query.userId;// 这里直接写死,也可以放到redis里,做成可以动态配置也行const inTestList = ["68075c202bbd354b0fcb7a4c"];const data = inTestList.includes(userId) ? "gray" : "stable";if (version) {return ctx.success({version: data,cache: true,},"缓存");} else {ctx.cookies.set("version", data, { maxAge: 1000 * 60 * 60 * 24 * 7 });return ctx.success({version: data,cache: false,},"重新计算");}} catch (error) {ctx.fail("获取页面记录失败");console.error("获取页面记录失败:", error);}
};
  • userId 匹配那块,可以引入 redis 做缓存处理,避免直接查询用户表进行比对
2. 前端触发获取版本
  1. 交互方式,目前我能想到
  2. 第一种,接口请求完,才开始渲染页面,自动执行指定版本
  3. 第二种,接口请求、页面渲染同步进行,指定版本由用户触发
// 我把请求版本放到入口首页界面里
// 首次需要登录之后才会执行
onMounted(() => {const userInfo = store.getters["login/getUserInfo"];getVesion({ userId: userInfo.id }).then((res) => {if (!res.cache && res.version === "gray") {// 这里我增加一个弹窗提示,让用户选择ElMessageBox.confirm("存在新的灰度版本,是否要体验最新版本?", "新版本", {confirmButtonText: "立即更新",cancelButtonText: "不更新",type: "warning",}).then(() => {window.location.reload();});}});// 页面其他初始化逻辑
});
前端打包控制
  1. 项目里使用的是 vite 打包工具
  2. 通过增加两个配置,两者区别在于输入输出不同。当然如果嫌维护两个配置麻烦,可以把公共相同配置抽离出来或者通过环境变量区分维护一个配置
  3. 新增一个入口 html 文件,并修改打包输出名称
# vite.gray.config.js// 修改打包输出名称方便部署
const renameHtmlPlugin = () => {return {name: 'html-transform',enforce: 'post',generateBundle(options, bundle) {bundle['gray.html'].fileName = 'index.html'}}
}
export default defineConfig({// ... 其他配置plugins: [vue(), renameHtmlPlugin()],build: {outDir: 'gray',rollupOptions: {input: {main: resolve(__dirname, 'gray.html')}}}// ...
})
  • 命令行部分
  "build": "vite build","build:gray": "vite build --config vite.gray.config.js",
  • 最终打包出来目录
// 灰度版本
-gray -assests -index.html -// 稳定版本dist -assests -index.html;
3. nginx 配置

这里我尝试很久,最终以下配置可以实现

通过 cookie 中版本标识,返回不同版本内容

http {map $http_cookie $target_dir {# 精确匹配version值,避免捕获额外内容"~*version=gray(;|$)"   "/gray";"~*version=stable(;|$)" "/stable";default                 "/stable";}server {...已存在...location / {root html$target_dir;try_files $uri $uri/ /index.html;}...已存在...}
}

四、总结

自此一个简单前端灰度效果就实现了。当然这里还有许多的场景没有考虑到,欢迎大家提问探讨。案例代码:gitee.com/banmaxiaoba… 

——转载自:东坡白菜

http://www.dtcms.com/wzjs/478274.html

相关文章:

  • 小型网站建设价格低抖音关键词排名软件
  • 网站的优化公司谷歌浏览器直接打开
  • 棋牌软件开发定制软件seo和sem的区别是什么
  • 给企业做网站赚钱吗手机做网页的软件
  • 360提示危险的网站百度账户登录
  • 宁波做网站的大公司排名免费网站申请注册
  • wordpress 二级页面菜单 404网站如何做seo推广
  • seo发布专员招聘seo技术软件
  • 有产品做推广 选哪个 网站seo外包公司排名
  • 在线做简单的网站吗深圳宝安seo外包
  • 连云港做网站公司哪家好网络营销案例实例
  • 给人做时时彩网站建设犯法新手怎样做网络推广
  • 网站制作费用开什么发票网站优化关键词
  • 网站后期维护费用怎样版费怎样优化网站排名靠前
  • 镇江建设银行网站长沙网络推广只选智投未来
  • 长沙网站建设qq交流群郑州网站关键词优化公司哪家好
  • 重庆博达建设集团网站网推app怎么推广
  • 怎么做公司内部网站网络营销案例分析论文
  • 自己怎样做免费网站广州seo优化外包公司
  • 建设网站的基本工作流程抚州seo排名
  • 网站开发人员配置搜索seo
  • web应用开发框架seo外包公司报价
  • 网络营销与直播专业学什么百度优化排名软件
  • 南宁做网站推广的公司海东地区谷歌seo网络优化
  • dlink nas建设网站百度导航下载2022最新版
  • 可以做英文单词puzzle的网站江苏网络推广公司
  • 枣强做百度网站女教师网课入06654侵录屏
  • 西安建设厅网站首页免费的黄冈网站有哪些
  • 微网站难做么网店培训机构
  • 如何修改网站关键词快速排名不限行业