Shopify Free Trial Apply
Shopify 60天试用
Shopify 14天试用
WordPress

WordPress

WordPress建站及WordPress SEO相关话题
Shopify

Shopify

Shopify建站及Shopify SEO相关话题
Google SEO

Google SEO

Google SEO相关话题
SEM

SEM

SEM相关话题
SNS 社媒营销

SNS 社媒营销

讨论SNS社交媒体营销话题
Zoho

Zoho

Zoho SAAS相关产品使用话题讨论
EDM

EDM

讨论Email Marketing相关话题
隽永东方售后服务

隽永东方售后服务

隽永东方售后服务专区

火遍美国的小诗《纽约比加州时间早3个小时》:

休闲娱乐East_Digi_Marketing 发表了文章 • 0 个评论 • 4643 次浏览 • 2018-04-13 15:20 • 来自相关话题

火遍美国的小诗《纽约比加州时间早3个小时》:

纽约时间比加州时间早三个小时

New York is 3 hours ahead of California,

但加州时间并没有变慢

but it does not make California slow

有人22岁就毕业了

Someone graduated at the age of 22

但等了五年才找到好的工作

but waited 5 years before securing a good job

有人25岁就当上CEO

Someone became a CEO at 25

却在50岁去世

and died at 50

也有人迟到50岁才当上CEO

While another became a CEO at 50

然后活到90岁

and lived to 90 years

有人依然单身

Someone is still single

同时也有人已婚

while someone else got married

奥巴马55岁就退休

Obama retires at 55

川普70岁才开始当总统

but Trump starts at 70

世上每个人本来就有自己的发展时区

Absolutely everyone in this world

works based on their Time Zone

身边有些人看似走在你前面

People around you

might seem to go ahead of you

也有人看似走在你后面

some might seem to be behind you

但其实每个人在自己的时区有自己的步程

But everyone is running their own RACE

in their own TIME

不用嫉妒或嘲笑他们

Don’t envy them or mock them

他们都在自己的时区里,你也是

They are in their TIME ZONE

and you are in yours!

生命就是等待正确的行动时机

Life is about waiting for the right moment to act

所以,放轻松

So, RELAX

你没有落后

You’re not LATE

你没有领先

You’re not EARLY

在命运为你安排的属于自己的时区里

一切都准时

You are very much ON TIME

and in your TIME ZONE Destiny set up for you

所以, 先别忙着焦虑被同龄人抛弃,因为你们说不定还不在一个时区...... 查看全部
火遍美国的小诗《纽约比加州时间早3个小时》:

纽约时间比加州时间早三个小时

New York is 3 hours ahead of California,

但加州时间并没有变慢

but it does not make California slow

有人22岁就毕业了

Someone graduated at the age of 22

但等了五年才找到好的工作

but waited 5 years before securing a good job

有人25岁就当上CEO

Someone became a CEO at 25

却在50岁去世

and died at 50

也有人迟到50岁才当上CEO

While another became a CEO at 50

然后活到90岁

and lived to 90 years

有人依然单身

Someone is still single

同时也有人已婚

while someone else got married

奥巴马55岁就退休

Obama retires at 55

川普70岁才开始当总统

but Trump starts at 70

世上每个人本来就有自己的发展时区

Absolutely everyone in this world

works based on their Time Zone

身边有些人看似走在你前面

People around you

might seem to go ahead of you

也有人看似走在你后面

some might seem to be behind you

但其实每个人在自己的时区有自己的步程

But everyone is running their own RACE

in their own TIME

不用嫉妒或嘲笑他们

Don’t envy them or mock them

他们都在自己的时区里,你也是

They are in their TIME ZONE

and you are in yours!

生命就是等待正确的行动时机

Life is about waiting for the right moment to act

所以,放轻松

So, RELAX

你没有落后

You’re not LATE

你没有领先

You’re not EARLY

在命运为你安排的属于自己的时区里

一切都准时

You are very much ON TIME

and in your TIME ZONE Destiny set up for you

所以, 先别忙着焦虑被同龄人抛弃,因为你们说不定还不在一个时区......

WordPress网站index.php总被删除解决方案

WordPressEast_Digi_Marketing 发表了文章 • 0 个评论 • 4219 次浏览 • 2018-04-11 14:37 • 来自相关话题

最新消息:如果以下方法仍然无效的话,可以尝试一种最土的大杀器,就是将index.php文件压缩成index.zip,然后通过cPanel的计划任务,创建一条计划任务,设置每天自动解压缩两次此文件,而且无条件覆盖源文件:

0 0,12 * * * /bin/unzip -u /home/username/public_html/index.php.zip >/dev/null 2>&1

通过此大杀器,基本可确保网站没问题了,如果一天两次频率不够,我们可以创建一天解压缩多次,总之这种方法虽然笨,但是确实没有办法的办法,总之不管白猫黑猫,能抓老鼠就是好猫。^_^

最新消息:此项目后来安装了一款不错的病毒清理插件--Sucuri Security - Auditing, Malware Scanner and Hardening 检测出了WordPress核心文件被篡改的记录,清理后,问题得以彻底解决。

最近有个WordPress网站根目录底下的index.php总被删除,用病毒扫描过都提示没病毒,查看数据库里边也没什么异样,就是每天根目录底下index.php文件都会被删除,后来经过对比发现.htaccess文件里边有异样,这个站里边的内容如下: 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /
RewriteRule ^([0-9]+)\/(fibdom)\/([0-9]+)_(.*)\/(.*)$ ?fibdom$3=$1&%{QUERY_STRING}[L] RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

而我单独找了一个正常的WordPress网站的.htaccess,内容如下:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

至此基本可以确认是网站.htaccess被替换过,这个文件往往容易被忽略,替换这个文件以后,网站应该就恢复正常了。 查看全部
最新消息:如果以下方法仍然无效的话,可以尝试一种最土的大杀器,就是将index.php文件压缩成index.zip,然后通过cPanel的计划任务,创建一条计划任务,设置每天自动解压缩两次此文件,而且无条件覆盖源文件:


0 0,12 * * * /bin/unzip -u /home/username/public_html/index.php.zip >/dev/null 2>&1


通过此大杀器,基本可确保网站没问题了,如果一天两次频率不够,我们可以创建一天解压缩多次,总之这种方法虽然笨,但是确实没有办法的办法,总之不管白猫黑猫,能抓老鼠就是好猫。^_^


最新消息:此项目后来安装了一款不错的病毒清理插件--Sucuri Security - Auditing, Malware Scanner and Hardening 检测出了WordPress核心文件被篡改的记录,清理后,问题得以彻底解决。


最近有个WordPress网站根目录底下的index.php总被删除,用病毒扫描过都提示没病毒,查看数据库里边也没什么异样,就是每天根目录底下index.php文件都会被删除,后来经过对比发现.htaccess文件里边有异样,这个站里边的内容如下: 


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /
RewriteRule ^([0-9]+)\/(fibdom)\/([0-9]+)_(.*)\/(.*)$ ?fibdom$3=$1&%{QUERY_STRING}[L] RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress


而我单独找了一个正常的WordPress网站的.htaccess,内容如下:


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress


至此基本可以确认是网站.htaccess被替换过,这个文件往往容易被忽略,替换这个文件以后,网站应该就恢复正常了。

阿里云主机centos设置虚拟内存(交换分区)

Linux运维East_Digi_Marketing 发表了文章 • 0 个评论 • 4530 次浏览 • 2018-04-10 08:35 • 来自相关话题

1. 添加swap文件大小为2G默认情况下,of=/swapfile即swapfile文件创建在/var/目录下。
若我在创建在/opt/image/目录下, 则下面所有的操作里有/swapfile的都要改为/opt/image/swap
# dd if=/dev/zero of=/swapfile bs=1k count=2048000

2. 创建SWAP文件
# mkswap /swapfile

3. 激活SWAP文件
# swapon /swapfile

4. 查看SWAP信息是否正确
# swapon -s

5. 添加到fstab文件中让系统引导时自动启动

注意, 这里是采用了swapfile文件的默认路径, 即/var/swapfile。若你上面的操作中swapfile文件不是在/var/目录下, 则下面的/var/swapfile也要相应修改为自己设写的。
# echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

6. 用命令free检查2G交换分区生效
# free -m
或者, 检查meminfo文件
# grep SwapTotal /proc/meminfo

7. 释放SWAP文件
# swapoff /swapfile8. 删除SWAP文件
# rm -fr /swapfile 查看全部
1. 添加swap文件大小为2G默认情况下,of=/swapfile即swapfile文件创建在/var/目录下。
若我在创建在/opt/image/目录下, 则下面所有的操作里有/swapfile的都要改为/opt/image/swap
# dd if=/dev/zero of=/swapfile bs=1k count=2048000

2. 创建SWAP文件
# mkswap /swapfile

3. 激活SWAP文件
# swapon /swapfile

4. 查看SWAP信息是否正确
# swapon -s

5. 添加到fstab文件中让系统引导时自动启动

注意, 这里是采用了swapfile文件的默认路径, 即/var/swapfile。若你上面的操作中swapfile文件不是在/var/目录下, 则下面的/var/swapfile也要相应修改为自己设写的。
# echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

6. 用命令free检查2G交换分区生效
# free -m
或者, 检查meminfo文件
# grep SwapTotal /proc/meminfo

7. 释放SWAP文件
# swapoff /swapfile8. 删除SWAP文件
# rm -fr /swapfile

字里行间书吧徜徉

休闲娱乐East_Digi_Marketing 发表了文章 • 0 个评论 • 3703 次浏览 • 2018-04-06 12:43 • 来自相关话题

HTTP的理解

其他Leo 发表了文章 • 0 个评论 • 4020 次浏览 • 2018-04-03 16:30 • 来自相关话题

作为一个前端,如果对一个网页从发起请求到返回数据这期间具体发生了什么都不知道的话,那不是一个好前端。最近,读了图解http,以及有关http相关的文章,还有自己也下载了wireshark抓包工具,实际观察了一下这个过程,下面就此做些总结。

一.从输入一个url到返回数据,中间到底发生了什么?

假设,我们在浏览器输入http://www.baidu.com:80/index.html,假设解析出的ip地址是202.43.78.3

1.浏览器解析出主机名

解析出的主机名是www.baidu.com

2.浏览器查询这个主机名的ip地址(dns)

dns解析的作用就是把域名解析成ip地址,这样才能在广域网路由器转发报文给目标ip,不然路由器不知道要把报文发给谁。下面就讲下大概的过程,不会涉及太多细节。(以chrome为例子)

(1)浏览器启动时,首先浏览器会去操作系统获取dns服务器地址,然后把这个地址缓存下来。同时浏览器还会去读取和解析hosts文件,同样放到缓存中。浏览器对解析过的域名和ip地址,都会保存着这两者的映射关系。(存到cache中)

(2)当解析域名的时候,首先浏览器会去cache中查找有没有缓存好的映射关系,如果没有的话,就去hosts文件中查找,如果也没有的话,浏览器就会发起请求去dns服务器缓存查询了,如果缓存里面也没有,那最后就是dns服务器去查询了。

3.浏览器获取端口号

4.浏览器向目标ip地址发起一条到202.43.78.3:80的tcp连接

为了传输的可靠性,tcp协议要有三次握手过程:

(1)首先浏览器会向服务器发起一个连接请求

(2)服务器会对连接请求做出响应,表示同意建立连接

(3)浏览器收到响应后,再告知对方,它知道服务器同意它建立连接了。

5.ip层把ip地址转换成mac地址,一边传输,一边查找目标服务器的mac地址

6.数据链路层处理网络连接的硬件部分,比如网卡,找到服务器的网卡

7.浏览器向服务器发送一条http报文(重复5,6步)

每一条http报文的组成:

起始行+首部+主体(可选)

起始行:http/1.0 200 ok (一般包括http版本,返回状态码,返回码原因)

首部:content-type:text/plain content-length:19

主体:name=jane

8.服务器接受客户端请求,进行一些处理,返回响应报文

web服务器接收到请求之后,实际上会做些什么呢?

(1)建立连接,如果接受一个客户端连接,就建立连接,如果不同意,就将其关闭。

(2)接收请求,读取http请求报文

(3)访问资源,访问报文中指定的资源

(4)构建响应,创建带有首部的http响应报文

(5)发送响应,将响应回送给客户端

9.浏览器读取http响应报文

10.浏览器关闭连接

看了上面的一个简单过程,大家会不会有这样一个问题,难道每次发起一个http请求,都要建立一次tcp连接吗,我们经常写的并发ajax请求,每条请求都是各自独立建立的tcp连接?一条tcp连接建立之后,是什么时候关闭的?带着这些问题,看看下面要讲的http的特性

二.http的特性

1.http是不保存状态的协议

http协议是一种无状态的协议,意思就是说它不会对每次的请求和响应之间的通信状态进行保存。你之前发过的任何请求的信息,没有任何记录。之所以这样设计,也是为了让http变得比较简单,可以处理大量事物。但是无状态的特性,也会导致一些问题,比如说一个用户登录一家网站之后,跳到另一个页面,应该还保持着登录状态,所以后面就出了cookie状态管理技术。相信大家应该都很熟悉了。

2.请求只能从客户端开始。客户端不可以接收除响应以外的指令

服务器必须等待客户端的请求,才能给客户端发送响应数据,所以说服务器是不能主动给客户端推送数据的。对于一些实时监控的功能,常常用websocket来代替

3.没有用户认证,任何人都可以发起请求

在http协议通信时,是不存在确认通信方的处理步骤的,任何人都可以发起请求。另外,服务器只要收到请求,无论是谁,都会返回一个响应。所以会存在伪装的隐患。后面出现的https就可以解决这个问题。

4.通信使用的是明文

5.无法证明报文完整性

6.可任意选择数据压缩格式,非强制压缩发送

7.http持久连接和并行连接

一开始,http请求是串行的,一个http请求,就会建立一条tcp连接,浏览器收到响应之后,就会断开连接。等上一个请求回来了,下一个请求才能继续请求。这样做的缺点是,比较耗时间和内存,后面就出现了下面一系列的优化连接性能的方法。

(1)并行连接:

原理:通过多条tcp连接发起并发的http请求

并行连接可以同时发起多个http请求,每次发起一个http请求,就会建立一个tcp连接。每个http请求是独立的,不会相互等待,这样做,很可能会提高页面的加载速度,因为人们会看到页面上面,很多个东西会同时出现,所以感觉页面加载变快了。实际上有时候是真的变快了,因为它是并行工作的。但是有时候不是真的快了。比如说,客户端的网络带宽不足时,(浏览器是通过一个28kbps的modem连接到因特网上去的),如果并行加载多个请求,每个请求就会去竞争这个有限的带宽,每个请求就会以比较慢的速度加载。这样带来的性能提升就很小。

(2)持久连接:

原理:重用tcp连接,以消除连接及关闭时延

从http1.1开始,就允许当http响应结束后,tcp连接可以保持在打开状态,以便给未来的http请求重用现在的连接。那么,这个tcp连接什么时候会关闭呢,一般情况下,40s内,如果没有新的请求,就会关闭。

(3)管道化连接

原理:通过共享的tcp连接发起并发的http请求

并行连接可以提高复合页面的传输速度,但是也有许多缺点,比如每次都会建立一次tcp连接,会耗费时间和带宽。持久连接的优势就是降低了时延和tcp的连接数量。但是持久连接可能会导致的一个问题是,可能会累积大量的空闲连接。耗费资源。

持久连接和并行连接配合使用才是最高效的方式。

一般浏览器会限制,并行连接的个数是4个,即打开少量的并行连接,其中每个都是持久连接。这也是现在用的最多的方式。 查看全部

v2-a8143c9c27f6e2f65e1a398b894a5a74_hd.jpg


作为一个前端,如果对一个网页从发起请求到返回数据这期间具体发生了什么都不知道的话,那不是一个好前端。最近,读了图解http,以及有关http相关的文章,还有自己也下载了wireshark抓包工具,实际观察了一下这个过程,下面就此做些总结。

一.从输入一个url到返回数据,中间到底发生了什么?

假设,我们在浏览器输入http://www.baidu.com:80/index.html,假设解析出的ip地址是202.43.78.3

1.浏览器解析出主机名

解析出的主机名是www.baidu.com

2.浏览器查询这个主机名的ip地址(dns)

dns解析的作用就是把域名解析成ip地址,这样才能在广域网路由器转发报文给目标ip,不然路由器不知道要把报文发给谁。下面就讲下大概的过程,不会涉及太多细节。(以chrome为例子)

(1)浏览器启动时,首先浏览器会去操作系统获取dns服务器地址,然后把这个地址缓存下来。同时浏览器还会去读取和解析hosts文件,同样放到缓存中。浏览器对解析过的域名和ip地址,都会保存着这两者的映射关系。(存到cache中)

(2)当解析域名的时候,首先浏览器会去cache中查找有没有缓存好的映射关系,如果没有的话,就去hosts文件中查找,如果也没有的话,浏览器就会发起请求去dns服务器缓存查询了,如果缓存里面也没有,那最后就是dns服务器去查询了。

3.浏览器获取端口号

4.浏览器向目标ip地址发起一条到202.43.78.3:80的tcp连接

为了传输的可靠性,tcp协议要有三次握手过程:

(1)首先浏览器会向服务器发起一个连接请求

(2)服务器会对连接请求做出响应,表示同意建立连接

(3)浏览器收到响应后,再告知对方,它知道服务器同意它建立连接了。

5.ip层把ip地址转换成mac地址,一边传输,一边查找目标服务器的mac地址

6.数据链路层处理网络连接的硬件部分,比如网卡,找到服务器的网卡

7.浏览器向服务器发送一条http报文(重复5,6步)

每一条http报文的组成:

起始行+首部+主体(可选)

起始行:http/1.0 200 ok (一般包括http版本,返回状态码,返回码原因)

首部:content-type:text/plain content-length:19

主体:name=jane

8.服务器接受客户端请求,进行一些处理,返回响应报文

web服务器接收到请求之后,实际上会做些什么呢?

(1)建立连接,如果接受一个客户端连接,就建立连接,如果不同意,就将其关闭。

(2)接收请求,读取http请求报文

(3)访问资源,访问报文中指定的资源

(4)构建响应,创建带有首部的http响应报文

(5)发送响应,将响应回送给客户端

9.浏览器读取http响应报文

10.浏览器关闭连接

看了上面的一个简单过程,大家会不会有这样一个问题,难道每次发起一个http请求,都要建立一次tcp连接吗,我们经常写的并发ajax请求,每条请求都是各自独立建立的tcp连接?一条tcp连接建立之后,是什么时候关闭的?带着这些问题,看看下面要讲的http的特性

二.http的特性

1.http是不保存状态的协议

http协议是一种无状态的协议,意思就是说它不会对每次的请求和响应之间的通信状态进行保存。你之前发过的任何请求的信息,没有任何记录。之所以这样设计,也是为了让http变得比较简单,可以处理大量事物。但是无状态的特性,也会导致一些问题,比如说一个用户登录一家网站之后,跳到另一个页面,应该还保持着登录状态,所以后面就出了cookie状态管理技术。相信大家应该都很熟悉了。

2.请求只能从客户端开始。客户端不可以接收除响应以外的指令

服务器必须等待客户端的请求,才能给客户端发送响应数据,所以说服务器是不能主动给客户端推送数据的。对于一些实时监控的功能,常常用websocket来代替

3.没有用户认证,任何人都可以发起请求

在http协议通信时,是不存在确认通信方的处理步骤的,任何人都可以发起请求。另外,服务器只要收到请求,无论是谁,都会返回一个响应。所以会存在伪装的隐患。后面出现的https就可以解决这个问题。

4.通信使用的是明文

5.无法证明报文完整性

6.可任意选择数据压缩格式,非强制压缩发送

7.http持久连接和并行连接

一开始,http请求是串行的,一个http请求,就会建立一条tcp连接,浏览器收到响应之后,就会断开连接。等上一个请求回来了,下一个请求才能继续请求。这样做的缺点是,比较耗时间和内存,后面就出现了下面一系列的优化连接性能的方法。

(1)并行连接:

原理:通过多条tcp连接发起并发的http请求

并行连接可以同时发起多个http请求,每次发起一个http请求,就会建立一个tcp连接。每个http请求是独立的,不会相互等待,这样做,很可能会提高页面的加载速度,因为人们会看到页面上面,很多个东西会同时出现,所以感觉页面加载变快了。实际上有时候是真的变快了,因为它是并行工作的。但是有时候不是真的快了。比如说,客户端的网络带宽不足时,(浏览器是通过一个28kbps的modem连接到因特网上去的),如果并行加载多个请求,每个请求就会去竞争这个有限的带宽,每个请求就会以比较慢的速度加载。这样带来的性能提升就很小。

(2)持久连接:

原理:重用tcp连接,以消除连接及关闭时延

从http1.1开始,就允许当http响应结束后,tcp连接可以保持在打开状态,以便给未来的http请求重用现在的连接。那么,这个tcp连接什么时候会关闭呢,一般情况下,40s内,如果没有新的请求,就会关闭。

(3)管道化连接

原理:通过共享的tcp连接发起并发的http请求

并行连接可以提高复合页面的传输速度,但是也有许多缺点,比如每次都会建立一次tcp连接,会耗费时间和带宽。持久连接的优势就是降低了时延和tcp的连接数量。但是持久连接可能会导致的一个问题是,可能会累积大量的空闲连接。耗费资源。

持久连接和并行连接配合使用才是最高效的方式。

一般浏览器会限制,并行连接的个数是4个,即打开少量的并行连接,其中每个都是持久连接。这也是现在用的最多的方式。

使用cookie-free domains的方法优化网站性能

回复

WordPressLeo 发起了问题 • 2 人关注 • 0 个回复 • 6967 次浏览 • 2018-03-27 11:56 • 来自相关话题

Add Expires headers

WordPressLeo 发表了文章 • 0 个评论 • 3840 次浏览 • 2018-03-27 11:03 • 来自相关话题

Expires headers 告诉浏览器是否应该从服务器请求一个特定的文件或者是否应该从浏览器的缓存抓住它。Expires headers 的设计目的是希望使用缓存来减少HTTP requests的数量,从而减少HTTP相应的大小。

Expires headers 中的 Expires 说明了 Expires headers 是有时间限制的,只有在这个指定的时间期限内,浏览器才会从缓存读取数据,而超过这个时间期限,再次访问同一个页面时浏览器还是会向服务器发起  HTTP requests,从服务器端下载页面所需的文件。
 
HTML 文件不要设置 Expires headers。实际的开发经验告诉我,给HTML文件添加 Expires headers 会带来很多的麻烦。即便你要添加  Expires headers,也尽量设置较短的过期时间。这一点在 PageSpeed 的 Leverage browser caching 规则中也明确提到了:

In general, HTML is not static, and shouldn’t be considered cacheable.

知道要缓存哪些资源文件后,接着就是预判这些文件的变更频率,设置合适的过期时间。还是前面的原则,变更频繁的 Expire 时间就越短,不怎么变动的就可以设置长的过期时间,也就是落实“永不过期”的原则。
 
接下来就是在服务器端设置 Expires headers 了,这里以Apache服务器为例,我们在 .htaccess 文件中配置(.htaccess是跟目录下的一个隐藏文件)添加如下代码:

<IfModule mod_expires.c> 
# Enable expirations 
ExpiresActive On 
# Default directive 
ExpiresDefault "access plus 1 month" 
# My favicon 
ExpiresByType image/x-icon "access plus 1 year" 
# Images 
ExpiresByType image/gif "access plus 1 month" 
ExpiresByType image/png "access plus 1 month" 
ExpiresByType image/jpg "access plus 1 month" 
ExpiresByType image/jpeg "access plus 1 month" 
# CSS 
ExpiresByType text/css "access plus 1 month" 
# Javascript 
ExpiresByType application/javascript "access plus 1 year" </IfModule>
  查看全部
Expires headers 告诉浏览器是否应该从服务器请求一个特定的文件或者是否应该从浏览器的缓存抓住它。Expires headers 的设计目的是希望使用缓存来减少HTTP requests的数量,从而减少HTTP相应的大小。

Expires headers 中的 Expires 说明了 Expires headers 是有时间限制的,只有在这个指定的时间期限内,浏览器才会从缓存读取数据,而超过这个时间期限,再次访问同一个页面时浏览器还是会向服务器发起  HTTP requests,从服务器端下载页面所需的文件。
 
HTML 文件不要设置 Expires headers。实际的开发经验告诉我,给HTML文件添加 Expires headers 会带来很多的麻烦。即便你要添加  Expires headers,也尽量设置较短的过期时间。这一点在 PageSpeed 的 Leverage browser caching 规则中也明确提到了:

In general, HTML is not static, and shouldn’t be considered cacheable.

知道要缓存哪些资源文件后,接着就是预判这些文件的变更频率,设置合适的过期时间。还是前面的原则,变更频繁的 Expire 时间就越短,不怎么变动的就可以设置长的过期时间,也就是落实“永不过期”的原则。
 
接下来就是在服务器端设置 Expires headers 了,这里以Apache服务器为例,我们在 .htaccess 文件中配置(.htaccess是跟目录下的一个隐藏文件)添加如下代码:

<IfModule mod_expires.c> 
# Enable expirations 
ExpiresActive On 
# Default directive 
ExpiresDefault "access plus 1 month" 
# My favicon 
ExpiresByType image/x-icon "access plus 1 year" 
# Images 
ExpiresByType image/gif "access plus 1 month" 
ExpiresByType image/png "access plus 1 month" 
ExpiresByType image/jpg "access plus 1 month" 
ExpiresByType image/jpeg "access plus 1 month" 
# CSS 
ExpiresByType text/css "access plus 1 month" 
# Javascript 
ExpiresByType application/javascript "access plus 1 year" </IfModule>
 

恭喜隽永东方已通过Google Adwords考核,近期将正式成为Google代理商

SEMEast_Digi_Marketing 发表了文章 • 0 个评论 • 5564 次浏览 • 2018-03-23 08:12 • 来自相关话题

为了给广大全网营销客人更好的SEM服务,隽永东方近期正在逐步通过Google官方代理程序,并逐一通过各项严苛的考核,即将于近期正式获得Google官方代理资格,恭喜隽永东方 @jonny 今天顺利通过了Google Adwords官方考核:
 





 
并获颁发了Google官方认证证书:

Google Adwords Certificate

接下来我们将逐一通过Google官方剩余考核,并正式成为Google官方代理商,为广大新老客户提供更加专业优质的SEM营销服务。 查看全部
为了给广大全网营销客人更好的SEM服务,隽永东方近期正在逐步通过Google官方代理程序,并逐一通过各项严苛的考核,即将于近期正式获得Google官方代理资格,恭喜隽永东方 @jonny 今天顺利通过了Google Adwords官方考核:
 

Screen-Shot-2018-03-22-at-5.38_.08-PM_.jpg

 
并获颁发了Google官方认证证书:

Google Adwords Certificate

接下来我们将逐一通过Google官方剩余考核,并正式成为Google官方代理商,为广大新老客户提供更加专业优质的SEM营销服务。

PHP 使用静态变量(static var)进行效率优化

WordPressLeo 发表了文章 • 0 个评论 • 3834 次浏览 • 2018-03-12 10:47 • 来自相关话题

使用场景:在一个 PHP 函数中通过复杂的计算获取到这个变量,然后这个函数会在页面中多次被调用。
function get_some_var(){ 
$var = complex_calculation();
return $var; 
}
如果这个函数在页面中被调用3次,那么这个复杂的计算过程就会被执行3次。我们把 $var 定义成静态变量,就可以把这个过程优化:
function get_some_var(){
 static $var; 
if(!isset($var)){ 
$var = complex_calculation();
 } 
return $var;
 }
  查看全部
使用场景:在一个 PHP 函数中通过复杂的计算获取到这个变量,然后这个函数会在页面中多次被调用。
function get_some_var(){ 
$var = complex_calculation();
return $var; 
}
如果这个函数在页面中被调用3次,那么这个复杂的计算过程就会被执行3次。我们把 $var 定义成静态变量,就可以把这个过程优化:
function get_some_var(){
 static $var; 
if(!isset($var)){ 
$var = complex_calculation();
 } 
return $var;
 }
 

在 WordPress 后台如何使用颜色选择器

WordPressLeo 发表了文章 • 0 个评论 • 3792 次浏览 • 2018-03-12 10:43 • 来自相关话题

WordPress 后台默认已经集成了 jQuery UI 的颜色选择器组件(color picker),所以我们可以直接在 WordPress 后台使用颜色选择器:
1. 首先加载 color picker 的 JS 和 CSS:
add_action( 'admin_enqueue_scripts', 'wpjam_add_color_picker' ); 
function wptuts_add_color_picker( $hook ) { 
wp_enqueue_style( 'wp-color-picker' ); 
wp_enqueue_script( 'wp-color-picker'); 
}
2. 假设后台页面中要使用的 input 的 class 为 color,加入下面的代码使该 input 转成颜色选择器:
jQuery(function($){ 
$( "input.color").wpColorPicker(); 
});
 
最后的效果如下图:





  查看全部
WordPress 后台默认已经集成了 jQuery UI 的颜色选择器组件(color picker),所以我们可以直接在 WordPress 后台使用颜色选择器:
1. 首先加载 color picker 的 JS 和 CSS:
add_action( 'admin_enqueue_scripts', 'wpjam_add_color_picker' ); 
function wptuts_add_color_picker( $hook ) { 
wp_enqueue_style( 'wp-color-picker' ); 
wp_enqueue_script( 'wp-color-picker'); 
}
2. 假设后台页面中要使用的 input 的 class 为 color,加入下面的代码使该 input 转成颜色选择器:
jQuery(function($){ 
$( "input.color").wpColorPicker(); 
});
 
最后的效果如下图:

color-picker.png