;

0.引言 作为互联网项目,最重要的便是用户体验。在举国“互联网+”的热潮中,用户至上也已经被大多数企业所接收,特别是在如今移动端快速发展的时代,我们的网页不仅只是呈现在用户的PC浏览器里,更多的时候,用户是通过移动产品浏览我们的网页。加之有越来越多的开发者投入到Web APP和Hybrid APP的开发队伍中,性能这一问题又再一次被提上了程序员们重点关注的要素。我曾经看到过这样一句话:一个网站的体验,决定了用户是否愿意去了解网站的功能;而网站的功能,决定了用户是否会一票否决网站的体验。这是改版自网络上的一句流行语,但却把网站性能这件事说的十分透彻,特别是在网站这样的项目中,如果一个用户需要超过5s才能看见页面,他会毫不犹豫地关闭它。性能优化,作为工程师界的“上乘武功”,是我们在开发中老生常谈的话题,也是一名开发者从入门向资深进阶的必经阶段,虽然我们看到过很多的标准、军规,但在真正实践中,却常常力不从心,不知道落下了什么,不知道性能是否还有进一步优化的空间。 对于网站的性能,在行业内有很多既定的指标,但就以前端er而言,我们应该更加关注以下指标:白屏时间、首屏时间、整页时间、DNS时间、CPU占用率。而我之前自己搭建的一个网站(网址:http://jerryonlyzrj.com/resume/ ,近日因域名备案无法打开,几日后即恢复正常),完…

网站性能优化实战——从12.67s到1.06s的故事 2020年1月6日
;

商业周期(Business cycle):也称经济周期、商业循环、景气循环, 它是指经济运行中周期性出现的经济扩张与经济紧缩交替更迭、循环往复的一种现象。 四阶段:繁荣、衰退、萧条、复苏

商业周期理论 2019年12月16日
;

unpkg是一个快速的全球内容交付网络,适用于npm上的所有内容。 语法:unpkg.com/:package@:version/:file 例子: 使用固定版本: unpkg.com/react@16.7.0/umd/react.production.min.js unpkg.com/react-dom@16.7.0/umd/react-dom.production.min.js 使用version范围 unpkg.com/react@^16/umd/react.production.min.js 如果省略文件路径(即使用“裸”URL),则unpkg将提供unpkg字段指定的文件,或者回退到。 package.json main unpkg.com/jquery 在URL的末尾附加一个以查看包中所有文件的列表。 unpkg.com/lodash/

unpkg的cdn引用 2019年12月11日
;

setTimeout(function(){console.log(1)},0); new Promise(function(resolve){ console.log(2) for( var i=0 ; i<10000 ; i++ ){ i==9999 && resolve() } console.log(3) }).then(function(){ console.log(4) }); console.log(5); // 答案是 2 3 5 4 1 // 而不是 2 3 5 1 4 event loop 的概念 Javascript是单线程的,所有的同步任务都会在主线程中执行。 当主线程中的任务,都执行完之后,系统会 “依次” 读取任务队列里的事件。与之相对应的异步任务进入主线程,开始执行。 异步任务之间,会存在差异,所以它们执行的优先级也会有区别。大致分为 微任务(micro task,如:Promise、MutaionObserver等)和宏任务(macro task,如:setTimeout、setInterval、I/O等)。 Promise 执行器中的代码会被同步调用,但是回调是基于微任务的。 宏任务的优先级高于微任务 每一个宏任务执行完毕都必须将当前的微任务队列清空 第一个 script 标签的代码是第…

promise和setTimeout执行顺序 2019年12月5日
;

大家好,我是国平,我做流量已经有16年了。 2010年之前主要在阿里巴巴国际站负责免费流量增长,把海外B2B免费流量的日UV做到几百万。后来成立了一家乙方公司叫光年实验室(以前叫杭州光年),是携程、阿里云等40多家主流的大型互联网公司的流量顾问。另外这些年也没少折腾其他项目,其中做过电商(外贸独立B2C网站)、 做过电商系统(类似有赞)、 做过移动端APP (社交方向)。 来“群响”这段时间,只要能参加的聚会都参加了,听过大家分享很多非常有意思的流量玩法。先不说不同行业的“隔行如隔山”,就是在流量领域,可能有很多种细分领域,大家之间的资讯都是隔离得很厉害的。流量的渠道和玩法是永远在变的,不过也有一些不变的东西,如平台和内容创造者的博弈、大家仰视平台的心态(其实没必要)、以及各种流量玩法的底层模式等。 我首先分享的是过去一个很主流的流量渠道——搜索引擎,看看在现在这个移动互联网时代和新媒体时代,搜索引擎还能如何获取流量。 第一个议题:现在是否还值得做搜索引擎营销 结论是:值得做,不过如果不了解现在国内百度的现状生态,99%的人ROI一定会很差的。至于海外的Google,它依然是大部分人的第一大流量来源。 首先说为什么值得做。 大家可能不知道的是,在搜索引擎,也是65%以上的流量来自移动端,所以不要认为搜索引擎是PC流量的代表。百度的DAU是没有…

我以前在阿里巴巴的流量方法论 2019年12月5日
;

1.安装 $ npm install express –save 2.index.js const express = require(‘express’) const app = express() app.get(‘/’, (req, res) => res.send(‘Hello World!’)) app.listen(3000, () => console.log(‘Example app listening on port 3000!’)) 3.Express 应用程序生成器 官网教程执行npm install express-generator -g 控制台会提示The program ‘express’ is currently not installed. You can install it by typing: apt-get install node-express 改用命令 apt-get install node-express express –version //查看版本 express –view==pug myapp //app目录下生成一个项目目录 cd myapp //进入目录 npm i //安装依赖 node app //运行项目 浏览器输入 host:3000,报错`!!!` i…

express入门 2019年11月29日
;

1.安装 npm install –save sequelize npm install –save mysql2 2.Sequelize 中 Model 的数据类型对应MySQL中的数据类型 Sequelize.STRING // VARCHAR(255) 类型:字符串 最大值: 65535个字符 Sequelize.STRING(1234) // VARCHAR(1234) 类型:变长 最大值: 65535个字符 Sequelize.TEXT // TEXT 类型:字符串 最大值:65535个字符 Sequelize.TEXT(‘tiny’) // TINYTEXT 类型:字符串 最大值:255个字符 Sequelize.INTEGER // INTEGER 类型:整型 最大值:范围(-2147483648~2147483647) Sequelize.BIGINT // BIGINT 类型:整型 最大值:范围(+-9.22*10的18次方) Sequelize.BIGINT(11) // BIGINT(11) 类型:整型 最大值:范围(+-9.22*10的18次方) Sequelize.FLOAT // FLOAT 类型:单精度浮点型 8位精度(4字节) Sequelize.FLOAT(11) // FLOAT(11) 类型:单精度浮…

Sequelize教程 2019年11月29日
;

第一步,将此单元格设置为“自动换行” 第二步,在代码中需要换行的位置输入 “\n”

通过代码生成的excel文件中内容如何换行? 2019年11月28日
;

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 – (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存使用 cat /proc/swaps 显示哪些swap被使用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 罗列 PCI 设备 lsusb -tv 显示 USB 设备 date 显示系统日期 cal 2007 显示2007年的日历表 date 041217002007.00 设置日期和时间 – 月日时分年.秒 clock -w 将时间修改保存到 BIOS 关机 (系统的关机、重启以及登出 ) shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0…

Linux常用命令大全 2019年11月25日
;

1、把文件解压到当前目录下 unzip test.zip 2、如果要把文件解压到指定的目录下,需要用到-d参数。 unzip -d /temp test.zip 3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数 unzip -n test.zip unzip -n -d /temp test.zip 4、只看一下zip压缩包中包含哪些文件,不进行解压缩 unzip -l test.zip 5、查看显示的文件列表还包含压缩比率 unzip -v test.zip 6、检查zip文件是否损坏 unzip -t test.zip 7、将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件 unzip -o test.zip -d /tmp/

解压unzip用法 2019年11月25日
;

this.$message.closeAll()

element关闭message 2019年11月24日
;

1.问题描述 默认情况,v-html中的class并不生效 2.原因 scoped属性导致css仅对当前组件生效(用css3的属性选择器+生成的随机属性实现的),而html绑定渲染出的内容可以理解为是子组件的内容,子组件不会被加上对应的属性,所以不会应用css.解决的话把scoped属性去掉就行了 2.解决方案 类名前添加>>> 参考链接:https://blog.csdn.net/weixin_42412046/article/details/80804285

vue中v-html使用样式 2019年11月22日
;

if(req.headers.origin == config.allowOrigin.int || req.headers.origin == config.allowOrigin.ext){ res.header("Access-Control-Allow-Origin", req.headers.origin); res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("Access-Control-Allow-Credentials", true); //可以带cookies res.header("Content-Type", "application/json; charset=utf-8") res.header("X-Powered-By", ‘3.2….

Access-Control-Allow-Origin设置多个域名 2019年11月17日
;

一.路由懒加载 path:’index’, component:resolve=>require(@/abc,resolve) 二.引入外部CDN 1.src/main.js 各种import部分不变,css部分可以注释掉 2.build/webpack.base.conf.js output同级添加externals output:{}, externals:{ ‘vue’:’Vue’, ‘element-ui’:’ELEMENT’, ‘moment’:’moment’, ‘validator’:’validator’ } 注意事项: 1).cdn 版本的 element-ui 设置的全局变量是 ELEMENT 2).如果单独引入Element会报错,因为Element依赖Vue,vue.js需要在element-ui之前引入,所以vue.js也要改为cnd的引入方式 3.index.html <body> <div id="app"></div> <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script> <script src="http…

vue打包后文件体积及加载速优化 2019年11月17日
;

config文件夹下放置不同环境的配置文件 export NODE_ENV=’default’

node切换环境变量 2019年11月16日
;

1.https://blockflats.com/ 2.https://github.com/greatghoul/remote-working 3.https://www.clouderwork.com/?from=wap

远程办公 2019年11月10日
;

1.子元素中checkbox绑定的v-model属性如果在初始化时候没有值,会导致后面值无法选中,所以如果checkbox绑定的值为后期添加,就需要在list渲染之前进行添加

element checkbox 全选功能失效 2019年11月9日
;
ngnix命令 2019年11月8日
;

1.问题描述 chrome和edge都正常,ie11中打开一片空白,控制台报错 2.处理步骤 安装babel-polyfill问题依旧 所有的函数写法fn(){}改为fn:function(){}问题依旧 main.js中挨个注释所有的第三方组件发现是一个库导致

vue2项目在ie11中显示空白 2019年11月8日
;

<el-date-picker v-model="due_date" type="date" size="small" value-format="yyyy-MM-dd" :picker-options="pickerOptions0" placeholder="pick date"> </el-date-picker> 1.今日以后 pickerOptions0: { disabledDate(time) { return time.getTime() < Date.now() – 8.64e7 } } 2.前一个月 pickerOptions0: { disabledDate(time) { const lastMonthTime = new Date().setMonth(new Date().getMonth() – 1) return time.getTime() > Date.now() || time < lastMonthTime } } 3.后一个月 pickerOptions0: { disabledDate(time) { const lastMonthTime…

element时间选择,今日以后,今日前后一个月 2019年11月6日
;

Compliance testing

服从性测试 2019年11月6日
;

1. Doctype   目前,兼容性最好的Doctype是XHTML 1.0 Strict,事实上Gmail和Hotmail会删掉你的Doctype,换上这个Doctype。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">  <head>   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   <title>HTML Email编写指南</title>   <meta name="viewport" content="width=device-width, initial-scale=1.0"/>  </head> </html&gt…

html email 2019年11月5日
;

1.安装 npm install pm2 -g 后续执行pm2始终提示’command not found’ 执行whereis pm2查看安装位置,发现有多处软链接,逐个删除 sudo rm -rf /usr/bin/pm2 sudo rm -rf /usr/local/bin/pm2 为确保环境干净,同时删除pm2 npm uninstall pm2 -g 再次执行npm install pm2 -g 然后再执行whereis pm2无任何信息输出 whereis node发现node位置为 同时发现pm2被安装在了/usr/local/bin下并且文件夹名字很奇怪` 类似这样符号加空格,猜测此为安装过程中的临时文件 图片中红框中为pm2的安装路径,文件夹名称为何如此奇怪 无奈之下放弃使用全局安装,直接在/usr/local/bin下执行npm install pm2 接下来设置软链接ln -s /usr/local/bin/node_modules/pm2/bin/pm2 /usr/local/bin 参考链接: https://segmentfault.com/q/1010000014016820 https://blog.csdn.net/d597180714/article/details/82619735…

pm2进程管理 2019年11月5日
;

1. function sleep(duration) { return new Promise(function(resolve, reject) { console.log("b"); setTimeout(resolve,duration); }) } console.log("a"); var s = sleep(2000); setTimeout(function(){console.log("wait")},2000); s.then(()=>console.log("c")); 来源:https://blog.csdn.net/nana_9457/article/details/88224472 2. (function test(){ setTimeout(function(){ console.log(4); },0) new Promise(function(resolve){ console.log(1); for(var i=0;i<1000;i++){ i==999&&resolve(); } console.log(2) }).then(function(){ console.log(5) }); conso…

promise与setTimeout的执行顺序 2019年10月28日