前端开发之如何正确实现加载过程中…

前端开发之如何正确实现加载过程中…

加载过程中根据其所应用场景,其实现并不一样。本文根据服务端渲染与浏览器端渲染以及客户端渲染三种应用场景分别阐述其实现的细节原理与技巧。

首先需要声明的一点是,我们强烈反对同构开发,不是我们做不到同构开发,而是因为这是一种不科学不合理的开发方式,举个例子吧!造飞机✈不难,造一个高性能飞机也不难,造船不难,造潜水艇也不难,但要造一个即能飞天,又能下潜,还能陆地跑,除了玩具外,我不认为它能投入生产。别的就不多说了,如果看完下面的内容,并且知道讲的是什么,就不难理解,为什么没有人造即能飞天又能潜水的怪怪物了。

在云上:天空飞翔之服务端渲染

在陆地:小步快跑之浏览器端渲染

深海潜行:客户端渲染如何设计一个好用的loading

服务端渲染之实现一个绿色的加载进度条

服务端渲染是指在服务器上根据用户的请求,进行数据处理,然后吐出一段html或png或txt或css的任意数据给浏览器或客户端,客户端接受到之后会去解码数据,如果是html的话还会去渲染这段html,如果我们的网页在服务端渲染的内容比较多,不光是数据处理,而是内容比较多,受限于网络传输的不稳定,一个网页的内容可能超过500kb,而此时用户的网络可能并不快,浏览器本身已经考虑到这种情况,会采取逐步渲染的方式呈现网页,当然前提是不能有阻塞内容呈现的js存在。很多时候用户和浏览器并不知道这个网页究竟有多长,response header里面的content length并不是规范里面强制规定的,也就是网页本身就允许不定长度,直到接收到response end才算结束,所以一般浏览器也不看这个长度。

如何改善加载过程呢?

一般的做法是,先在header里面写一个function用于操作进度条显示。如

function updateProcess(rate:number):void

然后在body里面插入一个div,并为其编写好样式。注意必须是插入的静态的div标签,不能是js生成的哦,如果是js生成,注意不能使用onload事件绑定脚本,因为那样会阻塞页面的呈现,浏览器将显示一个空白的页面,或显示上一个页面的残影,而不是逐步加载了。

然后每一个块之间插入一个Script标签,内容是

...网页的一部分内容

updateProcess(20)

...网页的一部分内容

updateProcess(30)

...网页的一部分内容

updateProcess(40)

...网页的一部分内容

updateProcess(50)

...网页的一部分内容

updateProcess(100)

结束

这种方式适合于服务端渲染,除了可以在模版里面这么写外,也可以动态的根据处理的内容,实时flush内容到浏览器,以便提示加载的情况。但一般不这么做,因为每个连接都是有最大时间的,一般的服务器,最大连接时间是30多秒吧。但也有的服务器,因为考虑到性能,担心太多无用的链接占用,而选择超过5秒连接没有断开,将强制断开这些连接,这是有风险的,因为有一些地方网络不太好,比较校园网,可能才50kb的网速,如果一个网页的内容本身内容比较丰富且多,那么超过5秒后内容还没有加载完,却强行断开,会导致网页只显示一半。这时用户必须手动刷新一下页面,如果这个用户网络情况一直不好,则可能会出现一直无法打开,其实不是他没有网络,而是他的网络太慢,可能网速才几kb每秒,对于这些用户我们也不能直接放弃他们呀。改善弱网用户的体验也是程序员们所需要做的,解决办法就是异步加载呀。将数据都在服务端算好之后,通过api返回,然后前端处理后呈现出来。

这样可以加快用户的访问。具体的原理是因为

1、前端渲染更高效,有效的减少了数据的体积

2kb+10条1kb json数据=12kb

相同的内容服务端渲染好的

内容(2kb+1kb)*10遍=30kb

2、服务器渲染受服务器性能状况影响,而浏览器处理的性能几乎可以忽略不计

前端性能优化的几个点,

A、异步化加载,

B、前端各种各样的数据缓存

浏览器端的loading

浏览器端的loading,有很多人的用法是错误的,导致并没有起到loading的作用。正确的用法是

网页内容

先加载必要的meta,如编码,图标等

然后是标题,这样用户将能在最快的情况下看到网页的标题和logo,这是有意义的,用户这样才能知道这个网页是可以打开的,并且浏览器能更及时的给予用户反馈

必要的基础css,这个css不能特别大,也不能加载所有的样式图片,最好只有是loading的样式图片,大小不能超过2kb

loading的html的结构,只能是静态的html标签,不能用js操作

js的那些基础库什么的,比如jquery/react等当前页面的js

必须严格按这个顺序来加载,loading才能真实的反映出效果来。

对于用户来说,用户大部分的时候确实都是浪费在加载数据上面,不论是加载api数据还是加载网页的脚本样式。所有的时间都是浪费在传输上面,而网页本身支持逐步加载,那么先把loading加载出来,然后再加载那些元素,这样才能体现loading的作用啊,但很多网页啊,先把js加载好了,然后再显示个loading出来,然后显示页面,其实在大部分情况下,用户的体验是先是个大白页,然后过个2-3秒后,出来个loading,然后内容才出来。其实没有必要,这种情况下还不如不要loading呢,此时的loading其实只是反映请求api的时间,但是一般前端api都是要求即时响应的,并且数据量不会太大。真正大头上需要放loading的地方却没有放loading这才是问题。

客户端的loading

客户端也有loading,但不建议客户端和浏览器端那样,用整页的loading,因为没有必要啊,客户端的所有代码都是在本地执行的,又不像浏览器的代码需要先下载后执行。客户端代码都已经在本地了,都不需要加载代码,显示整页loading,没什么用,而对于api的加载时间,主流的app都是采用,刷新数据的方式加载。而loading,一般是不用,即使用也是局部的。什么是刷新数据的加载呢,就是app发布的时候,已经把整屏的数据内置到app里面了,所以即使此时用户初次安装,没有授权网络,断网离线,也能看到内容和图片,因为都是内置的数据,当获取到用户的网络权限后,请求api,刷新内置的数据。因为是在原数据位置更新数据,所以不需要loading,而是直接替换内容了。整屏的loading比较影响用户的操作,阻塞了流程,体验不好。。

根据水瓶座强大的预言能力,预测。未来做同构开发的最终将面临两个选择,

选择一,被前端开发给淘汰掉,因为跟不上前端开发的要求

选择二,被迫放弃同构开发。没有第三种可能~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,870评论 25 707
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,743评论 1 92
  • 我的奶奶一个典型的农村妇女,一辈子辛苦劳作,持家教子,养大了五个儿子,对于旧社会来说,家里有五个儿子,没有女儿,日...
    前方是梦想的方向阅读 397评论 5 6
  • 因为下属工作上的疏忽,在领导巡查中被直接打入冷宫。 A:一早,直属领导就在微信群里直接@我说到,这就是你带的好店总...
    吃货暮小尘阅读 156评论 0 1
  • 空空的行囊只带着泥土的味道 漫步过恍然的街听到熟悉的歌 路的尽头是海的潮流 你知道东方在哪儿吗 我在找寻不到的太阳...
    落草为马阅读 278评论 0 0