当前位置: 首页 > news >正文

怎样做自己的的社交网站国家工商局网站官网

怎样做自己的的社交网站,国家工商局网站官网,中国logo设计公司排名,梧州网页设计当浏览器遇到性能瓶颈导致页面卡顿时#xff0c;你会怎么处理#xff1f;如何查找问题的原因#xff1f; 浏览器本身自带性能检测工具#xff0c;通常我们分析由脚本导致的页面卡顿会选择 性能#xff08;performance#xff09; 选项卡#xff0c;在其中我们可以找到导…当浏览器遇到性能瓶颈导致页面卡顿时你会怎么处理如何查找问题的原因 浏览器本身自带性能检测工具通常我们分析由脚本导致的页面卡顿会选择 性能performance 选项卡在其中我们可以找到导致页面卡顿的函数另外通过观察我们可以看到脚本的执行时间占比以及页面卡顿的程度。 此外还有 内存 选项卡可以截取当前页面的内存快照由于我们的页面通常不像服务器那样一直运行所以平常我们也不会过于关注页面的内存使用问题。 1. 渲染大量数据 由于要渲染大量数据我们刚开始学习前端时如果经验不足就会简单地将所有数据全部一次性地渲染到页面上这样势必会造成页面的卡顿。所以这种方法我这里也不会去介绍。 下面直接进入正轨首先提出一个问题引发思考如果让你去实现你会怎么实现 1.1. 采用异步 我首先是想到如果要渲染大量数据我们可以将这一个巨大的任务拆分成一个个的小任务来执行将这一个个的小任务加入到任务队列当中采用异步的方式来慢慢地执行。 不过这个会有个缺陷由于这么多数据是按照顺序来依次执行的所以当用户想查看比较靠后的数据时用户会发现数据一直在加载中、一直在渲染然后用户等啊等最后点击关闭标签页。 下面是一个简单的使用异步实现的逻辑只包含部分代码 const ul document.querySelector(ul);let total 100_000_000; let count 0;function loop() {const fragment document.createDocumentFragment();for (let i 0; i 20 count total; i, count) {const li document.createElement(li);li.textContent count;fragment.appendChild(li);}ul.appendChild(fragment);window.requestAnimationFrame(loop); }loop();观察上面的代码其中使用到了 requestAnimationFrame 函数它接收一个函数作为参数这个函数会在浏览器每一帧渲染结束之后执行。 为什么不使用 setTimeout 定时器因为 setTimeout 函数无法控制函数的执行时机我们只知道函数会被加入到任务队列但并不知道函数会在何时执行而 requestAnimationFrame 函数则固定在每一帧渲染之后执行这样就不会在视觉上让用户感觉页面卡顿。 当然如果 requestAnimationFrame 的函数执行时间过长会推迟下一帧的渲染所以尽量不要将耗时任务放在其中。 1.2. 虚拟列表 虚拟列表采用的思想类似于懒加载都是只加载用户看得见的数据懒加载在计算机上随处可见比如单例模式中的饿汉式、图片的懒加载等在我们常用的 QQ 中像消息列表联系人列表他也采用了类似于虚拟列表的形式进行渲染以减少内存的使用量。 因为这里我们要处理大量数据的渲染如果要求所有的数据必须全部渲染在可视区当中那么懒加载就派不上用场了。 虚拟列表主要由可视区的数据构成其他的位置都是空白。我们可以通过 padding 或者是 top/left 来制造空白。如下图所示图片来自这篇文章 面试官如何一次性渲染十万条数据 - 掘金 (juejin.cn)可视区展示我们想看见的数据缓存区就是我说的空白。 实现的代码如下 !DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/titlestyle* {margin: 0;padding: 0;}.scroll-box {height: 100vh;overflow-y: scroll;}/style /head bodydiv classscroll-boxul/ul/divscript src./test.js/script /body /html对应的 test.js const ul document.querySelector(ul); const scrollBox document.querySelector(.scroll-box);let total 100_000_000; let count 0; let liHeight 20; // 要展示的数据量 let showCount scrollBox.clientHeight / liHeight 0;let totalHeight total * liHeight;function generateLi() {// 计算出来的处于可视区顶部的数据索引let index (scrollBox.scrollTop / liHeight) 0;const fragment document.createDocumentFragment();// 制造空白ul.style.paddingTop ${index * liHeight}px;ul.style.paddingBottom ${(totalHeight - (index 20) * liHeight)}px;// 生成可视区数据for (let i 0; i showCount; i) {const li document.createElement(li);li.textContent ${index i};fragment.appendChild(li);}// 重新设置元素这里元素并没有考虑复用ul.innerHTML ;ul.appendChild(fragment); }generateLi();scrollBox.addEventListener(scroll, generateLi);多嘴一句当前元素可以滚动才有 scrollTop 值否则一直为 0。比如当前元素固定了高度但是它的子元素的高度超出了它的高度就会导致溢出这是我们可以设置 overflow-y: auto当前元素就会有滚动条。 而 scrollTop 就是当前元素的顶部与它的子元素的顶部的距离没有负值。 2. 参考 参考文献 面试官如何一次性渲染十万条数据 - 掘金 (juejin.cn)
http://www.hkea.cn/news/14411753/

相关文章:

  • 天津城市建设网站电子口岸网站做资料库
  • 网站流量少怎么做做网站专题页的字大小是多少钱
  • 找人做网站一套多少钱wordpress php允许上传文件大小
  • 微信公众平台 网站开发企业做网站能赚钱么
  • 遂宁建设机械网站wordpress 技术 主题
  • 网站建设布局怎么搭建自己的网站卖货
  • 网站建设分工方案石家庄网页设计培训班
  • 设计好的建设网站第一次做网站没头绪
  • android网站客户端开发牛商网股票代码
  • 瑞幸咖啡网站建设方案重庆vr制作
  • 长沙建设企业网站苏州企业网站建站
  • iis 没有右键网站属性怎么找拉新推广平台
  • 网站建设餐饮wap浏览器在线
  • 个性定制网站个人做电影网站违法吗
  • 网站架构设计师有哪些学校可以报考电子工程王牌专业
  • 苗木网站什么做莱芜都市网征婚
  • 企业网站程序源码建设部网站2015年第158号
  • 河南做网站的费用wordpress 重置插件
  • 上网建立网站布置北京校园文化设计公司
  • 做地税电子签章的网站广汉做网站
  • 美丽乡村 村级网站建设广州 网站优化
  • 网站哪个好用图片类网站建设
  • 网站建设先做后付费问题不大工作室 网站
  • 长春哪家网站做的好网页seo
  • wordpress激活码注册seo的范畴是什么
  • 网站配色案例分析内蒙古建设住房与城乡厅官方网站
  • 网站做授权登录界面怎样更新网站快照
  • 如何注册网站域名备案=> wordpress 翻译 不显示
  • 鹿邑网站设计公司凡客诚品网站设计特点
  • 域名注册之后如何建设网站做一个手机购物网站多少钱