- mac 关闭端口:
ps -ef|grep mysqld”
sudo lsof -i :8100
sudo kill -9 8100
- npm 清理缓存
npm cache clean -f
-
- 控制台输出到 txt
C:\你输入的命令 >output.txt
第一步:打开 iphone 手机的开发者模式,流程是:【设置】->【Safari】->【高级】->开启【Web 检查器】
第二步:打开 Mac 上 Safari 的开发者模式,流程是【Safari】->【偏好设置】->【高级】->【在菜单栏中显示“开发”菜单】勾选
第三步:用数据线将 iphone 手机和 mac 连接起来,在电脑的 safari 中按照流程执行:【开发】->【手机名称】->【正在调试的网站】
git subtree push --prefix .vuepress/dist origin gh-pages
* []() ![Github stars](https://img.shields.io/github/stars/Snailclimb/JavaGuide.svg)
npm link 不用安装依赖
- npm link的使用 npm unlink xxx
npm publish 个人不允许发布@xxx/yyy这种名字的包 要加 npm publish --access public
, 这里的xxx还必须和我们的用户名相同
mac 录屏 使用 qq 提供的录屏工具 ctrl+command+r,或者 quicktime
https://qiye.163.com/help/client-profile.html
https://zhidao.baidu.com/question/1604321182206045747.html
如果你用的是 Chrome,只需几步,快速测试性能:
打开开发者工具 按 Command+Shift+P (Mac) or Control+Shift+P (Windows, Linux) 来打开命令菜单 输入 render,下拉框中选择 Show Rendering。 点击 render 页签,FPS Meter 前打钩。 滚动列表
生成证书 // openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -keyout 密钥.pem -out 证书.pem
使用ssh-keygen
生成私钥id_rsa
和公钥id_rsa.pub
(目录为~/.ssh
)
把id_rsa.pub
放到服务器(或 github)上
TODO:不明白 session key 是什么时候生成的
- ssh 到服务器
- 服务器会用
公钥
加密一段信息, - 如果我们的电脑能用
私钥
解密出来,然后再用session key
加密返回给服务器, - 服务器用
session key
解密后发现是自己原来发送的信息那么就建立连接,此后的信息都用session key
加密传送
// 未免密的情况
- ssh 到服务器
- 服务器发来 Host Key,
- 我们确认
- 服务器与我们协商生成
session key
(用 DH 算法) - 服务器要求我们输入密码
- 我们输入密码,用
session key
加密发给服务器 - 服务器用
session key
解密后,发现密码正确,允许登录 - 此后我们与服务器之间的所有消息都通过
session key
加密
// 免密登录
- ssh 到服务器,我们用 Private Key 生成签名向服务器发起登录请求
- 服务端验证签名,检查自己有没有和这个签名匹配的 Public Key,如果有,则进入下一步。
- 服务端生成一串随机字符串,用 Public Key 加密后发送给客户端
- 客户端用相应的 Private Key 解密这串字符串,再使用 MD5 hash 和 Session Key 加密该字符串,将结果发送给服务端。
- 服务端使用同样的 MD5 hash 和 Session Key 计算这串字符的加密结果,并和客户端发来的结果做比对,如果结果一样,则允许客户端登录。
在.ssh 目录下
- ssh-keygen -t rsa -C "[email protected]"
- ssh-add ~/.ssh/id_rsa
- 复制.pub 到 GitHub
可能是以下原因
- 没勾选 Proxy -> macOS Proxy,勾选上 macOS Proxy
- 浏览器装的插件拦截了
- 不支持对应的协议,如 https http2 等需要另外配置
需要在iterm2离source
打开面板,输入install code安装
https://www.cnblogs.com/dongliu/p/5782329.html
function getTiming() {
try {
var timing = performance.timing;
var timingObj = {};
var loadTime = (timing.loadEventEnd - timing.loadEventStart) / 1000;
if(loadTime < 0) {
setTimeout(function() {
getTiming();
}, 0);
return;
}
timingObj['重定向时间'] = (timing.redirectEnd - timing.redirectStart);
timingObj['DNS 解析时间'] = (timing.domainLookupEnd - timing.domainLookupStart);
timingObj['TCP 完成握手时间'] = (timing.connectEnd - timing.connectStart);
timingObj['HTTP 请求响应完成时间'] = (timing.responseEnd - timing.requestStart);
timingObj['DOM 开始加载前所花费时间'] = (timing.responseEnd - timing.navigationStart);
timingObj['DOM 加载完成时间'] = ((timing.domComplete || timing.domLoading) - timing.domLoading);
timingObj['DOM 结构解析完成时间'] = (timing.domInteractive - timing.domLoading);
timingObj['总体网络交互耗时,即开始跳转到服务器资源下载完成时间'] = (timing.responseEnd - timing.navigationStart);
timingObj['可交互的时间'] = (timing.domContentLoadedEventEnd - timing.domContentLoadedEventStart);
timingObj['首次出现内容'] = (timing.domLoading - timing.navigationStart);
timingObj['onload 事件时间'] = (timing.loadEventEnd - timing.loadEventStart);
timingObj['页面完全加载时间'] = (timingObj['重定向时间'] + timingObj['DNS 解析时间'] + timingObj['TCP 完成握手时间'] + timingObj['HTTP 请求响应完成时间'] + timingObj['DOM 结构解析完成时间'] + timingObj['DOM 加载完成时间']);
for(item in timingObj) {
console.log(item + ":" + timingObj[item] + '(ms)');
}
console.log(performance.timing);
} catch(e) {
console.log(performance.timing);
}
}
getTiming()