Author: admin

如何优雅地使用 Stack Overflow?

 

stackoverflow作为全球最大的技术问答网站,可以说每个搞过技术的人是必上的网站。

作为出入技术的人,我强烈建议学会使用,并习惯使用这个网站。

stackoverflow网站地址:

Stack Overflow

从我个人使用的经历来聊聊:如何更好的使用stackoverflow。

1.使用英文搜索

这是个英文网站,很多问题和回答都是英文的,所以首先养成用英文来搜索你的问题。

比如你在遇到这样一个问题:python 列表如何删除元素?

这时候你就可以像下面这样搜索答案,然后在搜索结果中慢慢寻找符合你问题的答案。

到这里,估计会有人会提出一个新的问题:我不会英文怎么办?

不会英文也没关系,你可以在电脑上安装个有道词典,不懂的地方翻译下。学英文没那么难,不用专门花时间去学,每天多用自然就会了。

2.如何精确定位你的问题

你只需要下面3步就可以提高搜索到问题的答案:

1)第1步:你使用的编程语言是什么

永远在输入问题关键词的时候先输入你使用的是哪种编程语言,这样可以很好的定位对应的编程语言的问题。

2)第2步:定位你在做什么事情中遇到了问题。
例如我曾经在使用数据分析工具Anaconda的过程中碰到了安装包装不上的问题。描述这件事情的英文单词是:Anaconda install pacakge
3)第3步:复制错误信息
一定要详细看你写代码或者安装软件过程中的报错信息,务必把报错信息的关键信息输入。例如我在使用Anaconda安装pandas的过程中报了下面的错误信息:

分析这个报错信息,我发现是上面图中红色框的关键内容,我就可以把这个报错信息复制下来。

做好上面3步以后,我就有了上面3个步骤的关键词,最后提问的问题也是这3个关键词的组合,简单吧:

上面举得例子,可以说是搜索任何问题的一个通用方法.

 

JS的Session操作

在PHP服务器端,有Session和Cookie的概念,在JS端,也有相对应的Session和Cookie的概念。 JS的Cookie,可以利用cookie.js来完成相应的操作。
具体可以看 Cookie.js实现保存用户名和密码操作(四) 一章。 session时使用sessionStorage . Storage表示存储的意思。

一. 设置值

sessionStorage.setItem(key,value);

设置元素的值, setItem. 类似于服务器端的setAttribute();

二.得到值

var data=sessionStorage.getItem(key);

类似于服务器端的getAttribute();方法

三. 删除值

sessionStorage.removeItem(key);

类似于服务器端的removeAttribute() 方法.

四.清除Session中所有的值

sessionStorage.clear();

类似于服务器端的 session.invalidate();

五.用途

有的时候,将值放置在JS中,当刷新页面的时候,会重新刷新一下JS,那么设置的值就又回到了原始的值。 如果不想这样,可以将这个值放置在JS的session中。 用sessionStorage来进行相应的设置。

谢谢!!!

sessionStorage详解

sessionStorage可以使用setItem设置、getItem获取、removeItem删除、clear清空。具体详见MDN

MDN解释

sessionStorage 属性允许你访问一个 session Storage 对象。它与 localStorage 相似,不同之处在于 localStorage 里面存储的数据没有过期时间设置,而存储在 sessionStorage 里面的数据在页面会话结束时会被清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。**在新标签或窗口打开一个页面时会在顶级浏览上下文中初始化一个新的会话,**这点和 session cookies 的运行方式不同。

可以看到sessionStorage在页面会话结束时会被清除,也就是讲一个页面上的sessionStorage在页面刷新或者恢复页面的时候都不会丢失或者被清空。

那一个域名下的sessionStorage 的数据会在同一网站的多个标签页之间共享吗?要解决这个问题,使用chrome测试了一下场景。

当在一个a页面有sessionStorage时,这时新增一个标签并输入与a页面相同的url。新的标签里面打开的页面是没有另一个标签页面里面的sessionStorage时。也就是讲,新标签是新的会话。

_blank: 在a页面点击链接或者使用window.open打开与a页面相同url的标签页面时,新标签页面sessionStorage继承自之前页面的sessionStorage,但是后续两个页面的sessionStorage是单独控制的。两个页面之间并无关联

结论

  1. 不同tab之间就算相同url,sessionStorage也是不会共享的。sessionStorage只存在于当前会话中。
  2. 使用window.open或者点击链接跳转的页面,新页面的sessionStorage会拷贝老页面的。但两者之间并无关联,还是两个会话。

参考

https://html.spec.whatwg.org/multipage/browsers.html#top-level-browsing-context

https://liyaoli.com/2015-03-12/HTML-iframe.html

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

https://github.com/lmk123/blog/issues/66

https://segmentfault.com/a/1190000016910121

js 实现sleep函数的几种方式

sleep函数作用是让线程休眠,等到指定时间在重新唤起。
方法一:这种实现方式是利用一个伪死循环阻塞主线程。因为JS是单线程的。所以通过这种方式可以实现真正意义上的sleep()。
function sleep(delay) {
  var start = (new Date()).getTime();
  while ((new Date()).getTime() - start < delay) {
    continue;
  }
}

function test() {
  console.log('111');
  sleep(2000);
  console.log('222');
}

test()

 

方法二:定时器

function sleep1(ms, callback) {
                setTimeout(callback, ms)
            }
            //sleep 1s
            

Chrome调试WebSocket

var ws = new WebSocket('ws://localhost:9222/devtools/page/3c5c05fa-80b7-4cfe-8d1d-ebe79a7a5730');

ws.onopen= function() {

ws.send('{"id": 1, "method": "Page.navigate", "params": {"url": "https://www.fangdushi.com"}}')

};

ws.onmessage= function(evt) {

console.log('Received a message from the server!'+evt.data);

};

api文档地址https://chromedevtools.github.io/devtools-protocol/1-2