javascript京喜小程序的高性能打造之路凹凸实验室

其中,“是否有用?”这个问题是非常主观的,对于不同场景的系统可能会有完全不一样的回答,所以FMP是一个比较模糊的概念指标,不存在规范化的数值衡量。

小程序作为一个新的内容载体,衡量指标跟Web应用是非常类似的。对于大多数小程序而言,上述指标对应的含义为:

综上,我们已基本确定了高性能的概念指标,接下来就是如何利用数值指标来描绘性能表现。

小程序官方针对小程序性能表现制订了权威的数值指标,主要围绕渲染表现、setData数据量、元素节点数和网络请求延时这几个维度来给予定义(下面只列出部分关键指标):

我们应该把这一系列的官方指标作为小程序的性能及格线,不断地打磨和提升小程序的整体体验,降低用户流失率。另外,这些指标会直接作为小程序体验评分工具的性能评分规则(体验评分工具会根据这些规则的权重和求和公式计算出体验得分)。

我们团队内部在官方性能指标的基础上,进一步浓缩优化指标系数,旨在对产品体验更高要求:

体验评分工具是目前检测小程序性能问题最直接有效的途径,我们团队已经把体验评分作为页面/组件是否能达到精品门槛的重要考量手段之一。

很多时候,宏观的耗时统计对于性能瓶颈点分析往往是杯水车薪,作用甚少,我们需要更细致地针对某个页面某些关键节点作测速统计,排查出暴露性能问题的代码区块,才能更有效地针对性优化。京喜小程序使用的是内部自研的测速系统,支持对地区、运营商、网络、客户端系统等多条件筛选,同时也支持数据可视化、同比分析数据等能力。京喜首页主要围绕页面onLoad、onReady、数据加载完成、首屏渲染完成、各业务组件首次渲染完成等几个关键节点统计测速上报,旨在全链路监控性能表现。

为了更好地为小程序制订性能优化措施,我们有必要先了解小程序的底层架构,以及与web浏览器的差异性。

作为小程序开发者,我们常常会被下面几个问题所困扰:

接下来,我们会结合小程序的底层架构分析出这些问题的根本原因,并针对性地给出解决方案。

小程序启动阶段,也就是如下图所示的展示加载界面的阶段。

1.准备运行环境:

2.下载小程序代码包:

在小程序初次启动时,需要下载编译后的代码包到本地。如果启动了小程序分包,则只有主包的内容会被下载。另外,代码包会保留在缓存中,后续启动会优先读取缓存。

3.加载小程序代码包:

小程序代码包下载好之后,会被加载到适当的线程中执行,基础库会完成所有页面的注册。

在页面注册过程中,基础库会调用页面JS文件的Page构造器方法,来记录页面的基础信息(包括初始数据、方法等)。

4.初始化小程序首页:

在小程序代码包加载完之后,基础库会根据启动路径找到首页,根据首页的基础信息初始化一个页面实例,并把信息传递给视图层,视图层会结合WXML结构、WXSS样式和初始数据来渲染界面。

经过多次业务迭代,无可避免的会存在一些弃用的组件/页面,以及不被调用的函数、样式规则,这些冗余代码会白白占据宝贵的代码包空间。而且,目前小程序的打包会将工程下所有文件都打入代码包内,并没有做依赖分析。

因此,我们需要及时地剔除不再使用的模块,以保证代码包空间利用率保持在较高水平。通过一些工具化手段可以有效地辅助完成这一工作。

WXML中的import和include:

{{text}}ABWXSS中的@import:

@import'./A.wxss'JS中的require/import:

constA=require('./A')所以,可以说小程序里的所有依赖模块都是有迹可循的,我们只需要利用这些关键字信息递归查找,遍历出文件依赖树,然后把没用的模块剔除掉。

小程序代码包最终会经过GZIP压缩放在CDN上,但GZIP压缩对于图片资源来说效果非常低。如JPG、PNG等格式文件,本身已经被压缩过了,再使用GZIP压缩有可能体积更大,得不偿失。所以,除了部分用于容错的图片必须放在代码包(譬如网络异常提示)之外,建议开发者把图片、视频等静态资源都放在CDN上。

这是一个“痛并快乐着”的优化措施。“痛”是因为需要给后台同学提改造需求,分分钟被打;“快乐”则是因为享受删代码的过程,而且万一出Bug也不用背锅了...(开个玩笑)

通过让后台承担更多的业务逻辑,可以节省小程序前端代码量,同时线上问题还支持紧急修复,不需要经历小程序的提审、发布上线等繁琐过程。

总结得出,一般不涉及前端计算的展示类逻辑,都可以适当做后移。譬如京喜首页中的幕帘弹窗(如下图)逻辑,这里共有10+种弹窗类型,以前的做法是前端从接口拉取10+个不同字段,根据优先级和“是否已展示”(该状态存储在本地缓存)来决定展示哪一种,最后代码大概是这样的:

//检查每种弹窗类型是否已展示Promise.all([check(popup_1),check(popup_2),//...check(popup_n)]).then(result=>{//优先级排序constqueue=[{show:result.popup_1data:data.popup_1},{show:result.popup_2data:data.popup_2},//...{show:result.popup_ndata:data.popup_n}]})逻辑后移之后,前端只需负责拿幕帘字段做展示就可以了,代码变成这样:

this.setData({popup:data.popup})

京喜首页作为电商系统的门户,需要应对各类频繁的营销活动、升级改版等,同时也要满足不同用户属性的界面个性化需求(俗称“千人千面”)。如何既能减少为应对多样化场景而产生的代码量,又可以提升研发效率,成为燃眉之急。

类似于组件复用的理念,我们需要提供更丰富的可配置能力,实现更高的代码复用度。参考小时候很喜欢玩的“乐高”积木玩具,我们把首页模块的模板元素作颗粒度更细的划分,根据样式和功能抽象出一块块“积木”原料(称为插件元素)。当首页模块在处理接口数据时,会启动插件引擎逐个装载插件,最终输出个性化的模板样式,整个流程就好比堆积木。当后续产品/运营需要新增模板时,只要在插件库中挑选插件排列组合即可,不需要额外新增/修改组件内容,也更不会产生难以维护的if/else逻辑,soeasy~

当然,要完成这样的插件化改造免不了几个先决条件:

下面为大家提供部分例程来辅助理解。其中,use方法会接受各类处理钩子最终拼接出一个Function,在对应模块处理数据时会被调用。

白屏阶段,是指小程序代码包下载完(也就是启动界面结束)之后,页面完成首屏渲染的这一阶段,也就是FMP(首次有效绘制)。

小程序提供了读写本地缓存的接口,数据存储在设备硬盘上。由于本地I/O读写(毫秒级)会比网络请求(秒级)要快很多,所以在用户访问页面时,可以优先从缓存中取上一次接口调用成功的数据来渲染视图,待网络请求成功后再覆盖最新数据重新渲染。除此之外,缓存数据还可以作为兜底数据,避免出现接口请求失败时页面空窗,一石二鸟。

但并非所有场景都适合缓存策略,譬如对数据即时性要求非常高的场景(如抢购入口)来说,展示老数据可能会引发一些问题。

如果这几个问题点都不会影响到你的场景,那么可以尝试开启预拉取能力,这对于小程序首屏渲染速度是质的提升。

为了尽快获取到服务端数据,比较常见的做法是在页面onLoad钩子被触发时发起网络请求,但其实这并不是最快的方式。从发起页面跳转,到下一个页面onLoad的过程中,小程序需要完成一些环境初始化及页面实例化的工作,耗时大概为300~400毫秒。

实际上,我们可以在发起跳转前(如wx.navigateTo调用前),提前请求下一个页面的主接口并存储在全局Promise对象中,待下个页面加载完成后从Promise对象中读取数据即可。

这也是双线程模型所带来的优势之一,不同于多页面web应用在页面跳转/刷新时就销毁掉window对象。

如果开启了分包加载能力,在用户访问到分包内某个页面时,小程序才会开始下载对应的分包。当处于分包下载阶段时,页面会维持在“白屏”的启动态,这用户体验是比较糟糕的。

以京喜小程序如此庞大的小程序项目为例,每个模块背后都可能有着海量的后台服务作支撑,而这些后台服务间的通信和数据交互都会存在一定的时延。我们根据京喜首页的页面结构,把所有模块划分成两类:主体模块(导航、商品轮播、商品豆腐块等)和非主体模块(幕帘弹窗、右侧挂件等)。

这也是关键渲染路径优化思路之一,通过延迟非关键元素的渲染时机,为关键渲染路径腾出资源。

类似上一条措施,继续以京喜小程序首页为例,我们在主体模块的基础上再度划分出首屏模块(商品豆腐块以上部分)和非首屏模块(商品豆腐块及以下部分)。当小程序获取到主体模块的数据后,会优先渲染首屏模块,在所有首屏模块都渲染完成后才会渲染非首屏模块和非主体模块,以此确保首屏内容以最快速度呈现。

鉴于移动端设备的分辨率是有上限的,很多图片的尺寸常常远大于页面元素尺寸,这非常浪费网络资源(一般图片尺寸2倍于页面元素真实尺寸比较合适)。得益于京东内部强大的图片处理服务,我们可以通过资源的命名规则和请求参数来获取服务端优化后的图片:

这两者都是比较老生常谈的图片优化技术,这里就不打算细讲了。

在不得不使用大图资源的场景下,我们可以适当使用“体验换速度”的措施来提升渲染性能。

下面为大家提供部分例程:

“白屏”的加载体验对于首次访问的用户来说是难以接受的,我们可以使用尺寸稳定的骨架屏,来辅助实现真实模块占位和瞬间加载。

有趣的是,京喜首页的骨架屏方案经历了“统一管理”和“(组件)独立管理”两个阶段。出于避免对组件的侵入性考虑,最初的骨架屏是由一个完整的骨架屏组件统一管理的:

页面主体但这种做法的维护成本比较高,每次页面主体模块更新迭代,都需要在骨架屏组件中的对应节点同步更新(譬如某个模块的尺寸被调整)。除此之外,感官上从骨架屏到真实模块的切换是跳跃式的,这是因为骨架屏组件和页面主体节点之间的关系是整体条件互斥的,只有当页面主体数据Ready(或渲染完毕)时才会把骨架屏组件销毁,渲染(或展示)主体内容。

//banner.scss.banner--skeleton{@includeskeleton;.banner_wrapper{@includeskeleton__block;}}

当调用wx.navigateTo打开一个新的小程序页面时,小程序框架会完成这几步工作:

1.准备新的webview线程环境,包括基础库的初始化;

2.从逻辑层到视图层的初始数据通信;

3.视图层根据逻辑层的数据,结合WXML片段构建出节点树(包括节点属性、事件绑定等信息),最终与WXSS结合完成页面渲染;

尽可能地把多次setData调用合并成一次。

在Taro框架下,调用setState时提供的对象会被加入到一个数组中,当下一次事件循环执行的时候再把这些对象合并一起,通过setData传递给原生小程序。

所以,与视图层渲染无关的数据尽量不要放在data中,可以放在页面(组件)类的其他字段下。

每当调用setData更新数据时,会引起视图层的重新渲染,小程序会结合新的data数据和WXML片段构建出新的节点树,并与当前节点树进行比较得出最终需要更新的节点(属性)。

即使小程序在底层框架层面已经对节点树更新进行了diff,但我们依旧可以优化这次diff的性能。譬如,在调用setData时,提前确保传递的所有新数据都是有变化的,也就是针对data提前做一次diff。

Taro框架内部做了这一层优化。在每次调用原生小程序的setData之前,Taro会把最新的state和当前页面实例的data做一次diff,筛选出有必要更新的数据再执行setData。

当用户事件(如Click、Touch事件等)被触发时,视图层会把事件信息反馈给逻辑层,这也是一个线程间通信的过程。但,如果没有在逻辑层中绑定事件的回调函数,通信将不会被触发。

所以,尽量减少不必要的事件绑定,尤其是像onPageScroll这种会被频繁触发的用户事件,会使通信过程频繁发生。

组件节点支持附加自定义数据dataset(见下面例子),当用户事件被触发时,视图层会把事件target和dataset数据传输给逻辑层。那么,当自定义数据量越大,事件通信的耗时就会越长,所以应该避免在自定义数据中设置太多数据。

不难得出,如果自定义组件的颗粒度太粗,组件逻辑过重,会影响节点树构建和新/旧节点树diff的效率,从而影响到组件内setData的性能。另外,如果组件内使用了createSelectorQuery来查找节点,过于庞大的节点树结构也会影响查找效率。

WXML数据绑定是小程序中父组件向子组件传递动态数据的较为常见的方式,如下面例程所示:ComponentA组件中的变量a、b通过组件属性传递给ComponentB组件。在此过程中,不可避免地需要经历一次ComponentA组件的setData调用方可完成任务,这就会产生线程间的通信。“合情合理”,但,如果传递给子组件的数据只有一部分是与视图渲染有关呢?

//ComponentBComponent({properties:{propA:String,propB:String,},methods:{onLoad:function(){this.data.propAthis.data.propB}}})推荐一种特定场景下非常便捷的做法:通过事件总线(EventBus),也就是发布/订阅模式,来完成由父向子的数据传递。其构成非常简单(例程只提供关键代码...):

子组件被创建时事先监听数据下发事件,当父组件获取到数据后触发事件把数据传递给子组件,这整个过程都是在小程序的逻辑层里同步执行,比数据绑定的方式速度更快。

但并非所有场景都适合这种做法。像京喜首页这种具有“数据单向传递”、“展示型交互”特性、且一级子组件数量庞大的场景,使用事件总线的效益将会非常高;但若是频繁“双向数据流“的场景,用这种方式会导致事件交错难以维护。

我们可能会遇到这样的需求,多个组件之间位置不固定,支持随时随地灵活配置,京喜首页也存在类似的诉求。

京喜首页主体可被划分为若干个业务组件(如搜索框、导航栏、商品轮播等),这些业务组件的顺序是不固定的,今天是搜索框在最顶部,明天有可能变成导航栏在顶部了(夸张了...)。我们不可能针对多种顺序可能性提供多套实现,这就需要用到小程序的自定义模板//search-bar.jsComponent({properties:{floorId:Number,},created(){event.on('data-ready',(comps)=>{constdata=comps[this.data.floorId]//根据楼层位置取数据})}})貌似非常轻松地完成需求,但值得思考的是:如果组件顺序调整了,所有组件的生命周期会发生什么变化?

假设,上一次渲染的组件顺序是['search-bar','nav-bar','banner','icon-nav'],现在需要把nav-bar组件去掉,调整为['search-bar','banner','icon-nav']。经实验得出,当某个组件节点发生变化时,其前面的组件不受影响,其后面的组件都会被销毁重新挂载。

原理很简单,每个组件都有各自隔离的节点树(ShadowTree),页面body也是一个节点树。在调整组件顺序时,小程序框架会遍历比较新/旧节点树的差异,于是发现新节点树的nav-bar组件节点不见了,就认为该(树)分支下从nav-bar节点起发生了变化,往后节点都需要重渲染。

但实际上,这里的组件顺序是没有变化的,丢失的组件按道理不应该影响到其他组件的正常渲染。所以,我们在setData前先进行了新旧组件列表diff:如果newList里面的组件是oldList的子集,且相对顺序没有发生变化,则所有组件不重新挂载。除此之外,我们还要在接口数据的相应位置填充上空数据,把该组件隐藏掉,done。

通过组件diff的手段,可以有效降低视图层的渲染压力,如果有类似场景的朋友,也可以参考这种方案。

想必没有什么会比小程序Crash更影响用户体验了。

不过内存告警的信息收集倒是有意义的,我们可以把内存告警信息(包括页面路径、客户端版本、终端手机型号等)上报到日志系统,分析出哪些页面Crash率比较高,从而针对性地做优化,降低页面复杂度等等。

根据双线程模型,小程序每一个页面都会独立一个webview线程,但逻辑层是单线程的,也就是所有的webview线程共享一个JS线程。以至于当页面切换到后台态时,仍然有可能抢占到逻辑层的资源,譬如没有销毁的setInterval、setTimeout定时器:

//PageAPage({onLoad(){leti=0setInterval(()=>{i++},100)}})即使如小程序的组件,在页面进入后台态时依然是会持续轮播的。正确的做法是,在页面onHide的时候手动把定时器清理掉,有必要时再在onShow阶段恢复定时器。坦白讲,区区一个定时器回调函数的执行,对于系统的影响应该是微不足道的,但不容忽视的是回调函数里的代码逻辑,譬如在定时器回调里持续setData大量数据,这就非常难受了...

对于大图片资源(譬如满屏的gif图)来说,我们只能尽可能对图片进行降质或裁剪,当然不使用是最好的。

然而无可避免地,当用户快速滚动长列表时,被销毁的组件可能来不及加载完,视觉上就会出现短暂的白屏。我们可以适当地调整销毁阈值,或者优化骨架图的样式来尽可能提升体验感。

结合上述的种种方法论,京喜小程序首页进行全方位升级改造之后给出了答卷:

1.Audits审计工具的性能得分86;

3.优化前后的测速数据对比:

凹凸实验室(Aotu.io,英文简称O2)始建于2015年10月,是一个年轻基情的技术团队。

THE END
1.Banner广告位怎么放收益高?Banner直客广告点位设计建议Banner广告位怎么放收益高?Banner直客广告点位设计建议 Banner广告是指在APP内容底部、中部或者顶部,以固定/轮播形式展示广告,一般展示区域较小,常见于阅读页底部、工具编辑页中部、底部。 Banner广告样式特征 人均展示次数高:轮播设置可以让广告展现时间更长、曝光量更高;https://www.163.com/dy/article/JJRRV5UL0556ANRL.html
2.8000字干货!超全面的Banner设计指南优设网Banner 设计是最常见的一种广告运营形式,是我们设计师在日常工作中经常接触到的需求。Banner 设计看似简单,实则囊括了平面设计、设计心理学、用户研究、文案设计等多领域的知识点,那么我们该如何做好一张“优质 Banner”呢?下面我总结归纳了自己平时做 Banner 的一些心得经验与各位大佬交流探讨,有不足之处,欢迎指出。https://www.uisdc.com/banner-design-5
3.超详细网站Banner制作5步教程动态banner怎么做在Banner 设计时,团队可能会产生意见分歧,推荐使用即时设计协同设计软件进行 Banner 设计,可以与团队在一个链接协同工作,基于云端实时更新,如果设计文件发生修改,标注信息也会自动更新,增加团队 Banner 设计效率。 4. 确定网站 Banner 的尺寸 网站Banner 的大小与选择的格式密切相关。根据投放网站 Banner 的位置,需要适当https://blog.csdn.net/FourxiYuanzi/article/details/130825611
4.gif制作gif动图gif动画图片在线制作软件我拉网GIF图片制作工具是一款支持在线多图合成gif、视频转gif、gif制作、gif裁剪、gif压缩、表情包gif、gif编辑、gif拼图等功能的动图制作软件,您可以随心随意的制作喜欢的GIF动画。https://gif.55.la/
5.器国际站全屏轮播通栏banner轮播旺铺滚动循环播放首页怎么做拼接动画效果1688鼠标经过图片向上移动特效1688鼠标经过图片向上移动特效1688阿里巴巴固定背景交替特效视差效果1688阿里巴巴固定背景交替特效1688阿里巴巴自定义视频工具1688阿里巴巴自定义视频工具16881688旺铺客服代码在线生成器 1688阿里巴巴客服代码1688阿里巴巴客服代码1688阿里巴巴详情页关联产品链接地址新窗口打开新页面打开怎么做?https://yimiaomeigong.com/tool/alibaba/alibabaslt/index.php
6.如何做好Banner展示位?日常的界面设计中经常会做到banner展示位的设计,前段时间做banner区域的时候,就想着怎么样能够做的特别又落地,兼顾美观与功能。可是搜遍网络也没有找到相关的文章,于是自己一边学习一边整理了这篇关于移动端bann 文章主要从以下四个方面切入: 1、banner的尺寸设置 http://www.7msj.com/portal.php?mod=view&aid=34&page=1&forcemobile=1
7.如何做公众号动态banner?动态公众号banner制作技巧做新媒体的就是要紧跟时代的步伐,大家玩什么,就得跟上脚步做什么。当大家在微信上宣传时,就得在微信上搞出内容,当大家不满足于一张图片的形式更新微信时,公众号banner图动态制作就要学起来啦。那么,你知道怎么制作动态公众号banner吗? 第一步:进入稿定设计网站,找到模板中心的,视频/GIF,选择动态海报。会出现很多https://www.gaoding.com/article/1812
8.盘点汇总亚马逊投放广告的10个误区!内附解决对策购买banner广告的费用是很高的,如果追求banner广告可能会导致ACOS非常高,这对于普通的亚马逊卖家来说广告成本比销售额还高,肯定是非常不划算的。因此,如果是想提高销量的卖家不建议追求首页banner广告。 5.忽略关键词优化 亚马逊广告投放中,关键词是重中之重,选择不当或者没有进行合理的优化都可能导致广告效果不佳。一https://www.cifnews.com/article/161105
9.腾讯云官网升级之B端产品Banner风格打造社区首页通用图形库: 大学通用图形库: 对于软件使用陌生情况下的同学,图形都做了拆分。后期有急需上线的banner可以在上面选择,重组。 内部也上传至DTC腾讯云设计平台,方便对接产品业务的设计师或者产品和运营童鞋能随时运用选择上线的图形。 总结 banner设计也大有可为,看似很小的细节升级,组合在一起可以展现出不同的https://cloud.tencent.com/developer/article/1991091
10.WordPress教程WordPress建站手册2024/12月更新设置网站banner幻灯片 WordPress 幻灯片是一种设计功能,可让您在网站的有限空间中更有效地展示图像、视频和其他内容。 登录WordPress后台,打开首页编辑页面,我们可以看到以下选项。 WordPress幻灯片支持图片设置 WordPress幻灯片支持视频设置 进一步阅读: 如何在 WordPress 中创建幻灯片轮播图 如何在WordPress中创建幻灯片支持https://www.seo628.com/allinonewordpress
11.做专题做banner做活动页什么的可以在这里搜搜别人怎么做做专题做banner做活动页什么的可以在这里搜搜别人怎么做 数据统计 数据评估 花瓣网浏览人数已经达到5,580,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:花瓣网的访问速度、搜索引擎收录以及索引量、用户体验https://www.xuezha.cn/sites/1440.html
12.Banner是什么意思?网站banner设计应怎么做?网站banner设计应怎么做? Banner在中文里是“横幅广告”的意思,通常是用来在网站上吸引用户眼球、增加点击率,同时也可以用来宣传品牌之类的。 一个好的Banner设计,除了需要符合网站的整体视觉风格,还需要做到简洁明了、图文并茂、吸引用户注意力、易于理解等多个方面的考虑。下面就来谈谈如何设计一款优秀的网站Banner。https://www.suchunyu.com/15222.html
13.淘宝电商海报图设计技巧营销海报注意事项点一、拿到一个banner设计需求后,我们该怎么做 接到一个banner图的设计需求。第一件事情应该是去了解以下几个方面点: 1、banner圈是针对什么活动、什么目的而设计的 我们需要知道做这个的原因,为谁而做.比如是为了某个节日专题活动还是针对某一个单品的预售.是走高端大气上档次路线.还是走促销亲民热闹路线.等等因为这https://www.douban.com/note/605657069/
14.阿里妈妈创意中心了解账户创意类型分布,对比同行创意现状,明确自身创意水位,提升店铺创意竞争力! 使用帮助 查看详情 趋势洞察 快速定位高效的创意主题;探索行业新词、热词、飙升词;洞悉同行创意制作灵感! 使用帮助 查看详情 创意排行榜 全场景&全类目高跑量、高点击创意一览,了解行业优质创意特征,提升自身创意竞争力! https://chuangyi.taobao.com/
15.ebay有哪些活动?怎么做?顾名思义,这个是针对买家的一个优惠券活动,美国、英国、德国、法国等8各站点都是可以参加的,并且会在首页的banner做推广。 为了帮助各位ebay卖家们更好的运营好自己店铺的工作,其实也有人想要去了解ebay到底有哪些活动可以报名参加,如果想要参加这些活动,应该要怎么做呢? https://www.maijia.com/article/530240
16.如何做好一个Banner?4.版式:banner图使用了作文右图的布局,这样版式的图片能够起到补充说明文字的作用;5.颜色:色彩上使用https://www.zhihu.com/question/28517350/answer/3365514773
17.banner是什么意思?怎样做一个banner?banner是什么意思?怎样做一个banner? 您是否曾经在高速公路上开车,却看到一个巨大的广告牌挡住了阳光?想象一下缩小广告牌的大小,然后创建一个“广告牌”放置在网站上,这通常就是我们所说的“banner”。MAY的SEO博客为您分享:banner是什么意思?怎样做一个banner?https://may90.com/share/banner.html
18.怎样做好一个网页的banner2、 文字+主体物的两段式,文字图案相辅相成,起到文字言事图案帮助理解的效果。这样的banner适合做介绍类或者产品类 3、 主体物+背景+文字的三段式,特点虚实结合,主次关系明显,也是效果最好,用的最广泛的一种形式。四,创造力对主题的艺术化表现 1,严肃话题也能做出新感觉 做新闻报道的时候,https://zhidao.baidu.com/question/497424499597298364.html
19.网页设计实习总结(通用12篇)(1)由于自己并没有专门学过banner规范和设计方面的专业知识,有的只是审美方面的一些小体会。接手这个工作需要花大量的时间去学习和参考。一开始略略觉得压力大,但是觉得经理让我去做,就是相信我的能力。所以我也没有慌,按照自己的节奏和需要边学边做。 https://www.yjbys.com/shixi/shixizongjie/1740750.html
20.淘宝店铺能手机装修吗?手机装修怎么做?卖家可以在手机端进行店铺的基本设置、商品分类、banner图修改等操作,以满足卖家在不同场景下的运营需求。 二、淘宝店铺手机装修怎么做? 1. 登录手机端淘宝卖家中心:首先,卖家需要登录手机端淘宝卖家中心,可以通过淘宝App或者直接在浏览器中输入网址进行登录。 https://www.kaitao.cn/article/20240419103951.htm
21.html5banner代码html做bannerhuangliang的技术博客html5 banner 代码 html做banner 一.banner部分制作分析 1.banner部分主要存放的是一张图片 2.图片的中下部位有一个选项列表 二.代码的实现 1.HTML代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 具体实现(由于此次项目使纯页面,不实现https://blog.51cto.com/u_12929/6595806
22.推荐如何做好网站Banner设计,网站Banner风格样式大解析由于每个网站所属的行业不同、领域不同、产品的属性也天差地别,而且文案字数和搭配元素也有所不同,导致Banner的构图和风格需要根据实际需求进行修改。这里只分析提供一些构图的样式,不做具体的推荐。 左右构图:这类构图最常用,也最简单。通常是左文右图或者左图右文的格式,文案与图片分区明显。左右构图适用于凸显文案https://www.huida178.com/seojiaocheng/39887
23.网页设计需要了解的相关知识4、banner同导航,和过度. 导航跟banner是分开的还是在一起的.在一起的话你是否采用flash制作,如不用flash制作,你设计的背景是否适合切割成平铺的背景,怎样让背景图片体积最小.记住不要用2×2的背景做平铺.banner是占据了整个宽度,还是只是一部分.如果是一部分,那么空出的地方你准备放什么东西. http://www2.hnsyu.net/syxywlzx/jszc/wlxxaq/201012/t20101212_46968.html
24.gif网站banner怎么做/seo编辑是干什么的gif网站banner怎么做,seo编辑是干什么的,志愿者管理网站开发的需求分析 基于 java,网络营销工作之企业官方网站建设篇磁盘和硬盘是对磁盘存储系统的同一个称呼,发展趋势是体积更小、速度更快、容量更大、使用更安全。那么就目前看来,磁盘的外部、内部结构是怎样的呢? 一、磁盘的外部结构 1.磁盘接口 接口包括电源插座http://www.llbn.cn/news/609193.html