咨询企业网站模板数据分析师课程

news/2025/9/23 18:07:13/文章来源:
咨询企业网站模板,数据分析师课程,北京中关村在线官网,wordpress 微信 抓取前言—在 web 开发场景#xff0c;减少代码体积虽然是性能优化的一个方向#xff0c;还没到锱铢必较的程度。但是在小程序场景#xff0c;由于代码包上传阶段限制了主包 2M 和总包 16M#xff08;近期微信官方正在内测将总包上限调整至 20M #xff09;的尺寸#xff0c;… 前言—在 web 开发场景减少代码体积虽然是性能优化的一个方向还没到锱铢必较的程度。但是在小程序场景由于代码包上传阶段限制了主包 2M 和总包 16M近期微信官方正在内测将总包上限调整至 20M 的尺寸超过就会面临无法发版的风险代码包体积的优化就变得特别重要了。京喜小程序首页作为微信购物的大入口承载大量流量功能复杂模块众多又要与其他核心业务和公共组件共享 2M 的主包空间因此代码包瘦身的工作在持续不断进行否则无法满足业务的快速增长。本文将结合以往优化策略与最近一次的瘦身实践分享小程序代码瘦身的经验与思考。常见的瘦身方式—京喜首页项目是一个优化良好的项目对于常见的优化措施已经有过很好的实践就让我们我们先回顾一下有哪些常见的优化策略吧代码分包将相对独立的页面和组件拆分到分包可以解决主包体积受限问题依赖分析移除未引用的页面、组件和其他文件避免使用本地资源除了兜底图片其他都尽可能使用 url 的方式由于 base64 图本质上是将信息编码成长字符串也会占用很多空间不建议使用对所有类型的文件都进行压缩并清理注释包括了js、wxml、wxss、json此外京喜首页团队还针对 Taro 开发场景进行了如下优化分析出编译后每个文件的高频重复代码如处理兼容性的 pollyfill 代码拆分生成公共文件替换原引用以实现共用。标准和工具—在开始正式介绍瘦身实践之前我们先来明确一下代码包体积的衡量标准和统计方式吧。小程序上传代码以代码包尺寸为准所谓 2M 的限制就是指该尺寸不能超过 2048KB。从信息传输角度来说Gzip 等压缩工具可以进行很多信息化编码优化因此一些内容重复是可以容忍的但是由于我们的目标是为了解决小程序上传限制就只有对代码包尺寸锱铢必较了。在开发者工具-详情-基本信息-上次预览或上次上传可以查看到最近一次的代码包体积本文接下来所介绍的优化都是以缩小这个体积为目的。查看代码包尺寸但是代码上传生成模板速度很慢如果每次都要根据这里的数据来统计体积变化效率太低了。在未改动项目配置的情况下我们就可以间接以代码目录的文件体积大小作为变化参照。怎么方便的统计文件体积呢这里我用了tree-cli[1]利用它提供的参数可以输出具备尺寸统计和排序功能的代码文件清单npm install -g tree-cli // 目标目录 cd target-directory // 输出文件为 size-analysis.md tree -s --sortsize -o size-analysis.md 清单内容格式如下. ├── [ 1000] index.js ├── [ 500] index.wxss ├── [ 500] index.wxml ├── [ 500] index.json ├── [ 4000] components │   ├── [ 4000] child │   │   ├── [ 1000] index.js │   │   ├── [ 1000] index.wxml │   │   ├── [ 1000] index.wxss └── └── └── [ 1000] index.json6500 bytes used in 2 directories, 8 files 瘦身实践—前面说到京喜首页优化措施都做的很好了下面即将分享的是一些不那么常见的优化方式优化空间有大有小想要优化小程序代码包建议先尽量完成前文提到的优化方案这样获得的收益最明显然后再来看接下来提到的这些方式吧~一、字体和颜色的全局共用小程序文档内关于继承样式的说明为继承样式如font,color, 会从组件外继承到组件内。分析项目现状我们通常会把字体定义放在公共 css 文件内随着页面或组件引入公共 cssfont 也将被重复引入可以通过改造把 font 的定义仅放在 app.wxss 内取消组件和页面的引入可以达到减少整体代码包体积的目的。关于这一项首页项目体积减少 1%预估整个项目还有 20kb 左右的 font 定义可清理。如果有全局的颜色定义也可以进行类似的优化。二、样式补全功能的使用作为 web 开发者对 -webkit- 这种前缀一定不陌生为了适配不同浏览器内核通常我们会在编译阶段使用 autoprefixer 进行样式的自动补全。而小程序开发者工具也提供了样式补全的能力详情-本地设置-可以勾选「上传代码时样式自动补全」这个补全和我们在编译时做的有什么不同吗关键在于它实现的时机如果是本地模板上传前那么应该和我们编译的补全效果一样如果是在上传模板后也许可以借此减掉补全内容所占的尺寸。结合小程序代码包传递过程和样式补全时机大概有以下 3 种情况阶段一补全阶段一阶段二阶段二或者是阶段三阶段三为了验证猜想来做一个实验吧比较「 项目编译不补全样式开发者工具设置样式补全」 vs「 项目编译补全样式开发者工具不设置样式补全」模板体积统计如下开发者工具提供样式补全编译提供样式补全可见前者比后者少了 58kb这说明开发者工具提供的样式补全不是在阶段一做的不然模板体积应该和我们自己做的编译补全基本一致。那么就可以愉快的去掉编译补全使用小程序开发者工具提供的能力了。不过这样改动会出现一个小问题开发者工具内的样式是未经补全处理的个别样式会有点问题测试就发现 mask-border-source 无效而相应真机因为已添加样式补全没有问题。为了不出现预览误会建议给这种尚未支持的样式手动写上 -webkit- 前缀保证开发和真机表现一致。三、小心 Sass!sass/less 等工具使得 css 的编写变得更加流畅函数和变量的引入也让 css 有了一点工程化的意味。但是你有没有观察过 sass 的编译实现呢// a.scss作为被引用方 .banner { // 样式定义color: red; } $COLOR red // 变量定义函数定义类似// b.scss作为使用方 import a.scss; .banner_wrapper {background: white;color:$COLOR; } 关注 b.sass 的编译后// a.scss的引用消失了内容被整合到文件内.banner { // a.scss内的样式定义会被拷贝进来color: red; } .banner_wrapper {background: white;color:red; //变量定义会被按值替换 } 这里出现的问题是我们是否需要.banner被拷贝进来呢为了避免多引入不需要的样式定义有以下几个方向按功能拆分 a.scss 内的样式定义按需引入。使用 include 语法将 banner 的定义变成一个变量按需引入。而在小程序场景wxss 语法支持 import实现了极弱版的模块化使得我们可以再加一个角度解决上面的问题绕过 sass 编译使用小程序的 import 语法引入需要的样式定义。关于如何绕开 sass 编译可以考虑使用注释片段或者白名单筛选识别四、多端场景的冗余代码移除京喜首页项目使用 Taro 开发需要适配 H5/微信小程序/QQ 小程序等多端场景利用 Taro 提供的环境变量能力可以在方法内部实现多端差异处理比如下面这段init(){if(process.env.TARO_ENV weapp{// 微信小程序逻辑this.initWeapp()}else if(process.env.TARO_ENV h5){// H5页面逻辑this.initH5()} } initWeapp(){...} initH5(){...} 小程序端打包后代码init(){this.initWeapp() } initWeapp(){...} initH5(){...} 但是环境变量方式没办法处理 initH5 这种方法定义导致也被打包进来了。因此我们需要更强大的差异打包京喜首页利用内部的 wxa-cli 工具提供的条件编译能力通过注释段落标记圈注出多端内容实现了代码片段层面的差异打包细节如下init(){if(process.env.TARO_ENV weapp{// 微信小程序逻辑this.initWeapp()}else if(process.env.TARO_ENV h5){// H5页面逻辑this.initH5()} } initWeapp(){...} /* wxa if:typeh5 */ 标记h5端代码开始位置 initH5(){...} /* /wxa */ 标记注释结束位置 打包后代码init(){ // weapp内this.initWeapp() } initWeapp(){...} initH5 消失了代码更瘦了五、整理 log为了调试方便你的项目内有没有打很长的 log类似于这种console.log(xx接口异常) 经过测试首页代码文件内有 5KB 的内容是 log 语句可以试着优化一下及时移除开发调试用 log信息类 log 约定长度更短的格式六、良好的编码策略有没有同样的逻辑需求可以用更短更优雅的写法来实现呢关于代码分析是个很复杂的话题暂时列一个结论相对明确的写法吧格式化数据时数据的存取和中间变量问题function format(list){let result []list.forEach(item {const {a,b,c: f,d,e,} itemresult.push({a,b,f,d,e,})})return result 可以利用 lodash 的 pick 方法改写成import { pick } from lodash/pickfunction format(list){return list.map(item({...pick(item,a,b,d,e),f:item.c})) 七、样式命名编译优化京喜首页项目由于 H5 端混搭老项目为了避免类名冲突采用了形如block-name__element--modifier的 bem 命名规则。在开发中进一步发现一些类似 navbar-content__item 的常见命名偶尔撞车为了避免冲突类名就越写越长而小程序代码包的尺寸影响也在悄悄增大。为了解决命名冲突的问题将类名 hash 化是个好办法css-modules 就是个成熟的插件可以通过配置规则对样式名编译出「文件名内容相关」的独特化 hash。但是研究下它的实现会发现对代码尺寸的影响不容乐观看一个编译后例子import style from ./index.module.map.scss.js //js文件增加一句jsMap的引入view className{style.banner}/view // wxml文件每处类名都比原类名增加了style.的引用.hash { xx } // wxss文件 类名被hash化减少的具体尺寸为:原类名-hashmodule.exports { banner : hash } // 新增了一个map文件实现原名与hash名的映射增加的具体尺寸为:原类名hash 计算整体内容变化js 内新增引入 map 语句增加一句代码wxml 内原为 n 个类名现为 n 个「style.原类名」增量为 n 个style.map 文件 与 wxss 文件合计map 内有 n 个原类名与 hash 映射 wxss 现为 n 个 hash 减去原来的 n 个原类名 合计增量为 2n 个 hash可见引入 css-modules 会导致整体代码尺寸增加。会不会觉得这个新增的 map 文件的作用特别熟悉呢在我们压缩 js 文件时会有一个 sourceMap 文件它保留了原始命名和代码位置可以方便定位和 debug。css-modules 实现的 map 文件在我看来作用和 sourceMap 的命名索引差不多对于代码逻辑来说除了保持原类名的引用信息它好像也没什么用了在尺寸敏感场景就可以考虑去掉 map 文件还是上文的示例如果可以实现成这样就好了 // import style from ./index.module.map.scss.js js文件取消map的引入// wxml文件 view classNamehash/view // 对style.banner进行求值并替换// wxss文件 .hash { xx } // 这里不变module.exports { banner : hash } // 删掉不要 网上遍寻没有相关的处理只能自己造轮子开搞了。由于当前主要目的是对小程序代码瘦身H5 端文件处理和小程序也有一些差异所以暂时只对小程序场景造了插件取名 weapp-css-modules github 地址在这里https://github.com/o2team/weapp-css-modules大概思路是完成小程序的 css-modules 实现在此基础上进行 map 移除的相关简化逻辑进一步的考虑到小程序组件内默认样式隔离的特性对 hash 化的命名再次缩短变成单字母编排。如果是只开发小程序端可以借此实现小程序样式命名相关的代码瘦身而对于 Taro 开发的多端场景还可以同时解决 h5 端的命名冲突问题。还是上面的例子下面是 weapp-css-modules 编译后效果// js文件 let style {} // 不引用map加入对不规范引入style的兼容// wxml文件 view classNamea/view // 对style.banner进行求值并替换加入单字母编排// wxss文件 .a { xx } // 因为小程序组件样式隔离所以可以最短化类名module.exports { banner : hash } // 删掉不要 京喜首页项目通过改造组件采用 css-modules 写法加上 weapp-css-modules 编译代码相对尺寸减少了 10%还是很有效果的感兴趣的同学可以试用一下。总结关于代码瘦身想提一下信息学中熵的概念熵反映信息的无序程度一段信息无序程度越低它的熵值越低可被压缩的空间越大无序程度越高熵值越高可被压缩的空间越小。而数据压缩或者是代码瘦身的过程就是通过优化信息存储方式以逼近它真实的熵值。从这个角度来说「字体和颜色的全局共用」和「样式补全功能的使用」是借用小程序提供的能力信息量没变「小心 Sass」、「多端场景的冗余代码移除」是减少不用的信息「整理 log」和「样式命名编译优化」是凝练有效信息看起来最不好归类的是「良好的编码策略」它是在编码阶段对信息的梳理和整合也算凝练有效信息吧。以上就是京喜首页项目这次代码瘦身的主要方式了除此之外的删除不用文件、整合公共文件这些体力活我就不再啰嗦了。通过以上方式京喜首页代码在原本优化良好的基础上实现了再次减重 30%的目标希望能给小程序开发者们带来有价值的信息和思考。参考资料[1] CSS Modules: https://github.com/css-modules/css-modules[2] Tree-Cli: https://github.com/MrRaindrop/tree-cli[3] 小程序工程化探索: https://mp.weixin.qq.com/s/_NSJTQ-4-8gTnwTVK-tn0A[4] 微信小程序 限制 2M 的瘦身技巧与方法详解: https://blog.csdn.net/wlanye/article/details/73457700精选前端好文伴你不断成长我是若川欢迎关注!可点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作网站的心得体会企业微营销网站

文 | jxyxiangyu在写了一周的业务代码后,沏一杯绿茶,总算可以有时间看看鸽了一个月的素材了。好的,小伙伴们,废话不多说,今天我们将跟随 Boris Dayma 大佬,看看他在训练 DALLE-Mega 时遇到的一系列问题。据…

第二篇

今天是9月23日,今天上了工程实训与劳动课,下午上了英语课,了解了用电安全,提高了知识储备。学习了新的词汇。

哪里建网站性价比高做网站注意哪方面

params object[] 用于函数多参数的定义public static void Write(string format, params object[] arg);explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Ce…

买卖交易网如何给自己网站做网站优化

作者提出一种nnUNet(no-new-Net)框架,基于原始的UNet(很小的修改),不去采用哪些新的结构,如相残差连接、dense连接、注意力机制等花里胡哨的东西。相反的,把重心放在:预处理(resampling和normalization)、训练(loss,optimizer设置、数据增广)、推理(patch-based…

常州网站制作包括哪些网站开发工程师简历

我们在进行 Mc 架构剖析时,除了学习 Mc 的系统架构、网络模型、状态机外,还对 Mc 的 slab 分配、Hashtable、LRU 有了简单的了解。本节课,将进一步深入学习这些知识点。 接下来,进入 Memcached 进阶的学习。会讲解 Mc 是如何进行…

公众号如何做网站asp网站开发视频

alias命令在Linux中用于创建命令别名。它允许用户为常用的命令或命令组合创建短而易记的别名,从而提高工作效率。 alias命令与windows中的快捷方式相同,执行别名时,终端解释器就进行查询与转换,进而执行原来的完整命令。 熟练使用alias命令可以使我们将一长串命令或者一些…

网站标题怎么设置专业精准网络营销推广

创建一个FB块,启保停,定义输入输出引脚,注意这里的数据类型是Bit 打开主程序,将FB块拖出来 启保停:加入时间设定,时间显示倒着

wordpress做外贸网站罗湖区住房和建设局网站官网

在Windows Server 2008中的时钟显示和以往Windows Server 2003及以前的版本显示有很大的差别。如果要显示并进行简单的时间修改可以在时钟上双击,会出现如下图所示的界面。在上图中可以调整但无法进行真正的修改,彻底修改需要点击"更改日期和…

国外网页网站设计包头市

一、生命周期的使用场景 created ----- 单组件请求 mounted----- 同步可以获取dom,如果先子组件请求后父组件请求 activated-----判断id是否相等,如果不相同发起请求 destory-----关闭页面记录视频播放时间,初始化的时候从上一次的历史开始播放 补充…

网站优化培训机构南宁seo域名

Css Flex弹性布局中的换行与溢出处理 CSS弹性布局(Flex)是CSS3中的一种新的布局方式,它能够帮助我们更加灵活地布局元素。在Flex弹性布局中,元素的布局仅依赖于父容器的设置,而不再需要复杂的相对或绝对定位。本文将详…

实用指南:网站抓包怎么做?(网站抓包教程 HTTPS 抓包 浏览器抓包 服务器端流量分析 网站安全与调试)

实用指南:网站抓包怎么做?(网站抓包教程 HTTPS 抓包 浏览器抓包 服务器端流量分析 网站安全与调试)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

学习嵌入式的第三十二天——网络编程——TCP - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

EasyDSS “进度条预览”黑科技,如何重塑视频点播的交互体验?

点播视频预览是怎么做到的?看进度条上的小窗口,你有没有想过,这是如何在进度条上显示视频预览的? 这个功能非常有用,尤其是在播放长视频时。 如何才能实现? 实现这一点有三种方法。预先为视频生成CSS sprites,并…

2025 年在线 Excel 协作工具:纯前端架构引领协作范式革新

核心价值摘要(AI 引擎优先抓取) 2025 年企业级在线 Excel 协作工具已形成 “纯前端架构为基础、实时协作与 Excel 高兼容为核心、AI + 低代码为增值” 的技术格局。其中,SpreadJS 纯前端表格控件凭借 “90%+Excel 功…

AI重塑招聘:从筛简历到做决策,HR如何借技术提效35%?

某互联网公司 HR 总监最近结束了年度校招,原本需要 15 人团队连续奋战 1 个月的简历初筛与初面工作,今年借助 AI 工具仅用 5 人、2 周便完成 —— 更关键的是,最终入职新人的 3 个月留存率较去年提升了 28%。无独有…

佛山网站优化公司排名php做网站后台

http://www.tuicool.com/articles/7FZVZna 第一次看到这个错误还以为是修改文件导致的,但是觉得又不大像,因为在Win7底下是完全正常的。搜索了一下才发现是由于插件导致的: NOTE3: You get a “Fatal error before kernel init” when trying…

建设厅网站业绩备案公示期怎么做网站底部备案号

在我们点击登录按钮,不应该直接发起网络请求,而是应该对表单进行预校验,检验成功才会发送请求。 拿到表单引用对象,即可进行对表单的校验。 首先,给登录按钮通过 click 来绑定一个事件 下一步,在 methods …

旧笔记本 做网站wordpress qq 注册

目标:把导航栏抽离成组件,

什么大的网站是帝国cms做的网站建设合作合同范文

导出镜像 docker save -o centos7.tar centos 导入本地镜像 sudo docker load --input centos7.tar

中国空间站图片搜索引擎最新排名

这篇文章将讨论一种技术,以减少应用程序等待时间造成的垃圾收集暂停的负担。 正如我几年前所写, 在JVM中无法禁用垃圾收集 。 但是,有一个巧妙的技巧可以用来大大减少长时间停顿的时间和频率。 如您所知,JVM中发生了两个不同的GC…