首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
34
篇与
的结果
2023-12-07
JavaScript的64位浮点数
JavaScript的64位浮点数一、JavaScript的64位浮点数 JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。 所以,1与1.0是相同的,是同一个数。1 === 1.0 // true这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。0.1 + 0.2 === 0.3// false0.3 / 0.1// 2.9999999999999996二、IEEE754 浮点数标准的制定背景 早期人们提出浮点数定义时,每个计算机厂商会定义自己的浮点数规则,不同厂商对同一个数表示出的浮点数是不一样的。这就会导致,一个程序在不同厂商下的计算机中做浮点数运算时,需要先转换成这个厂商规定的浮点数格式,才能再计算,这也必然加重了计算的成本。于是,1985年,IEEE 组织推出了浮点数标准,就是我们经常听到的 IEEE754 浮点数标准,这个标准统一了浮点数的表示形式,并提供了 2 种浮点格式:单精度浮点数 float:32 位,符号位 s 占 1 bit,指数 e 占 8 bit,小数数 f 占 23 bit双精度浮点数 float:64 位,符号位 s 占 1 bit,指数 e 占 11 bit,小数 f 占 52 bit三、JavaScript浮点数在内存中的结构根据国际标准IEEE 754 ,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的:第一部分(蓝色):用来存储符号位(sign),第1位:符号位,0表示正数,1表示负数第二部分(绿色):用来存储指数(exponent),第2位到第12位(共11位):指数部分第三部分(红色):用来存储小数(fraction),第13位到第64位(共52位):小数部分(即有效数字) 符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。四、 64位浮点数表示数字的公式浮点数是采用科学计数法来表示一个数字的,它的格式可以写成这样:(-1)^s f 2^e符号部分 -1 or 1 f的范围为1<=f<2 使用52位表示指数有正有负,指数位长度为11比特,所以能表示的数字范围为0~2047假设我们将十进制数 25.125 转换为浮点数,转换过程就是这样的(D代表十进制,B代表二进制):整数部分:25(D) = 11001(B)小数部分:0.125(D) = 0.001(B)用二进制科学计数法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)所以符号位 s = 0,小数 f = 1.001001(B) = 001001(去掉1,隐藏位),指数 e = 4+1023(中间值) = 1027(D) = 10000000011(B)。按照内存结构中浮点数定义的规则,填充到 64 bit 上。五 、52位为什么可以表示53位小数(精度)IEEE754规定小数部分第一位隐含为1,不写,因为所有二进制第一个有效数字都是1。所以加上省略的1位,精度位数是 53 bit。所以在 0 ~ 2^53 内的整数都是有效数字,算上第1位符号位,就可以得到 -2^53 ~ 2^53 都是有效数字。六、浮点数能精确表示的范围Math.pow(2,53) - 1 // 最大 Number.MAX_SAFE_INTEGER // 常数表示- (Math.pow(2,53) - 1) // 最大 Number.MIN_SAFE_INTEGER // 常数表示七、Number的MAX_VALUE我们知道了 js 中数的表示方法,那么他能表示的最大的数是多少呢,聪明的你肯定会想到是下面这个数:0 11111111111 1111111111111111111111111111111111111111111111111111但是,这种情况在 IEEE754 标准中表示 NaN,最大的数其实是:0 11111111110 1111111111111111111111111111111111111111111111111111转换成二进制的科学计数法表示如下:1.1111111111111111111111111111111111111111111111111111 * 2^(2046 - 1023)= 1.1111111111111111111111111111111111111111111111111111 * 2^1023= 11111111111111111111111111111111111111111111111111111 * 2^971= (2^53 - 1) * 2^971= 1.7976931348623157e+308我们在浏览器调试窗口里面验证下:(Math.pow(2, 53) - 1) * Math.pow(2, 971) // 1.7976931348623157e+308(Math.pow(2, 53) - 1) * Math.pow(2, 971) === Number.MAX_VALUE // true八、Number的MAX_SAFE_INTEGERMAX_SAFE_INTEGER 表示在 JavaScript 中最大的安全整数。所谓的安全,就是大于这个数的整数不一定可以精确表示。他的值其实是 2^53 - 1,表示成二进制为:0 10000110100 1111111111111111111111111111111111111111111111111111表示成二进制的科学计数法为:1.1111111111111111111111111111111111111111111111111111 * 2^52= 11111111111111111111111111111111111111111111111111111比这个数大一的数为:100000000000000000000000000000000000000000000000000000= 1.00000000000000000000000000000000000000000000000000000 * 2^53在计算机中表示成:0 10000110101 0000000000000000000000000000000000000000000000000000 0注意到我们省去掉了一位,按照向偶舍入的规则,不会产生进位。所以这个数还是可以精确表示的,没有问题。我们再来看看比 MAX_SAFE_INTEGER 大二的数:100000000000000000000000000000000000000000000000000001= 1.00000000000000000000000000000000000000000000000000001 * 2^53在计算机中表示成:0 10000110101 0000000000000000000000000000000000000000000000000000 1注意到我们省去掉了一位,按照向偶舍入的规则,还是不会产生进位。这个时候就有问题了,这个数跟刚才那个数竟然是相等的,我们来验证下:const a = Number.MAX_SAFE_INTEGERa + 1 === a + 2 // true所以,在进行大数的相关运算的时候要小心了,最好是使用 BigInt 类型。
2023年12月07日
8 阅读
0 评论
0 点赞
2023-12-07
什么是css初始化
什么是css初始化CSS初始化是指重设浏览器的样式。因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。每次新开发网站或新网页时候通过初始化CSS样式的属性,为我们将用到的CSS或html标签更加方便准确,使得我们开发网页内容时更加方便简洁,同时减少CSS代码量,节约网页下载时间。css初始化的好处:提高编码质量初始化CSS为我们节约网页代码,节约网页下载时间;还会使得我们开发网页内容时更加方便简洁,不用考虑很多。 如果不初始化,整个页面做完会很糟糕,重复的css样式很多。我们在开发比较复杂的网页时候就不会知道自己是否已经设置了此处的CSS属性,是否和前面的CSS属性相同,是否统一整个网页的风格和样式。(学习视频分享:css视频教程)最简单的初始化方法就是: * {padding: 0; margin: 0;} 。有很多人也是这样写的。这确实很简单,但有人就会感到疑问:*号这样一个通用符在编写代码的时候是快,但如果网站很大,CSS样式表文件很大,这样写的话,他会把所有的标签都初始化一遍,这样就大大的加强了网站运行的负载,会使网站加载的时候需要很长一段时间。我们可以直接使用下面的代码初始化css。 css初始化代码:/*css 初始化 */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img { margin:0; padding:0; } fieldset, img,input,button { border:none; padding:0;margin:0;outline-style:none; } ul, ol { list-style:none; } input { padding-top:0; padding-bottom:0; font-family: "SimSun","宋体";} select, input { vertical-align:middle; } select, input, textarea { font-size:12px; margin:0; } textarea { resize:none; } img {border:0; vertical-align:middle;} table { border-collapse:collapse; } body { font:12px/150% Arial,Verdana,"\5b8b\4f53"; color:#666; background:#fff } .clearfix:before,.clearfix:after{ content:""; display:table; } .clearfix:after{clear:both;} .clearfix{ *zoom:1;/*IE/7/6*/ } a{color:#666; text-decoration:none; } a:hover{color:#C81623;} h1,h2,h3,h4,h5,h6{text-decoration:none;font-weight:normal;} s,i,em{font-style:normal;text-decoration:none;} .col-red{color: #C81623!important;} /*公共类*/ .w{ width: 1210px;margin:0 auto; } .fl { float:left } .fr { float:right } .al { text-align:left } .ac { text-align:center } .ar { text-align:right } .hide { display:none }各大网站CSS初始化代码集合CSS初始化可以简单快速的实现常用标签的属性设定,尽量减少各浏览器之间的兼容性问题1、百度 CSS初始化 https://www.baidu.com统一初始化 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin: 0; padding: 0 } html { color: #000; overflow-y: scroll; overflow: -moz-scrollbars } body, button, input, select, textarea { font: 12px arial } h1, h2, h3, h4, h5, h6 { font-size: 100% } em { font-style: normal } small { font-size: 12px } ul, ol { list-style: none } a { text-decoration: none } a:hover { text-decoration: underline } legend { color: #000 } fieldset, img { border: 0 } button, input, select, textarea { font-size: 100% } table { border-collapse: collapse; border-spacing: 0 } img { -ms-interpolation-mode: bicubic } textarea { resize: vertical } 其他常用CSS样式 .left { float: left } .right { float: right } .overflow { overflow: hidden } .hide { display: none } .block { display: block } .inline { display: inline } .error { color: #F00; font-size: 12px } label, button { cursor: pointer } .clearfix:after { content: '\\20'; display: block; height: 0; clear: both } .clearfix { zoom: 1 } .clear { clear: both; height: 0; line-height: 0; font-size: 0; visibility: hidden; overflow: hidden } .wordwrap { word-break: break-all; word-wrap: break-word } .s-yahei { font-family: arial, 'Microsoft Yahei', '微软雅黑' }2、腾讯首页 CSS初始化 http://www.qq.com统一初始化body, dd, dl, fieldset, form, h1, h2, h3, h4, h5, h6, input, legend, ol, p, select, td, textarea, th, ul { margin: 0; padding: 0 } body { font: 12px SimSun, "Arial Narrow", HELVETICA; background: #fff; -webkit-text-size-adjust: 100% } a { color: #172c45; text-decoration: none } a:hover { color: #cd0200; text-decoration: underline } em { font-style: normal } li { list-style: none } img { border: 0; vertical-align: middle } table { border-collapse: collapse; border-spacing: 0 } p { word-wrap: break-word }其他常用CSS样式.ind { text-indent: 2em } .ind10 { text-indent: 10px } .noborder { border: 0 } .Q-red a, a.Q-red { color: #bd0a01 !important } .Q-black a, a.Q-black { color: #000 !important } .Q-bold { font-weight: 700 !important } .Q-pList ul:after, .Q-pList:after, .Q-tList ol:after, .Q-tList ul:after, .Q-tList:after, .Q-tpList ul:after, .Q-tpList:after, .Q-tpWrap:after, .bd:after, .cf:after, .ft:after, .hd:after, .layout:after { content: ""; display: table; clear: both } .Q-pList, .Q-pList ul, .Q-tList, .Q-tList ol, .Q-tList ul, .Q-tpList, .Q-tpList ul, .Q-tpWrap, .bd, .cf, .ft, .hd, .layout { *zoom: 1 } .chief, .fl, .layout .fl { float: left; display: inline } .extra, .fr, .layout .fr { float: right; display: inline } .fn { font-weight: 700 }3、360官网 CSS初始化 https://www.360.cn统一初始化td, body, th, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { padding: 0 } body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { margin: 0 } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400 } ul, ol { list-style: none }4、微博官网 CSS初始化 https://weibo.com统一初始化body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { margin: 0; padding: 0; } table { border-collapse: collapse; border-spacing: 0; } fieldset, img { border: 0; } address, caption, cite, code, dfn, em, th, var, i { font-style: normal; font-weight: normal; } ol, ul { list-style: none; } caption, th { text-align: left; } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; }其他常用CSS样式q:before, q:after { content: ''; } a:focus { outline-style: none; } abbr, acronym { border: 0; font-variant: normal; } sup { vertical-align: text-top; } sub { vertical-align: text-bottom; } input, textarea, select { font-family: inherit; font-size: inherit; font-weight: inherit; *font-size: 100%; } textarea { resize: none } input::-ms-clear { display: none; } body { font: 12px/1.3 Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; overflow-x: hidden; color: #333; -webkit-font-smoothing: antialiased; } ::selection { background: #eb7350; color: #fff; } :focus { outline-color: #eb7350; } 5、淘宝官网 CSS初始化 https://www.taobao.com统一初始化blockquote, body, button, dd, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul { margin: 0; padding: 0 } body, button, input, select, textarea { font: 12px/1.5 tahoma, arial, 'Hiragino Sans GB', '\\5b8b\\4f53', sans-serif } h1, h2, h3, h4, h5, h6 { font-size: 100% } address, cite, dfn, em, var { font-style: normal } code, kbd, pre, samp { font-family: courier new, courier, monospace } small { font-size: 12px } ol, ul { list-style: none } a { text-decoration: none } a:hover { text-decoration: underline } sup { vertical-align: text-top } sub { vertical-align: text-bottom } legend { color: #000 } fieldset, img { border: 0 } button, input, select, textarea { font-size: 100% } table { border-collapse: collapse; border-spacing: 0 } button { border-radius: 0; }6、京东官网 CSS初始化 https://www.jd.com统一初始化 * { margin: 0; padding: 0 } em, i { font-style: normal } li { list-style: none } img { border: 0; vertical-align: middle } button { cursor: pointer } a { color: #666; text-decoration: none } a:hover { color: #e33333 } button, input { font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\5B8B\4F53, sans-serif } body { -webkit-font-smoothing: antialiased; background-color: #fff; font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\5B8B\4F53, sans-serif; color: #666 } 其他常用样式.hide, .none { display: none } .clearfix:after { visibility: hidden; clear: both; display: block; content: "."; height: 0 } .clearfix { *zoom: 1 }参考链接https://www.php.cn/faq/473405.htmlhttps://blog.csdn.net/heart_is_broken/article/details/126331482
2023年12月07日
11 阅读
0 评论
0 点赞
2023-12-07
css的4种引入方式--内联样式(标签内style)、内部样式表(<style>)、外部样式表(<link>、@import)
1.内联样式(Inline Styles):可以直接在HTML元素的style属性中定义CSS样式。例如:<p style="color: red; font-size: 16px;">这是一段红色的文本</p>内联样式适用于对单个元素应用特定的样式,但不适合用于整个网页或多个元素的样式定义。2.内部样式表(Internal Style Sheets):可以在HTML文档的标签中使用<style>标签定义CSS样式。例如:<head> <style> p { color: red; font-size: 16px; } </style> </head> <body> <p>这是一段红色的文本</p> </body>内部样式表适用于在单个HTML文档中定义样式,可以应用于多个元素。3.外部样式表(External Style Sheets):可以将CSS样式定义保存在一个独立的CSS文件中,并在HTML文档中通过<link>标签(链接式)或者@import指令(导入式)引入。通过<link>标签引入(最常用方式)例如:<head> <link rel="stylesheet" href="styles.css"> </head> <body> <p>这是一段红色的文本</p> </body>在这种方式下,CSS样式定义保存在名为styles.css的外部文件中,可以被多个HTML文档共享。这样做可以提高代码的可维护性和可重用性。通过@import指令引入@import指令是CSS语言的一部分,使用时把这个指令添加到HTML的一个<style>标签中;要与外部的CSS文件关联起来,得使用url而不是href,并且要把路径放在一个圆括号里面;<html> <head> <style type="text/css"> @import url(css/styles.css); </style> <!--此处的type属性是针对HTML4.01的,若在HTML5中则不需要加--> </head> <body> ...... </body> </html通过外部样式表,你可以在同一个CSS文件中定义多个样式规则,并将其应用于不同的HTML元素。以上是CSS的主要引入方式,开发人员可以根据具体需求选择适合的方式。通常情况下,推荐使用外部样式表,因为它提供了最好的可维护性和灵活性。两种方式的区别标签属于html标签,而@import是css提供的一种方式,标签不仅可以引入css,还可以做其他事,而@import只能引入css;加载顺序的区别:当一个页面被浏览时,link引入的css会被同步加载,而@import引用的css是等到其他元素全被下载完之后才被加载;兼容性的不同:@import是CSS2.1才提出的,所以只有在IE5以上才支持,低版本的浏览器不支持,而标签无此问题;当使用javascript控制DOM去改变样式时,只能使用标签,因为@import不是DOM可以控制的。参考链接https://zhuanlan.zhihu.com/p/658723834https://www.cnblogs.com/zhaoyingli/p/5379990.html
2023年12月07日
12 阅读
0 评论
0 点赞
2023-11-21
前端懒加载
前端懒加载一、什么是懒加载?什么预加载?概念:懒加载 也叫做延迟加载、按需加载,指的是在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。 有的网站图片很多,而如果一上来就加载所有的图片,会导致网页加载很慢; 图片懒加载:等图片正式进入到可视区中时,才加载对应的图片,否则不请求图片预加载 指的是将所需的资源提前请求加载到本地,这样后面在需要用到时就直接从缓存取资源。通过预加载能够减少用户的等待时间,提高用户的体验。我了解的预加载的最常用的方式是使用 js 中的 image 对象,通过为 image 对象来设置 scr 属性,来实现图片的预加载。懒加载和预加载的区别区别:两者的行为是相反的,预加载是提前加载,懒加载是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。意义:懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。预加载:预加载可以说是牺牲服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的反映。网站正常加载和预加载预加载则是指在用户访问网站之前,网站会提前加载一些可能会用到的文件,以提高用户体验和页面加载速度。这些文件可能是网站的核心资源,或者是用户可能会访问的页面的文件,例如首页的图片、CSS 文件等。预加载可以通过一些技术手段来实现,比如使用预加载标签 预加载资源。网站正常加载是按需加载,而预加载则是提前加载可能会用到的文件,以提高用户体验。二、图片懒加载的基本实现图片的加载是由src引起的,当对src赋值时,浏览器就会请求图片资源。根据这个原理,我们使用HTML5的data-xxx属性来储存图片的路径,在需要加载图片的时候,将data-xxx中图片的路径赋值给src,这样就实现了图片的按需加载,即懒加载。注意:data-xxx中的xxx可以自定义,这里我们使用data-src来定义。懒加载的实现重点在于确定用户需要加载哪张图片,在浏览器中,可视区域内的资源就是用户需要的资源。所以当图片出现在可视区域时,获取图片的真实地址并赋值给图片即可。<div class="container"> <img src="loading.gif" data-src="pic.png"> <img src="loading.gif" data-src="pic.png"> <img src="loading.gif" data-src="pic.png"> <img src="loading.gif" data-src="pic.png"> <img src="loading.gif" data-src="pic.png"> <img src="loading.gif" data-src="pic.png"> </div> <script> var imgs = document.querySelectorAll('img'); function lozyLoad(){ var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; var winHeight= window.innerHeight; for(var i=0;i < imgs.length;i++){ if(imgs[i].offsetTop < scrollTop + winHeight ){ imgs[i].src = imgs[i].getAttribute('data-src'); } } } window.onscroll = lozyLoad(); </script> 三、Intersection Observer实现图片懒加载Intersection Observer是HTML5新增的API,可以用来实现图片懒加载。MDN中对Intersection Observer的解释IntersectionObserver接口 (从属于Intersection Observer API) 提供了一种异步观察目标元素与其祖先元素或顶级文档视窗(viewport)交叉状态的方法。祖先元素与视窗(viewport)被称为根(root)当一个IntersectionObserver对象被创建时,其被配置为监听根中一段给定比例的可见区域。一旦IntersectionObserver被创建,则无法更改其配置,所以一个给定的观察者对象只能用来监听可见区域的特定变化值;然而,你可以在同一个观察者对象中配置监听多个目标元素。这里封装一个组件并且自定义一个v-lazy属性,然后替换到src上,实现懒加载。import { useIntersectionObserver } from "@vueuse/core"; import defaultImg from '@/assets/images/200.png' import { App } from 'vue'; export default { install(app: App) { // 全局指令 app.directive('lazy', { // mounted 是 v3 中自定义指令的生命周期,他会被自动调用 // 它表示的含义和组件的mounted是一样的 // el是 dom 元素, binding mounted(el, binding) { el.src = defaultImg console.log('lazy', el, binding.value); //实时鉴定el是否可见, 如果可见 给它的src设置binding.value const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => { if (isIntersecting) { el.src = binding.value stop() el.onerror = function () { el.src = defaultImg } } }) } }) } } <img v-lazy="item.picture" alt=""/>四. 延迟加载视频图片和视频这类静态资源资源占比都最大。与图片一样,视频同样可以延迟加载,来达到优化性能的目的。正常情况下加载视频,使用的是 video 标签,那么对于一些需要由用户自己播放的视频,最好指定video标签的preload属性为none,这样浏览器就不会预加载任何视频数据。为了占用空间,使用poster属性为video占位。如下:<video controls preload="none" poster="replace.jpg"> <source src="main.webm" type="video/webm"> <source src="main.mp4" type="video/mp4"> </video>五. 使用第三方延迟加载库除了上面介绍的一些延迟加载方法之外,还可以借助一些已经封装好的第三方库,下面是一些成熟的第三方库: lozad.js 是超轻量级且只使用 Intersection Observer 的库, 因此它的性能极佳,但如果要在旧版本浏览器上使用,则需要配置polyfill。 lazysizes 是功能全面的延迟加载库,其使用的模式与本文所示的代码示例非常相似,会自动与元素上的lazyload 类绑定,然后在data-src 和/或 data-srcset 属性中指定图像网址,该库还可以通过许多插件进行扩展,执行延迟各种资源等操作。 如果使用React,可以使用 react-lazyload来进行图片懒加载操作,这个库是React图片懒加载的主流解决方案。
2023年11月21日
34 阅读
0 评论
0 点赞
2023-08-29
Linux:安装npm
Linux:安装npm1、下载安装包wget http://nodejs.org/dist/v0.10.25/node-v0.10.25.tar.gz版本根据自己需要进行选择。2、安装gccyum install gcc openssl-devel gcc-c++ compat-gcc-34 compat-gcc-34-c++3、解压nodetar -xf node-v0.10.25.tar.gz3、进入node目录cd node-v0.10.254、配置目录./configure --prefix=/usr/local/node5、安装npmmake && make install6、加入链接ln -s /usr/local/node/bin/* /usr/sbin/7、测试时候安装成功node -v npm -v8、切换淘宝镜像: npm set registry 镜像网址npm set registry https://r.cnpmjs.org/
2023年08月29日
11 阅读
0 评论
0 点赞
1
2
3
4
...
7