技术实践第一期|友盟+开发者平台Node.js重构之路

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 因原有SDK版本升级配置文件较复杂,需要在java端通过多个文件查询整合得到前端界面勾选内容数据,且升级SDK均需要手动拉取oss文件到服务端本地缓存,导致维护成本较高,且时间悠久无相关产品及开发文档说明,因此在本次业务升级中重构改应用。

一、问题背景


该项目提供友盟+SDK下载、相关辅助工具、集成demo等相关功能。

因原有SDK版本升级配置文件较复杂,需要在java端通过多个文件查询整合得到前端界面勾选内容数据,且升级SDK均需要手动拉取oss文件到服务端本地缓存,导致维护成本较高,且时间悠久无相关产品及开发文档说明,因此在本次业务升级中重构改应用。

1.jpg

二、改造目标


  • 新版体验: SDK_开发者中心-友盟+
  • 满足升级功能迭代包括新增多端整合功能等,以及视觉全新体验。
  • java端迁移到node,直连oss简化配置文件,节约”人工智能“的升级维护成本。
  • 下载由后端转到oss直连下载, 大大提高下载效率。
  • SDK端各原文件统一格式为zip,文件存储与服务端分离,提高后续维护性。
  • 使用SSR服务端渲染,提高SEO优化。


三、下载方案

2.jpg

1. 原下载方案

由页面勾选,到后端进行文件的拷贝获取(原始文件已在后端缓存),创建对应目录,进行merge后压缩为最终zip文件,压缩完成后端直接流式返回zip。下载速度缓慢。且缓存的原始文件需每次手动拉取。

缺点:后端下载速度较慢。服务端存储过多过大文件的合理性。

2. 新下载方案

将原始文件在编译部署时从OSS拉取到服务端,且保持缓存文件路径层级与OSS一致。根据页面勾选,先查询OSS是否有缓存,若无缓存则在后端进行各个SDK压缩包的原始文件复制,复制到生成对应的各层级文件夹中,在各文件夹内解压、merge、整合后形成最终文件夹,将最终文件夹压缩为zip后上传到OSS,得到OSS分享链接直接下载。


四、技术选型对比


1. 缓存原始文件方式对比

原始SDK存储在OSS且统一zip格式,全部原始文件压缩包大约1.5G。根据页面操作拉取整合各SDK到一个文件中。

  • 不推荐!直连OSS拉取对应SDK。

OSS提供将读取文件夹及内容api,可将该文件夹内递归全部文件为二维列表,若要实现需把需要的原始各个zip解压在读取内容,解压后原始文件比zip格式大了约3倍,明显降低整体速度。

  • 推荐!每次应用部署时,在app.js中拉取OSS原始文件到服务端缓存,当缓存完成后则在缓存复制,当无缓存时则oss拉取兜底。


2. 文件夹压缩/解压zip工具对比

因原始文件中有软链接,在merge中需要注意!

2.1、 zlib 模块

  • 优势:
  1. 可对数据进行压缩和解压处理,减小数据体积,加快传输速度。
  2. 对文件进行压缩/解压。
  • 缺点:不可压缩/解压缩文件夹。


// 如HTTP请求头部设置 Accept-Encoding: gzip,deflate // 压缩/解压缩文件 let lib = require('zlib') let gzip = zlib.createGzip() let rs = fs.createReadStream('./a.js') let ws = fs.createWriteStream('./a.js.gz') rs.pipe(gzip).pipe(ws)


2.2、 node-stream-zip

  • 优势:zip文件压缩/解压库,使用方便,可操作文件/文件夹。
  • 缺点:不识别解压后文件中的软链接,导致软链接打不开错误。

// 解压zip文件 const StreamZip = require('node-stream-zip'); const zip = new StreamZip.async({ file: './common.zip' }); await zip.extract(null, './'); await zip.close();


2.3、 compressing

  • 优点:可同步/异步压缩或解压文件/文件夹,相关文档简单清晰。
  • 缺点:不识别解压后文件中的软链接,导致软链接打不开错误。


2.4、 adm-zip

  • 优势:
  1. 将 zip 文件直接解压缩到磁盘或内存缓冲区中。
  2. 压缩文件并将它们以 .zip 格式或压缩缓冲区存储到磁盘。
  3. 从现有 .zip 更新/添加新文件/删除文件的内容。
  • 缺点:只能针对当前zip包进行操作整理,或者将文件逐一复制出来。但实际业务需求根据页面勾选将多个SDK压缩包解压生成新的对应目录层级后整合为一个压缩包。


2.5、 archive

  • 缺点:较长时间未更新,且解压后内部文件有软链会重复生成真实文件。


五、关于SSR服务端渲染

为更好优化SEO,项目改造采用react ssr服务端渲染,框架结构 Node + Um-Egg + React + AndD + yk-cli。

适用于偏静态的页面展示应用。


5.1 SSR过程实现

3.jpg


5.2 initProps与state注意点

  • 页面首屏渲染只会渲染Component.initProps数据。
  • 在state定义的数据首屏不会渲染,而在前端组件中渲染。


5.3 SSR优势

  • 有利于SEO

浏览器爬虫不会等待页面异步数据全部加载完成后再去抓取页面信息。而服务端渲染返回到前端页面是获取全部首屏数据并生成html,即访问路由时获取。

  • 有利于首屏渲染

通过路由请求node中html全部内容,减少加载js文件过程耗时,提高用户访问页面时间。


5.4 SSR缺点

  • 服务端压力增大

原本是客户端渲染,现改为node层处理生成html,当并发量较大时占用服务端资源也更大。

  • 维护成本相对变大

如上文5.2.中介绍,

要格外注意首屏数据处理以及项目引用第三方库处理数据情况!


【文章作者:友盟+技术团队】


⭐️开发者中心重构将友盟SDK统一输出,包含APP端、网页端、小程序/小游戏、H5各端,以及相关SDK下载和自动集成方式


重构前后下载效率提升数倍,使得用户体验感迅速提升。同时友盟+也会更加重视相关文档的输出,从功能描述到技术实现以及用户体验等等维度,更好地帮助用户快速准确地解决问题。



相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
10月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
6月前
|
JavaScript 前端开发 IDE
TypeScript vs. JavaScript:技术对比与核心差异解析
TypeScript 作为 JavaScript 的超集,通过静态类型系统、编译时错误检测和强大的工具链支持,显著提升代码质量与可维护性,尤其适用于中大型项目和团队协作。相较之下,JavaScript 更灵活,适合快速原型开发。本文从类型系统、错误检测、工具支持等多维度对比两者差异,并提供技术选型建议,助力开发者合理选择。
1225 1
|
6月前
|
监控 JavaScript 前端开发
JavaScript加密与解密技术:Hook技术应用案例分析
以上案例展示了如何利用JavaScript Hook技术结合强大且广泛采纳标准化算法(如AES),无缝地集成进Web应用程序以增强通信安全性。此种方法不仅能够确保敏感信息得到有效保护,并且由于它们操作适度透明、无需重构已存在代码基础架构而具备较高实际可行性及易操作性。
290 11
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
513 1
|
10月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
258 4
|
11月前
|
前端开发 JavaScript Java
【Java进阶】JavaScript电灯开关实例:从理论到实践
这个例子展示了JavaScript的基本功能,包括操作HTML元素,监听事件,以及改变元素的样式。通过学习和理解这个例子,你可以了解到JavaScript在网页中的应用,以及如何使用JavaScript来创建交互式的网页。
212 13
|
10月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
581 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
存储 JavaScript 前端开发
基于 JavaScript/VuePress 搭建的远程工作平台:YuanCheng.works
为了提高团队的协作效率和信息共享能力,许多公司开始探索基于现代技术的远程工作平台。本文将介绍如何利用 JavaScript 和 VuePress 搭建一个高效的远程工作平台,助力团队在灵活的工作环境中实现卓越的协作。
249 56
|
监控 网络协议 算法
基于问题“如何监控局域网内的电脑”——Node.js 的 ARP 扫描算法实现局域网内计算机监控的技术探究
在网络管理与安全领域,监控局域网内计算机至关重要。本文探讨基于Node.js的ARP扫描算法,通过获取IP和MAC地址实现有效监控。使用`arp`库安装(`npm install arp`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
512 8

热门文章

最新文章