如何将数字改为千分符且保留两位小数显示?toLocaleString()和toFixed(2)踩坑

news2025/7/5 19:36:27

前言

基于现代Web前端框架的应用,其原理是通过浏览器向服务器发送网络请求,获取必要的index.html和打包好的JS、CSS等资源,在浏览器内执行JS,动态获取数据并渲染页面,从而将结果呈现给用户。在这个过程中,有两个步骤可能较为耗时,一个是网络资源的加载,另一个是浏览器内代码执行和DOM渲染。而耗时的增加会导致页面响应慢,卡顿,影响用户体验,针对上述两种耗时的情况,常见的优化方向有:

  • 缩短请求耗时;
  • 减少重排重绘;
  • 改善JS性能。

下面讲一下如何减少重排重绘:

减少重排重绘

除了网络资源以外,另一个影响前端性能的因素就是前端页面的渲染绘制效率。

虽然不同的前端框架有一些差异,但整体的优化思路是一致的比如下面的优化方案:

将 CSS 放在页面顶部,js放到底部

我们研究雅虎网页性能时发现把样式表移到 里会让页面更快。这是因为把样式表移到 里允许页面逐步渲染。

关注性能的前端工程师希望页面被逐步渲染,这时因为,我们希望浏览器尽早渲染获取到的任何内容。这对大页面和网速慢的用户很重要。给用户视觉反馈,比如进度条的重要性已经被大量研究和记录。在我们的情况中,HTML 页面就是进度条。当浏览器逐步加载页面头部,导航条,logo 等等,这些都是给等待页面的用户的视觉反馈。这优化了整体用户体验。

把样式表放在文档底部的问题是它阻止了许多浏览器的逐步渲染,包括 IE。这些浏览器阻止渲染来避免在样式更改时需要重绘页面元素。所以用户会卡在白屏。

脚本会阻塞并行下载,HTTP/1.1 官方文档建议浏览器每个主机名下并行下载的组件数不要超过两个,如果图片来自多个域名,并行下载的数量就可以超过两个。如果脚本正在下载,浏览器就不开始任何其它下载任务,即使是在不同域名下的。

有时候,并不容易把脚本移动到底部。举个例子,如果脚本是用 document.write 插入到页面内容中的,就没办法再往下移了。还可能存在作用域问题,在多数情况下,这些问题都是可以解决的。

一个常见的建议是用推迟(deferred)脚本,有 DEFER 属性的脚本意味着不能含有 document.write,并且提示浏览器告诉他们可以继续渲染。不幸的是,Firefox 不支持 DEFER 属性。在 IE 中,脚本可能被推迟,但不尽如人意。如果脚本可以推迟,我们就可以把它放到页面底部,页面就可以更快地载入。

避免使用 CSS 表达式

CSS 表达式是强大的(可能也是危险的)设置动态 CSS 属性的方法。IE5 开始支持,IE8 开始不赞成使用。例如,背景颜色可以设置成每小时轮换:

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" ); 

表达式的问题在于它们的评估频率高于大多数人的预期。它们不仅在页面呈现和调整大小时进行重新计算,而且在页面滚动时甚至在用户将鼠标移动到页面上时进行计算。在 CSS 表达式中添加计数器可以让我们跟踪 CSS 表达式的计算时间和频率。在页面上移动鼠标可以轻松计算超过 10,000 次。

使用外部 JavaScript 和 CSS

在现实环境中使用外部文件通常会产生较快的页面,因为 JavaScript 和 CSS 有机会被浏览器缓存起来。对于内联的情况,由于 HTML 文档通常不会被配置为可以进行缓存的,所以每次请求 HTML 文档都要下载 JavaScript 和 CSS。所以,如果 JavaScript 和 CSS 在外部文件中,浏览器可以缓存它们,HTML 文档的大小会被减少而不必增加 HTTP 请求数量。

决定是否使用外部文件的关键在于被缓存的外部文件占请求的 HTML 文档数的比重。如果网站用户在每次会话中进行多次页面访问,同时页面重用了多个脚本和样式表,使用外部文件时很好的选择。

对于大多数网站而言,难以精确度量以判断是否使用内联或外部文件,此时建议是使用外部文件的方式。对于这个问题的一个例外是网站主页,由于主页对于响应时间要求更高,因此更加倾向于内联而不是外部文件。

对于内联文件而言,由于无法利用浏览器缓存,因此给人感觉依然比较低效。我们可以通过加载后下载和动态内联的方式来使得网站主页既可以获得内联的优势,同时也能缓存外部文件。

减少渲染量

总体原则:不渲染未展示的部分

常用工具:

  • react-window
  • react-loadable
  • JS原生,如IntersectionObserver
  • 框架提供,如React.lazy、react-intersection-observer

常用方法:

  • 虚拟列表:只渲染可见区;
  • 惰性加载:无限滚动;
  • 按需加载:页面只在切换过去时才加载。

减少 DOM 元素数量

从以下几个角度考虑移除不必要的标记:

是否还在使用表格布局? 塞进去更多的

仅为了处理布局问题?也许有更好、更语义化的标记。 能通过伪元素实现的功能,就没必要添加额外元素,如清除浮动。 浏览器控制台中输入以下代码可以计算出页面中有多少 DOM 元素:

为什么不使用表格布局?

  • 更多的标签,增加文件大小;
  • 不易维护,无法适应响应式设计;
  • 性能考量,默认的表格布局算法会产生大量重绘

减少渲染次数

总体思路:避免重复的渲染。

常用工具:

  • lodash
  • JS或框架自带

常用方法:

  • 防抖与节流;
  • 对于React函数组件来说,合理使用副作用,拆分无关联的副作用;
  • 对于React类组件来说,可以使用shouldComponentUpdate或使用PureComponent来优化渲染;
  • 利用缓存,如React.memo;
  • 使用requestAnimationFrame替代setInterval执行动画。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

【java学习】 static

文章目录成员变量static 工具类static 代码块设计模式继承重写成员变量 1.成员变量的分类和访问分别是什么样的? 静态成员变量(有static修饰,属于类、加载一次,可以被共享访问),访问格式 类名.静态成员变量(推荐) 对…

R语言七天入门教程六:文件相关操作

R语言七天入门教程六:文件相关操作 一、文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作。在R语言中,用到最多的文件格式是csv…

Carla安装记录

Carla安装记录 最近打算在做一些自动驾驶相关的东西,所以安装了一下Carla。在这里记录一些自己的安装过程中遇到的一些问题和解决的方法。 Carla release版本下载 想要安装Carla,可以选择release版本或者源码安装。在这里我主要介绍release版本的安装…

Vue3、vite项目页面自适应配置(postcss-plugin-px2rem、amfe-flexible)

文章目录前言:vite 如何处理 csspostcss项目配置下载相关包配置方案一方案二(备选方案)相关资料链接前言:vite 如何处理 css vite 天生就支持对css文件的直接处理 关于预处理器 ☀️目前,在工程化开发中,使…

AcWing-C/C++语法基础【合集2】

5.字符串 每个常用字符都对应一个-128~127的数字 ,二者之间可以相互转化: (int)97 , (char)a 常用ASCII值:’A’-‘Z’ 是65~90,’a’-‘z’是97-122,’0’-‘9’是 48-57 字符可以参与运算,运算时会将其当…

2022年11月编程排行榜

2022年11月Tiobe编程排行榜已更新,研一的生涯也快结束,来看一下本月各大编程语言有何新进展: 目录:11月编程排行榜一、榜单情况二、榜单简单的分析一、榜单情况 这里只展示排名靠前的前15名: TOP 10编程语言TIOBE指数…

播放视频出现错误代码0xc00d36c4如何修复?

相信很多用户都遇到过视频无法播放的问题。比如将重要视频从旧电脑拷到U盘上,使用另一台电脑播放时,提示视频播放错误代码0xc00d36c4,不支持该视频播放。 其实,视频无法播放的问题是很常见的,不少用户将相机或者手机上…

机器学习的初学术语掌握

机器学习:让一个模型能够通过数据调优自己,后续的数据可以通过模型获得更贴近真实的结论数据集:也叫样本,可以简单理解为一个个对象构建成的集合训练样本:构建的数据集中的一部分被拿来训练模型的子集标记:…

计算机网络面试题

1. TCP建⽴连接的过程。 三次握⼿: 1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认; 2. 第⼆次握⼿(服务器返回synack包给客户端):服务器端…

Js逆向教程-08跟值技巧

Js逆向教程-08跟值技巧 一、加密函数最有可能出现在哪里? 一般不会出现在jquery成熟的第3仓库里面。 jquery是封装好的成熟的第3仓库,一般不会去修改它。 因为如果jquery版本提升了,还要去改jquery。 一般会出现在自己写的js代码中&#x…

LabVIEW性能和内存管理 3

LabVIEW性能和内存管理 3 本文介绍LabVIEW性能和内存管理的几个建议3。 显示缓冲区分配。 “显示缓冲区分配”工具位于工具>配置文件>显示缓冲区分配 In Place优化例程。对波形数组的每个元素进行操作 下面是如何使用ShowBuffer allocation工具提高性能的示例。从层次…

HashMap的面试题

目录 1、底层数据结构 1.7和1.8有何不同 2、为什么用红黑树,为何不一上来就树化,树化阈值为何是8,何时会树化,何时会退化为链表 3、索引如何计算?hashCode都有了,为何还要提供hash()方法?数组…

综合实验——高级网络应用检测

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 综合实验 实验要求 三层交换机配置 三层交换机一 三层交换机…

教程详解从照片到倾斜摄影模型、影像地形点云的成果输出,网页端Web发布展示

一、数据获取 需要自己在下面网址中下载相应数据,获取the island of Torbjrnskjr,下载后,共计200张带pos的jpg照片,存储到纯英文目录下 国外Sensefly共享的航拍数据 包括数据原片、分辨率介绍、覆盖范围,飞行高度、照…

Linux-实操篇8-shell脚本编写

一、shell是什么 二、shell脚本如何执行 2.1 新建一个shell脚本 ## 第一步新建一个shell脚本 vim aaa.sh ## 内容如下,#!/bin/bash 表示shell脚本的执行协议,必须要写 #!/bin/bash echo "hello word!!!"2.2 执行方式 方式一:先给…

R语言中的函数19:openxlsx::read.xlsx(), write.xlsx(), writeData(), writeDataTable()

文章目录read.xlsx()函数介绍实例writeData()和writeDataTable()函数介绍实例write.xlsx()函数介绍实例read.xlsx()函数介绍 read.xlsx(xlsxFile,sheet,startRow 1,colNames TRUE,rowNames FALSE,detectDates FALSE,skipEmptyRows TRUE,skipEmptyCols TRUE,rows NULL,c…

Oracle技术分享 卸载grid软件

如果grid软件安装失败,可能需要重新安装,这时候紧紧删除软件是解决不了问题的,还需要删除grid的配置信息,需要安装软件的原因各式各样。 1 资源无法启动。 2 root.sh执行失败。 1 如果执行root.sh失败,可以删除&#x…

相似度系列8:unify-BARTSCORE: Evaluating Generated Text as Text Generation

BARTSCORE: Evaluating Generated Text as Text Generation 这篇文章是用生成模型解决问题,根据生成模型中输入和输出的差别,代表不同的评测方面。 不足:针对不同的任务选择bart score的输入和输出?different input and output co…

Allegro 172版本自动放置层叠

Allegro 172版本自动放置层叠 Allegro 172版本支持自动放置层叠,无需手动绘制,效果如下图 具体操作步骤如下 选择Manufacture-选择Cross Section Chart命令 会出现一个对话框 常用参数介绍如下 Chart Unit 是层叠单位 Maximun Chart height 是层叠的高度 X-Scale Factor…

预约挂号项目之预约挂号模块

目录一、预约挂号详情1、需求分析2、api接口2.1 、controller代码:2.2 、Service类接口:2.3 、添加service接口实现:学习指南: https://www.zhihu.com/question/351439302/answer/2362637429?utm_id0 一、预约挂号详情 1、需求…