不再犹豫
分享是一种美德

npm更换最新淘宝镜像

wangtong阅读(340)

新电脑重新部署环境,然后安装nodejs,习惯性的查看一下淘宝镜像源,结果看到以下信息,由于长时间重心放在H5项目中没有太多关注这个,导致现在才发现!

原淘宝npm域名即将停止解析,请切换至新域名 npmmirror.com

http://npm.taobao.org和 http://registry.npm.taobao.org 将在 2022.06.30 号正式下线和停止 DNS 解析。

新域名为 npmmirror.com, 相关服务域名切换规则请参考:

http://npm.taobao.org => http://npmmirror.com
http://registry.npm.taobao.org => http://registry.npmmirror.com

修改镜像方法一:

npm config set registry https://registry.npmmirror.com

修改镜像方法二:使用阿里定制的cnpm命令行工具代替默认的npm,输入以下代码

 npm install -g cnpm --registry=https://registry.npmmirror.com

安装成功之后,以后安装依赖包的方式和npm的是一样的,只是npm的命令换成是cnpm就可以了。

然后检查是否更换:

npm config get registry

如果不再使用淘宝镜像恢复原官网镜像,命令如下:

npm config set registry https://registry.npmjs.org

每次操作更换命令切记一定要检查一遍是否更换成功!以上方法为永久更换镜像一般也是推荐永久更换,毕竟经常性开发的话还是比较方便的!

学无止境,

欢迎大家关注公众号:

面试题目自练习20221221

wangtong阅读(301)

1、解释csssprites,如何使用?

CSSSprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background-repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。

CSSSprites为一些大型的网站节约了带宽,让提高了用户的加载速度和用户体验,不需要加载更多的图片

2、如何用原生js给一个按钮绑定两个onclick事件?

Varbtn=document.getElementById(‘btn’);

//事件监听绑定多个事件

varbtn4=document.getElementById("btn4");

btn4.addEventListener("click",hello1);

btn4.addEventListener("click",hello2);

function hello1(){

    alert("hello1");

}

function hello2(){

    alert("hello2");

}

3、Vuex 和 localStorage 的区别?

  1. 最重要的区别:vuex 存储在内存中localstorage 则以文件的方式存储在本地,只能存储字符串类型的数据,存储对象需要 JSON 的 stringify 和parse 方法进行处理。读取内存比读取硬盘速度要快。
  2. 应用场景 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vuex 用于组件之间的传值。localstorage 是本地存储,是将数据存储到浏览器的方法,一般是在跨页面传递数据时使用 。 Vuex 能做到数据的响应式,localstorage 不能。
  3. 永久性 刷新页面时 vuex 存储的值会丢失,localstorage 不会。注意:对于不变的数据确实可以用 localstorage 可以代替vuex,但是当两个组件共用一个数据源(对象或数组)时,如果其中一个组件改变了该数据源,希望另一个组件响应该变化时,localstorage无法做到,原因就是区别 1。

4、浏览器如何渲染网页?

  1. 解析HTML生成DOM树 – 渲染引擎首先解析HTML文档,生成DOM树
  2. 构建Render树 – 接下来不管是内联式,外联式还是嵌入式引入的CSS样式会被解析生成CSSOM树,根据DOM树与CSSOM树生成另外一棵用于渲染的树-渲染树(Render tree),
  3. 布局Render树 – 然后对渲染树的每个节点进行布局处理,确定其在屏幕上的显示位置
  4. 绘制Render树 – 最后遍历渲染树并用UI后端层将每一个节点绘制出来

解析HTML文件,创建DOM树,自上而下,如果遇到样式(link、style)与脚本(script)都会阻塞

5、输入url后发生了什么?

  1. DNS域名解析
  2. 建立TCP连接(三次握手)
  3. 发送HTTP请求
  4. 服务器处理请求,返回响应结果
  5. 关闭TCP连接(四次挥手)
  6. 浏览器解析HTML渲染页面,构建DOM树

学无止境,

欢迎大家关注公众号:

面试题目自练习20221208

wangtong阅读(168)

1、结尾处加空div标签clear:both

原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度

优点:简单、代码少、浏览器支持好、不容易出现怪问题

缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好

2、0.3 + 0.2 === 0.5,对吗?不对

JavaScript的计算存在精度丢失问题

  • 原因:JavaScript中小数是浮点数,需转二进制进行运算,有些小数无法用二进制表示,所以只能取近似值,所以造成误差
  • 解决方法:
    • 先变成整数运算,然后再变回小数
    • toFixed() 性能不好,不推荐

3、父级div定义伪类:after和zoom

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题

优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)

缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持

4、父级div定义overflow:hidden

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度

优点:简单、代码少、浏览器支持好

缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

5、Ajax、Axios、Fetch有啥区别?

  • Ajax:是对XMLHttpRequest对象(XHR)的封装
  • Axios:是基于Promise对XHR对象的封装
  • Fetch:是window的一个方法,也是基于Promise,但是与XHR无关,不支持IE

学无止境,

欢迎大家关注公众号:

面试题目自练习20221207

wangtong阅读(148)

1、写一个左中右布局占满屏幕,其中左右两块是固定宽度200,中间自适应宽,要求先加载中间块,请写出结构及样式

<div id="left">我在左边</div>

<div id="center">我在中间</div>

<div id="right">我在右边</div>
html,body{
    margin:0;
    width:100%;
}

#left,#right{
    width:200px;
    height:200px;
    background-color:aqua;
    position:absolute;
}
#left{
    left:0;
    top:0;
}
#right{
    right:0;
    top:0;
}
#center{
    margin:0 200px;
    background-color:blue;
    height:200px;
}

或者利用弹性盒子

<style>
    *{
        margin:0;
        padding:0;
    }
    html,body{
 
        height:100%;
    }
    body{
        display:flex;
    }
    .left{
        width:100px;
        background-color:rgb(199,170,223);
    }
    .center{
        background-color:rgb(151,228,148);
        flex:1;
    }
    .right{
        width:100px;
        background-color:rgb(199,170,223);
    }
</style>
<body>

    <div class="left">我在左边</div>

    <div class="center">我在中间</div>

    <div class="right">我在右边</div>

</body>

2、为什么typeof null 是object?

不同的数据类型在底层都是通过二进制表示的,二进制前三位为000则会被判断为object类型,

而null底层的二进制全都是0,那前三位肯定也是000,所以被判断为object

3、HTTP和HTTPS的基本概念

http:是一个客户端和服务端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的超文本传输协议。

https:是以安全为目标的HTTP通道,即HTTP下加入SSL层进行加密。其作用是:建立一个信息安全通道,确保数据的传输,确保网站的真实性。

补充:SSL是洋文“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。

4、阐述清楚浮动的几种方式(常见问题)

(1)父级div定义height

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。

优点:简单、代码少、容易掌握

缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

(2)父级div定义overflow:hidden

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度

优点:简单、代码少、浏览器支持好

5、cookie、sessionStorage、localStorage的区别

相同点:都是在开发中用到的临时存储客户端会话信息或者数据的方法

不同点:

(1)存储的时间有效期不同

  • cookie的有效期是可以设置的,默认的情况下是关闭浏览器后失效
  • sessionStorage的有效期是仅保持在当前页面,关闭当前会话页或者浏览器后就会失效
  • localStorage的有效期是在不进行手动删除的情况下是一直有效的

(2)存储的大小不同

  • cookie的存储是4kb左右,存储量较小,一般页面最多存储20条左右信息
  • localStorage和sessionStorage的存储容量是5Mb(官方介绍,可能和浏览器有部分差异性)

(3)与服务端的通信

  • cookie会参与到与服务端的通信中,一般会携带在http请求的头部中,例如一些关键密匙验证等。
  • localStorage和sessionStorage是单纯的前端存储,不参与与服务端的通信

学无止境,

欢迎大家关注公众号:

H5页面代码更新,微信端打开存在缓存解决办法

wangtong阅读(1511)

H5页面代码更新,小程序的H5页面还是显示旧的,这是怎么回事?

这是因为微信端的页面缓存:

1、HTML缓存,查看响应的http是否有设置缓存时间,这个是本地缓存。

2、如经过CDN,检查CDN配置的静态缓存时间

3、缓存是基于URL进行的,所以上面都有说到URL+参数进行,但别忽略了页面里面引用资源的链接,如果要强制更新同步也要加上

下面来说说解决办法:

第一种:css、js文件动态添加版本号或者是参数值

例如:添加时间戳:


    <script type="text/javascript">  
        document.write("<link rel='stylesheet' type='text/css' href='css/style.css?v="+new Date().getTime()+"'>");   
    </script>

第二种:HTML添加标签缓存设置

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

第三种:手动清理(不推荐、不友好)

安卓:debugx5.qq.com,勾选Cookie,文件缓存两项,进行清除即可。

ios:退出微信重新登录即可清除缓存。

学无止境,

欢迎大家关注公众号:

_this和this的区别

wangtong阅读(638)

_this只是在包含多个回调函数的时候能够有效的区分父级this和子级this:

function(){
    this.father
    ……
    const __this = this;
    button.addEventListener("click", function(e) {
        __this.Name  //指父方法
 
        this.son  //子方法
    }
 
}

_this只是一个变量名,this代表父函数,如果在子函数还用this,this的指 向就变成子函数了,_this就是用来存储指向的

普通函数中的this表示调用此函数时的对象,箭头函数里面的this会继承自外部的this,普通函数中的this并不会向上继续找对象,箭头函数中会往上寻找this,直到找到所代表的this为止

学无止境,

欢迎大家关注公众号:

站长网站统计方式推荐

wangtong阅读(934)

网站访问量统计是指通过各种科学的方法,准确的记录来访问某一页面的访问者的流量信息。做网站访问统计对于网站运营是非常重要的,掌握用户信息能帮助站长根据用户需求来调整网站的内容,做好和制定相应的营销策略,以达到提升转化率和流量的效果。那么网站访问量统计如何查询呢?

最火爆、最时兴的方式是应用第三方的工具,以百度统计、友盟统计、51la这三家居多,然后是Google的工具等国外的。 早在今年3月份,友盟+就宣布了将停止提供免费的网站统计分析服务的消息。从2022年5月10日起,U-Web不再提供免费新建站点,仅为付费账号提供创建站点能力。所以接下来站长只能去选择使用百度统计,可惜下面是惊喜哦!

百度也发布了相应公告“基础统计报告对于分析云站点最早查询时间将调整为2年,其余站点最早查询时间调整为1年”等升级,“事件分析”功能也即将下线,改为收费的“分析云”服务。

那站长们该何去何从呢?

不要着急,咱们还有51la统计:

51la联手数百位站长,收集大量用户建议,推出的V6版本,在功能、用户体验及性能方面进行了升级,相比之前的版本更加精准。大家可以试用一下!

【51LA网站统计V6】新人注册立得5元现金收益~现在加入“优站计划”,还有额外收益赚取,点击链接了解详情 https://invite.51.la/1O3dre18F?target=V6

 

学无止境,

欢迎大家关注公众号:

【转载】js自定义多字段排序【收藏】

wangtong阅读(716)

  • 多字段同时排序在后端很好实现,直接order by field1 asc, field2 asc,field3 desc…
  • 如下可实现在前端按照多字段同时排序:
//测试数据
var items = [
{name:"linc",age:28,num:1234},
{name:"linc",age:28,num:12345},
{name:"kiki",age:20,num:12345},
{name:"高峰",age:26,num:123},
{name:"高峰",age:27,num:101},
{name:"高峰",age:26,num:111},
{name:"安迪",age:29,num:110},
{name:"安迪",age:30,num:110}
];

//两个字段一升一降排序
(function asc-desc(){
items.sort(function (a, b) {
return SortByProps(a, b, { "name": "ascending", "age": "descending" });
});
console.log(items)
})();
//两个字段都降序排序,其他排序方向同理,也可再加字段
(function desc(){
items.sort(function (a, b) {
return SortByProps(a, b, { "name": "descending", "age": "descending" });
});
console.log(items)
})();
//不定义排序方向和字段,默认都升序排列
(function default(){
items.sort(function (a, b) {
return SortByProps(a, b);
});
console.log(items)
})();

//以下函数排序属性并未写死,可直接拿去用自定义属性
function SortByProps(item1, item2, obj) {
var props = [];
if(obj){
props.push(obj)
}
var cps = []; // 存储排序属性比较结果。
// 如果未指定排序属性(即obj不存在),则按照全属性升序排序。
// 记录下两个排序项按照各个排序属性进行比较得到的结果 
var asc = true;
if (props.length < 1) {
for (var p in item1) {
if (item1[p] > item2[p]) {
cps.push(1);
break; // 大于时跳出循环。
} else if (item1[p] === item2[p]) {
cps.push(0);
} else {
cps.push(-1);
break; // 小于时跳出循环。
}
}
} 
else {
for (var i = 0; i < props.length; i++) {
var prop = props[i];
for (var o in prop) {
asc = prop[o] === "ascending";
if (item1[o] > item2[o]) {
cps.push(asc ? 1 : -1);
break; // 大于时跳出循环。
} else if (item1[o] === item2[o]) {
cps.push(0);
} else {
cps.push(asc ? -1 : 1);
break; // 小于时跳出循环。
}
}
}
}

// 根据各排序属性比较结果综合判断得出两个比较项的最终大小关系
for (var j = 0; j < cps.length; j++) {
if (cps[j] === 1 || cps[j] === -1) {
return cps[j];
}
}
return false; 
}

 

学无止境,

欢迎大家关注公众号:

本文转载自:本文链接:https://blog.csdn.net/zsl_955200/article/details/78796531,转载目的仅限于自己学习!

 

微信URL带来重大调整-跳转的解决方法

wangtong阅读(1086)

为确保小程序链接合理使用,自 2022 年 4 月 11 日起,URL Scheme 和 URL Link (以下统称为 “链接” )接口能力规则将进行以下调整:

  1. 每个 URL Scheme 或 URL Link 有效期最长 30 天,均不再支持永久有效的链接、不再区分短期有效链接与长期有效链接;
  2. 链接生成后,若在微信外打开,用户可以在浏览器页面点击进入小程序。每个独立的链接被用户访问后,仅此用户可以再次访问并打开对应小程序,其他用户无法再次通过相同链接打开该小程序;
  3. 单个小程序每天生成链接数(URL Scheme 和 URL Link 总数)上限为 50 万条。

以上内容来源自  小程序链接生成与使用规则调整公告官方

对于这次调整,我们要从微信站外为我们的微信小程序进行推广,其难度是直线上升。推广本来就很已经相对来说很困难了,现在又出来这一重大调整,微信小程序推广该何去何从???

如果进行大批量推广的话,微信公众平台后台url生成工具已经不能满足需求了,所以只能使用另外一种方法:中转页

用户在访问中转页的时候请求url链接生成接口为用户分配链接,这样就可以避免链接失效的发生。

链接生成接口调整请参照官方文档小程序链接生成与使用规则调整公告官方

 

欢迎大家关注公众号:

微信公众号被关注自动回复消息中添加超链接和小程序链接方法

wangtong阅读(4983)

目前因为小程序的商业价值不断增强和与公众号的紧密关联性,很多商家都选择在注册公众号的同时,去将小程序与公众号关联,来拓展自己的推广渠道。目前小程序可以通过关联公众号实现公众号介绍页展示、模板消息推送、菜单栏跳转、图文小程序卡片、公众号文章内的小程序卡片、小程序卡片推送、落地页广告等等。无缝连接形成直接高效的宣传方式,帮助小程序获取巨大流量。今天就来介绍其中小程序关联公众号的场景,被关注回复里点击跳转小程序。

登陆 微信公众平台网站(https://mp.weixin.qq.com/),点击左侧导航功能->自动回复->被添加自动回复,可设置的文字/语音/图片/视频/为被添加自动回复内容。

然后添加链接的方式就是选择文本,放入a标签,小程序链接代码如下:

<a data-miniprogram-appid="小程序appid" data-miniprogram-path="落地页">点击进入小程序</a>

超链接方法一样,代码如下:

<a href="要打开的网址">我是一个网址,点击我打开网址</a>

 

欢迎大家关注公众号: