作者: 森罗
转发链接:
前言
作为前端工程师,更高的性能和更流畅的体验是长期追求的目标。 作为大促的中心,会场页面的表现直接影响亿万消费者的点餐体验。 上一篇文章《浅谈618大促背后的淘宝前端技术体系》,那么去年的淘宝618我们是如何让消费者放心地在各个场所购物、选购的呢?
本文将简单介绍一下去年的618,我们是如何通过缓存优化、请求优化等解决方案应对性能挑战,以及如何通过监控和测试来保证大规模会场页面的性能。
变化与挑战
今年618大促,在终端渲染解决方案方面,淘宝营销团队与终端架构团队深度合作马拉松网站源码,首次在场内大规模落地PHA(Progressive Hybrid App)解决方案,并使用了主会场的网络解决方案。 这一变化给页面的资源加载和执行时间带来了挑战。 在商业玩法方面,今年的场馆增加了内容和本地化。 短视频和明星直播在H5页面同层播放,这对页面的视频内存使用提出了一定的要求。
说到挑战,首先,大促期间新用户、低端手机、弱网等占比明显下降,带来了较大的降级长尾影响。 其次,天猫、淘宝的员工在618期间创建了大量场地页面。 如何在大规模体量下保持高性能水位,也对支撑业务的测量监控解决方案提出了一定的要求。
节目解读
在性能优化实施过程中,我们根据会场页面后端时序,将会场的性能优化分为资源加载、数据请求、模块渲染等环节(如下图所示)。
目前场馆使用的渲染方案是页面、模块、数据分离的异步方案。 从资源请求来看,可以分为三部分:一是HTML文档(不同页面之间相同),二是基础JS包括rax、loader、render等(不同页面之间相同)马拉松网站源码,第三个是页面使用的各个UI模块的JS+CSS资源(各个页面不同)。 数据请求统一由页面渲染发起,在数据段层组装返回当前页面不同模块的商品列表、店铺信息等数据。
结合上述变化和挑战以及线上实际演出情况,今年618场馆的演出保障方案主要可以概括为上图中的三个环节。 下面简单介绍一下各个环节的策略和实施。
资源请求优化页面预缓存
在手机天猫、天猫等应用中,我们利用设备提供的静态资源缓存方案,将HTML、基础JS等资源推送到客户端。 当客户端的webview请求资源时,端侧可以根据域名匹配下发的缓存包,匹配成功后直接从本地缓存中读取对应的HTML和JS资源,无需每次都请求网络,大大减少了页面初始化时间。 比如主会场的html加载时间在推送缓存后平均可以减少70+%,命中率可以达到97%。
模块资源缓存
模块JS+CSS资源,因为不同的页面使用不同的模块(例如女装会场、主场会场),总共有上百个模块,所以不可能提前缓存全量。 这里我们采用获取流量顶部页面的方式,只缓存和下发与首屏相关的核心模块,更好的减少了模块请求的时长。
模块按需加载
除了刚才提到的模块缓存分配之外,今年的618会场还采用了“按需加载模块”的优化方式,尽量减少当前页面的模块数量,这对于JS资源请求和数据请求在第一时间很有用屏幕。 某些削减。 实现方案上,首先读取数据网段层服务器缓存的目标投放条件,判断当前访问的URL参数和客户端信息是否满足模块的显示条件(例如搜索盒子模块只在手机淘宝里面才显示)。 如果不满足条件,则直接从页面中删除该模块。 例如,在外部浏览器中打开618酷数字会场时,页面加载的JS资源大小可以减少40+%。
数据请求优化
为了向消费者推荐最贴心、最好的东西,现在的各大促销场所都使用来自数百人、数千张面孔的更加个性化的算法推荐数据。 但推荐带来的算法时间减少,使得数据请求成为当前场馆表现的最长板。 如果当前场地的数据请求时长也能增加,那么首屏时间也会大幅减少。
因此,在去年的618会场,我们落地了一套基于在线实时埋点的请求优化方案,通过更精简的首屏模块数量,实现了首屏界面时长的直接优化。
规划中通过采样上报获取模块高度,结合设备信息、页面模块排序、个性化数据等条件,个性化控制每次访问加载的首屏模块数量。 例如,小明参观数字会场时只需要加载5个模块,而小强只需要加载4个模块。 以在线RT场景为例,对于单个会场,该方案可平均减少首屏时长100+ms。
监控检查
此次618采用了两套巡检机制来保证场馆的性能。 第一组是模块级检查。 通过与H5自动化测试平台等对接,批量对所有大促模块进行性能实测,发现部分模块参考图片未压缩、资源域名未融合等问题。
第二组是页面级检查。 师弟完成场地页面的配置后,手动批量批量检查了全部618个场地,导致页面加载、数据请求、模块渲染等相关性能问题。 可以在上线前发现并修补。
表现监测方面,与双十一整体保持一致。 今年,618采用了一套接近FMP的性能指标,以自定义采集和报告的形式,联动后端监控平台,实现分钟级的性能仪表板,帮助我们更快地发现线上性能问题,并有针对性地做出调整。
降级策略
同层播放组件的引入对会场页面的内存使用提出了更高的要求,特别是对于低端电脑和老系统。 针对这一问题,今年的618大会统一接入客户端提供的降级平台,可以直接根据机型、系统版本、客户端版本等条件动态实施降级策略。 例如可以设置手机淘宝版本≤9.5.0+iOS版本≤10时不播放商品短视频。
今年618会场,整体在线稳定性良好,没有出现因会场显存占用率低而导致客户端崩溃的情况。
总体回顾
绩效优化,工作在平常,成功在大提升。 在去年的618大促中,通过上述的优化方案和保障手段,最终达到了预期的体验目标。
但在这个过程中,我也发现了一些可以进一步探索的性能优化点。 比如可以结合终端智能等客户端能力,帮助大促主会场提前完成页面数据、预加载依赖资源,甚至预渲染页面。 我们会在之前的大促销中不断迭代优化,为消费者提供更好的购物体验,而不是最好的。
总结
618,这场持续20多天的年中大促,对于亿万消费者来说是一场狂欢盛宴,但对于所有默默支持这场大促的工程师来说,它更像是一场极客马拉松,充满了痛苦和喜悦。
推荐JavaScript学习相关文章
《利用Canvas实现一款“带源码”的在线授权游戏》
《基于Canvas的高斯模糊(上)《JS篇》》
《基于Canvas的高斯模糊(下)《JS篇》》
《由浅入深,66个JavaScript笔试知识点(一)》
《由浅入深,66个JavaScript笔试知识点(二)》
《由浅入深,66个JavaScript笔试知识点(三)》
《由浅入深,66个JavaScript笔试知识点(4)》
《由浅入深,66个JavaScript笔试知识点(5)》
《由浅入深,66个JavaScript笔试知识点(6)》
《由浅入深,66个JavaScript笔试知识点(7)》
“为什么setTimeout的延迟最小为4ms?”
如何处理 Node.js 中未捕获的异常? ”
《Angular v10.0.0 正式发布,不再支持 IE9/10》
《基于Docker的SSR持续开发与集成环境实践》
《谈谈图文Webpack指南》
《一篇文章带你吃透NPM《进阶篇》知识点》
《详谈webpack性能优化》
JS实现的各种日期操作方法总结
《实践》总结浅谈后端性能优化
《在浏览器中实践》画中画(Picture-in-Picture)模式及其API》
《多图》文章带你彻底了解Web Workers(上)
《多图》文章带你彻底了解Web Workers(中)》
《深入聊后端下载总结“干货”》
《西瓜播放器功能分析(上)《实践》》
《西瓜播放器功能分析(下)《实践》》
《浅谈50道JavaScript基础面试题“附答案”》
《Webpack4主流程源码讲解及简单webpack的动手实现(上)》
《Webpack4主流程源码讲解及简单webpack的动手实现(第2部分)》
《详谈后端架构师的愿景》
《先讲应用场景再讲聚焦与节流《进阶篇》》
《前端埋点统一接入解决方案实践》
《浅谈微内核架构在后端的应用“干货”》
《一个高性能的树组件实现方案“干货”》
“攻击 JAMStack”
《前端全部用JS开发是怎样的体验(Hybrid + Egg.js经验分享)》
《全前端开发、前端用JS开发是怎样的体验(Hybrid + Egg.js经验分享)》
《前端全部用JS开发是怎样的体验(Hybrid + Egg.js经验分享)》
《一篇文章带你了解babel-plugin-import插件(上)《源码解析》》
《本文带你了解babel-plugin-import插件(下)《源码分析》》
《JavaScript常用API合集汇总《值得收藏》》
《推荐10个常用图片处理帮手(上)《值得收藏》》
《推荐10个常用图片处理帮手(下)《值得收藏》》
JavaScript 中 ES6 代理的实际用例
《12种实用后端开发方法总结》
《一篇文章带你了解如何搭建企业级npm私有仓库》
《教你如何利用内联框架元素IFrames的沙箱属性来增强安全性?》 ”
《详解前端开发UI公共组件的新理解“实践”》
《详解DOM API中append和appendChild的三个区别》
《精品淘宝的小鳄鱼谈后端新人如何成为王者的“干货”》
《一篇文章带你彻底解决后台跟踪弹出滚动问题的“干货”》
《推荐5款常用的代码对比工具“值得收藏”》
《Node.js实现文字与图片结合的方法》
《爱奇艺云编辑网页版技术实现》
“我从来不敢说我会写后端Button组件‘练习’”
《NodeX组件——滴滴集团Node.js生态组件体系“实践”》
节点缓冲区完整手册
《推荐18个精美的webpack插件“干货”》
《前端开发需要了解7种常用的JavaScript设计模式》
《浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务》
《伟大的Webpack HMR学习手册(第1部分)《包含源码讲解》》
《伟大的Webpack HMR学习手册(第二部分)《包含源码讲解》》
《打开我新世界之门的 10 个 WebAPI(第 1 部分)“实践”》
《10个WebAPI(中)打开我新世界之门的实践》
“打开我新世界之门的 10 个 WebAPI(第 2 部分)“实践””
《图解》ESLint在中小型团队中的应用实践
“Deno 是一个代码浏览器,你同意吗?”
“除了localStorage之外,前端存储还有什么?” ”
《Javascript多线程编程的前世今生》
《微前端解决方案乾坤(实践与总结)》
“图文”V8垃圾回收原来这么简单? ”
《Webpack 5 模块联盟引发微后端革命?》
《基于Web的人脸识别身份验证实践》
《《高级前端》10万条数据高性能渲染(时间切片)》
《《前端进阶》10万条数据高性能渲染(虚拟列表)》
《图解承诺履行原理(一):基本履行》
《图解Promise实现原理(二):Promise链式调用》
《图解Promise实现原理(三):Promise原型实现》
《图解Promise实现原理(四):Promise静态实现》
《实践教你从头开始构建后端Lint工作流程“干货”》
《高性能多级多选级联组件开发“JS”》
“用简单的术语解释 Node.js CLI 工具的最佳实践”
延迟加载图片提高网站性能的五种方法“实践”
《比较JavaScript对象的四种形式《练习》》
《使用 Service Worker 让你的 Web 应用变得更加强大(第 1 部分)《干货》》
《使用 Service Worker 让你的 Web 应用变得更加强大(中)《干货》》
《使用 Service Worker 让你的 Web 应用变得更加强大(第 2 部分)《干货》》
《前端如何一次性处理10万条数据《进阶篇》》
《推荐三个常规可视化工具《JS篇》》
“如何让用户选择是否离开当前页面?” 《JS篇》
“JavaScript 开发人员更喜欢 Deno 的五个原因”
“仅用 18 行 JavaScript 实现倒计时器”
《JavaScript运行机制详解》
《一个轻量级的JavaScript全文搜索库,轻松实现站内离线搜索》
《推荐15款Web程序员常用的源代码编辑器》
《10个“值得收藏”的实用JS方法》
《详解269个JavaScript小函数,让你免于通宵加班(一)《值得收藏》
《详解269个JavaScript小函数,让你免于通宵加班(二)《值得收藏》
《品味269个JavaScript小函数,让你免于通宵加班(三)《值得收藏》
《详解269个JavaScript小函数,让你免于通宵加班(四)《值得收藏》
《详解269个JavaScript小函数,让你免于通宵加班(5)《值得收藏》
《详解269个JavaScript小函数,让你免于通宵加班(6)《值得收藏》
《深入JavaScript教你如何防止内存泄漏》
《教你 7 个有趣的 JavaScript 项目——论“用源码”》
《手把手教你 7 个有趣的 JavaScript 项目 - 第 2 部分》附源码”
“JavaScript 使用 mediaDevices API 访问相机自拍”
《教你如何报后端代码“JS”错误》
《一篇文章让你彻底了解联通后端与Web前端的区别》
《63个JavaScript常规礼包“值得收藏”》
提高 JavaScript 技能的 10 个测验问题
JavaScript 图表库的 5 个最佳选择
《一篇文章彻底理解JavaScript中Object.freeze和Object.seal的用法》
《Visual JS:动态图演示——事件循环流程》
《教你如何利用动态规划和贪心算法实现后端瀑布流布局“实践”》
《Visual js:动态图演示Promises & Async/Await的流程》
“你知道如何在原生JS封装中拖动和验证滑块吗?” “实践””
《如何实现高性能在线PDF预览》
《字库加密数据详细使用——仿58同城》
“Node.js 结束了吗?”
“Pug 3.0.0即将发布,不再支持Node.js 6/8”
《纯JS手写轮播图(代码逻辑清晰,简单易懂)》
《JavaScript 20年中文版本制定标准》
《60多个值得收藏的常用后端工具“JS文章”》
箭头函数和常规函数的 5 个区别
“通过发布/订阅设计模式了解 Node.js 核心模块事件”
《《前端文章》不再担心正则化》
《速围》Node.js V14.3.0 发布,支持一流的 Await 和 REPL 增强功能”
《深入浏览器原理“流程图”》
“JavaScript已进入第三时代,未来将走向何方?” ”
《前端上传前预览文件图片、文本、json、视频、音频“练习”》
《深入理解EventLoop与浏览器渲染、帧动画、空闲弹跳的关系》
《推荐13个“值得收藏”的好用JavaScript链表方法》
《前端必备知识:window.location详解》
“停止依赖 CommonJS”
《Rhino 书作者:你应该忘记的 JavaScript 功能》
《作品中常用的36个JavaScript函数片段“值得收藏”》
《Node+H5实现大文件碎片上传及断点续传》
《一篇文章看懂文件上传全流程(深度解析1.8w字)《进阶前端必备》》
《【实践总结】关于小程序打破束缚,实现批量上传》
《教你如何在后台上传各类文件,并持续上传大文件》
《字节跳动面试官:请实现大文件上传和断点续传》
《谈谈前端关于文件上传和下载的事[练习]》
《手把手教你编写一个后端图片压缩、方向校正、预览、上传插件》
《最全的JavaScript模块化方案和工具》
《前端进阶》JS中的内存管理》
《JavaScript正则深入及10个特别有趣的正则实战》
《一个经常被前端面试官忽视的 JavaScript 面试问题》
《一行JS代码实现简单的模板字符串替换《练习》》
《JS代码是如何压缩的《前端中级进阶》》
《前端开发规范:命名规范、html规范、css规范、js规范》
《【规范】前端团队代码规范最佳实践》
《原生JavaScript代码片段100个知识点详解【实践】》
《后端174个JavaScript知识点总结(一)》
《后端174个JavaScript知识点总结(二)》
《后端174个JavaScript知识点总结(三)》
《几个特别有趣的javascript知识点总结[实践]》
“都2020年了,你还不知道JavaScript装饰器吗?”
《JavaScript实现图片合成下载》
《JavaScript 70 个知识点详解(上)【练习】》
《JavaScript 70个知识点详解(下)[练习]》
《开源JavaScript版敏感词过滤库》
《送你 43 道 JavaScript 面试题》
“3个伟大的冷门JavaScript库,你值得拥有”
《教你深度巩固JavaScript知识体系【思维导图】》
推荐7个很棒的JavaScript产品分步指南库
《Echa哥教你彻底理解JavaScript执行机制》
《一名合格的高级后端工程师需要掌握的28项JavaScript技能》
《深入解析高频项目中使用的知识点总结【JS篇】》
《JavaScript工具函数百科[新]》
“从 JavaScript 来看设计模式(摘要)”
《身份证号码的正则表达式和验证解释(JavaScript、Regex)》
“在浏览器中实现 JavaScript 计时器的 4 种创新方法”
《Three.js动效解决方案》
《教你59种常用JS方法》
《127个常用JS代码片段,每段代码需要30秒才能理解——【第1部分】》
《深入讲解js深拷贝vs浅拷贝》
《教你如何用JS开发H5游戏【消除星星】》
《深入浅出讲解JS中this/apply/call/bind的巧妙用法【实践】》
《教你全面剖析JS中this的真谛【实践】》
“书用了,仇恨就少了,一大波JS开发工具功能就来了”
《干货满满!如何高贵简单地实现时钟翻转(支持JS/Vue/React)》
《教你JS异步编程的六种解决方案【实践】》
《让你减少加班的15个高效JS方法知识点总结[实践]》
《教你如何用JS开发H5游戏【黄金矿工】》
《教你JS监听浏览器上下左右滚动》
JS经典实例知识点总结【实践】
《26000字JS干货分享,带你感受后端的魅力【基础篇】》
《26000字JS干货分享,带你感受后端魅力【实践】》
《简单几步,让你的JS写得更漂亮》
“恭喜您获得治疗JS本病的详细处方”
《谈谈前端关于文件上传和下载的事[练习]》
《教你避免面试中关于 JavaScript 作用域的 5 个陷阱》
《Jquery插件(常用插件库)》
《[JS]如何避免重复发送ajax请求》
《JavaScript+Canvas实现自定义画板》
《Continuation在JS“前端”中的应用》
作者: 森罗
转发链接:
列表下方有分页功能
1.7 产品详情
点击上一页产品图片或产品名称,进入产品详情页面
该页面会显示商品标题、价格、颜色、尺码、库存等具体信息,页面底部会显示商品详细信息
点击左侧产品分类按钮,将进入对应类别的产品列表页面
1.8 用户登录
点击右上角【登录】按钮,进入用户登录页面
输入正确的用户名和密码,点击【立即登录】按钮登录
如果您还没有账户,可以点击【未注册,请先注册】按钮进行注册
1.9 用户注册
填写用户名和密码,以及收件人、电话和地址,点击【立即注册】按钮提交注册信息
如果您已有账户,可以点击【注册直接登录】按钮进入登录页面
1.10 用户注销
登录成功后,右上角会显示当前登录用户名
连接鼠标至个人中心,点击【退出】按钮退出
1.11 购物车
在任意页面点击【加入购物车】按钮,对应的商品就会被添加到购物车中
出现【加入成功】提示后,右下购物车中的商品数量将会更新
点击右上角【我的购物车】按钮,进入购物车列表页面
页面显示商品图片、商品信息、单价、数量、单品小计及所有商品单价
购物车列表中可以减少商品数量、减少、删除等。
点击下方【提交订单】按钮,购物车中的所有商品都会提交并保存为订单
1.12 提交订单
选择购物车中的商品后,您可以点击【去结账】进入订单确认页面
此页面需要确认收货地址。 默认会显示个人信息中的电话号码和地址,并且可以更改订单详细信息。
选择对应的支付方式进行支付
支付成功后,会弹出支付成功提示,点击确定,进入列表页面
1.13 我的订单
连接鼠标到【个人中心】,点击下方动态出现的【我的订单】,即可查看所有订单列表
包括单笔订单的订单号、订单时间、总价、详情、当前状态
1.14 送货地址
连接鼠标到【个人中心】,点击下方动态出现的【收获信息】
在【收获信息】中可以更改姓名、电话号码和地址,点击【保存】按钮保存
下次提交订单时心愿说网站源码,收货信息中会显示新的收获信息
1.15 修改密码
将鼠标连接到【个人中心】心愿说网站源码,点击下方动态出现的【更改密码】
在【更改密码】中可以更改登录密码,点击【保存】按钮保存
点击保存后会提示密码修改成功
2 后台管理界面 2.1 后台登录
在网站首页点击导航栏两侧【后台登录】即可进入登录页面
填写正确的用户名和密码后,点击【登录后台】按钮提交登录请求
登录成功后,进入欢迎界面
2.2 订单管理
点击导航栏【订单管理】进入订单列表
您可以通过单个订单后面的操作按钮来更改该订单的状态,如【已发货】【已完成】
2.3 品类管理
点击导航栏【分类管理】,进入分类列表
在列表中可以对类别进行【修改】和【删除】操作
输入上方类别名称,点击【添加类别】按钮即可添加新类别
2.4 商品管理
点击导航栏【产品管理】进入产品列表
页面显示ID、图片、名称、简介、规格、价格、类别、库存、销量、操作
在列表中,您可以对产品进行【修改】和【删除】操作
列表上方的选项卡可以切换显示明天的推荐和所有产品列表
可以操作列表后面的【添加明天推荐】和【取消明天推荐】操作按钮
点击列表中的产品图片或产品名称,可查看产品详情页面
点击列表顶部的【添加产品】按钮,进入添加产品页面
底部有分页功能
2.5 用户管理
点击导航栏【用户管理】进入用户列表
列表中可通过后部操作按钮【修改】【删除】用户信息
点击【重置密码】即可重置用户密码
2.6 管理员
点击导航栏【管理员】进入管理员列表,默认admin用户不允许操作
列表中可通过后部操作按钮【修改】【删除】用户信息
点击【重置密码】即可重置用户密码
2.7 退出
点击导航栏【退出】,注销当前用户并跳转至登录页面
3 源码下载
点击下载农家商城系统源码
发表评论