太持久网站_太持久是病吗
太持久网站_太持久是病吗
大家好,今天我将为大家详细介绍太持久网站的问题。为了更好地呈现这个问题,我将相关资料进行了整理,现在就让我们一起来看看吧。
文章目录列表:
1.Steam_在国内的生命力会一直持久吗?
2.Webpack如何实现持久化缓存
3.男人床上持久的方法?早泄吃什么药?延长性生活时间?
4.怎么从seo角度看网站各个模块的布局呢?
5.网站优化一般需要多少钱啊
6.男人如何摆脱“快抢手”?更持久怎么锻炼?
Steam_在国内的生命力会一直持久吗?
受国内政策影响,没有意外的话,会一直处于目前的状态,即不鼓励不封禁。虽然steam的游戏属于数字产品,按wto协议不需要在中国交税,但政府想搞它是很轻松的。
steam能够在国内运行,是因为steam在国内建立了存放游戏镜像的服务器,能够为玩家提供高速下载服务。如果哪天国内政策不允许国外游戏_在国内运营了,只需要墙了steam的网站,封了steam的服务器,就能把steam在国内的市场彻底打散,墙了网站玩家还可以翻出去解决,而封了steam的国内服务器,就是釜底抽薪的操作了,玩家用的翻出去的工具,通常是没办法让玩家从国外服务器高速下载游戏的
Webpack如何实现持久化缓存
这次给大家带来Webpack如何实现持久化缓存,Webpack实现持久化缓存的注意事项有哪些,下面就是实战案例,一起来看一下。
前言
_近在看 webpack 如何做持久化缓存的内容,发现其中还是有一些坑点的,正好有时间就将它们整理总结一下,读完本文你大致能够明白:
什么是持久化缓存,为什么做持久化缓存?
webpack 如何做持久化缓存?
webpack 做缓存的一些注意点。
持久化缓存
首先我们需要去解释一下,什么是持久化缓存,在现在前后端分离的应用大行其道的背景下,前端 html,css,js 往往是以一种静态资源文件的形式存在于服务器,通过接口来获取数据来展示动态内容。这就涉及到公司如何去部署前端代码的问题,所以就涉及到一个更新部署的问题,是先部署页面,还是先部署资源?
先部署页面,再部署资源:在二者部署的时间间隔内,如果有用户访问页面,就会在新的页面结构中加载旧的资源,并且把这个旧版本资源当做新版本缓存起来,其结果就是:用户访问到一个样式错乱的页面,除非手动去刷新,否则在资源缓存过期之前,页面会一直处于错乱的状态。
先部署资源,再部署页面:在部署时间间隔内,有旧版本的资源本地缓存的用户访问网站,由于请求的页面是旧版本,资源引用没有改变,浏览器将直接使用本地缓存,这样属于正常情况,但没有本地缓存或者缓存过期的用户在访问网站的时候,就会出现旧版本页面加载新版本资源的情况,导致页面执行错误。
所以我们需要一种部署策略来保证在更新我们线上的代码的时候,线上用户也能平滑地过渡并且正确打开我们的网站。
推荐先看这个回答:大公司里怎样开发和部署前端代码?
当你读完上面的回答,大致就会明白,现在比较成熟的持久化缓存方案就是在静态资源的名字后面加 hash 值,因为每次修改文件生成的 hash 值不一样,这样做的好处在于增量式发布文件,避免覆盖掉之前文件从而导致线上的用户访问失效。
因为只要做到每次发布的静态资源(css, js, img)的名称都是_的,那么我就可以:
针对 html 文件:不开启缓存,把 html 放到自己的服务器上,关闭服务器的缓存,自己的服务器只提供 html 文件和数据接口
针对静态的 js,css,等文件:开启 cdn 和缓存,将静态资源上传到 cdn 服务商,我们可以对资源开启长期缓存,因为每个资源的路径都是_的,所以不会导致资源被覆盖,保证线上用户访问的稳定性。
每次发布更新的时候,先将静态资源(js, css, img) 传到 cdn 服务上,然后再上传 html 文件,这样既保证了老用户能否正常访问,又能让新用户看到新的页面。
上面大致介绍了下主流的前端持久化缓存方案,那么我们为什么需要做持久化缓存呢?
用户使用浏览器_次访问我们的站点时,该页面引入了各式各样的静态资源,如果我们能做到持久化缓存的话,可以在 /h_ylindz/blog.git
cd blog/code/multiple-page-webpack-demo
npm install阅读下面的内容之前我强烈建议你看下我之前的文章:深入理解 webpack 文件打包机制,理解 webpack 文件的打包的机制有助于你更好地实现持久化缓存。
例子大概是这样描述的:它由两个页面组成 pageA 和 pageB
// src/pageA.js
import componentA from './common/componentA';
// 使用到 jquery 第三方库,需要抽离,避免业务打包文件过大
import $ from 'jquery';
// 加载 css 文件,一部分为公共样式,一部分为独有样式,需要抽离
import './css/common.css'
import './css/pageA.css';
c_ole.log(componentA);
c_ole.log($.trim(' do something '));
// src/pageB.js
// 页面 A 和 B 都用到了公共模块 componentA,需要抽离,避免重复加载
import componentA from './common/componentA';
import componentB from './common/componentB';
import './css/common.css'
import './css/pageB.css';
c_ole.log(componentA);
c_ole.log(componentB);
// 用到异步加载模块 asyncComponent,需要抽离,加载首屏速度
document.getElementById('xxxxx').addEventListener('click', ()=> {
import( /* webpackChunkName: "async" */
'./common/asyncComponent.js').then((async)=> {
async();
})
})
// 公共模块基本长这样
export default "component X";上面的页面内容基本简单涉及到了我们拆分模块的三种模式:拆分公共库,按需加载和拆分公共模块。那么接下来要来配置 webpack:
c_t path=require('path');
c_t webpack=require('webpack');
c_t ExtractTextPlugin=require('extract-text-webpack-plugin');
module.exports={
entry: {
pageA: [path.resolve(dirname, './src/pageA.js')],
pageB: path.resolve(dirname, './src/pageB.js'),
},
output: {
path: path.resolve(dirname, './dist'),
filename: 'js/[name].[chunkhash:8].js',
chunkFilename: 'js/[name].[chunkhash:8].js'
},
module: {
rules: [
{
// 用正则去匹配要用该 loader 转换的 CSS 文件
test: /.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: ["css-loader"]
})
}
]
},
plugins: [
new webpack.optimize.Comm_ChunkPlugin({
name: 'common',
minChunks: 2,
}),
new webpack.optimize.Comm_ChunkPlugin({
name: 'vendor',
minChunks: ({ resource })=> (
resource && resource.indexOf('node_modules') >=0 && resource.match(/.js$/)
)
}),
new ExtractTextPlugin({
filename: `css/[name].[chunkhash:8].css`,
}),
]
}_个 Comm_ChunkPlugin 用于抽离公共模块,相当于是说 webpack 大佬,如果你看到某个模块被加载两次即以上,那么请你帮我移到 common chunk 里面,这里 minChunks 为 2,粒度拆解_细,你可以根据自己的实际情况,看选择是用多少次模块才将它们抽离。
第二个 Comm_ChunkPlugin 用来提取第三方代码,将它们进行抽离,判断资源是否来自 node_modules,如果是,则说明是第三方模块,那就将它们抽离。相当于是告诉 webpack 大佬,如果你看见某些模块是来自 node_modules 目录的,并且名字是 .js 结尾的话,麻烦把他们都移到_endor chunk 里去,如果_endor chunk 不存在的话,就创建一个新的。
这样配置有什么好处,随着业务的增长,我们依赖的第三方库代码很可能会越来越多,如果我们专门配置一个入口来存放第三方代码,这时候我们的 webpack.config.js 就会变成:
// 不利于拓展
module.exports={
entry: {
_: './src/main.js',
_endor: [
'vue',
'axio',
'vue-router',
'vuex',
// more
],
},
} 第三个 ExtractTextPlugin 插件用于将 css 从打包好的 js 文件中抽离,生成独立的 css 文件,想象一下,当你只是修改了下样式,并没有修改页面的功能逻辑,你肯定不希望你的 js 文件 hash 值变化,你肯定是希望 css 和 js 能够相互分开,且互不影响。
运行 webpack 后可以看到打包之后的效果:
├── css
│ ├── common.2beb7387.css
│ ├── pageA.d178426d.css
│ └── pageB.33931188.css
└── js
├── async.03f28faf.js
├── common.2beb7387.js
├── pageA.d178426d.js
├── pageB.33931188.js
└──_endor.22a1d956.js可以看出 css 和 js 已经分离,并且我们对模块进行了拆分,保证了模块 chunk 的_性,当你每次更新代码的时候,会生成不一样的 hash 值。
_性有了,那么我们需要保证 hash 值的稳定性,试想下这样的场景,你肯定不希望你修改某部分的代码(模块,css)导致了文件的 hash 值全变了,那么显然是不明智的,那么我们去做到 hash 值变化_小化呢?
换句话说,我们就要找出 webpack 编译中会导致缓存失效的因素,想办法去解决或优化它?
影响 chunkhash 值变化主要由以下四个部分引起的:
包含模块的源代码
webpack 用于启动运行的 runtime 代码
webpack 生成的模块 moduleid(包括包含模块 id 和被引用的依赖模块 id)
chunkID
这四部分只要有任意部分发生变化,生成的分块文件就不一样了,缓存也就会失效,下面就从四个部分一一介绍:
一、源代码变化:
显然不用多说,缓存必须要刷新,不然就有问题了
二、webpack 启动运行的 runtime 代码:
看过我之前的文章:深入理解 webpack 文件打包机制 就会知道,在 webpack 启动的时候需要执行一些启动代码。
(function(modules) {
window["webpackJsonp"]=function webpackJsonpCallback(chunkIds, moreModules) {
// ...
};
function webpack_require(moduleId) {
// ...
}
webpack_require.e=function requireEnsure(chunkId, callback) {
// ...
script.src=webpack_require.p + "" + chunkId + "." + ({"0":"pageA","1":"pageB","3":"vendor"}[chunkId]||chunkId) + "." + {"0":"e72ce7d4","1":"69f6bbe3","2":"9adbbaa0","3":"53fa02a7"}[chunkId] + ".js";
};
})([]);大致内容像上面这样,它们是 webpack 的一些启动代码,它们是一些函数,告诉浏览器如何加载 webpack 定义的模块。
其中有一行代码每次更新都会改变的,因为启动代码需要清楚地知道 chunkid 和 chunkhash 值得对应关系,这样在异步加载的时候才能正确地拼接出异步 js 文件的路径。
那么这部分代码_终放在哪个文件呢?因为我们刚才配置的时候_后生成的 common chunk 模块,那么这部分运行时代码会被直接内置在里面,这就导致了,我们每次更新我们业务代码(pageA, pageB, 模块)的时候, common chunkhash 会一直变化,但是这显然不符合我们的设想,因为我们只是要用 common chunk 用来存放公共模块(这里指的是 componentA),那么我 componentA 都没去修改,凭啥 chunkhash 需要变了。
所以我们需要将这部分 runtime 代码抽离成单独文件。
module.exports={
// ...
plugins: [
// ...
// 放到其他的 Comm_ChunkPlugin 后面
new webpack.optimize.Comm_ChunkPlugin({
name: 'runtime',
minChunks: Infinity,
}),
]
}这相当于是告诉 webpack 帮我把运行时代码抽离,放到单独的文件中。
├── css
│ ├── common.4cc08e4d.css
│ ├── pageA.d178426d.css
│ └── pageB.33931188.css
└── js
├── async.03f28faf.js
├── common.4cc08e4d.js
├── pageA.d178426d.js
├── pageB.33931188.js
├── runtime.8c79fdcd.js
└──_endor.cef44292.js多生成了一个 runtime.xxxx.js,以后你在改动业务代码的时候,common chunk 的 hash 值就不会变了,取而代之的是 runtime chunk hash 值会变,既然这部分代码是动态的,可以通过 chunk-manifest-webpack-plugin 将他们 inline 到 html 中,减少一次网络请求。
三、webpack 生成的模块 moduleid
在 webpack2 中默认加载 OccurrenceOrderPlugin 这个插件,OccurrenceOrderPlugin 插件会按引入次数_多的模块进行排序,引入次数的模块的 moduleId 越小,但是这仍然是不稳定的,随着你代码量的增加,虽然代码引用次数的模块 moduleId 越小,越不容易变化,但是难免还是不确定的。
默认情况下,模块的 id 是这个模块在模块数组中的索引。OccurenceOrderPlugin 会将引用次数多的模块放在前面,在每次编译时模块的顺序都是一致的,如果你修改代码时新增或删除了一些模块,这将可能会影响到所有模块的 id。
_实践方案是通过 HashedModuleIdsPlugin 这个插件,这个插件会根据模块的相对路径生成一个长度只有四位的字符串作为模块的 id,既隐藏了模块的路径信息,又减少了模块 id 的长度。
这样一来,改变 moduleId 的方式就只有文件路径的改变了,只要你的文件路径值不变,生成四位的字符串就不变,hash 值也不变。增加或删除业务代码模块不会对 moduleid 产生任何影响。
module.exports={
plugins: [
new webpack.HashedModuleIdsPlugin(),
// 放在_前面
// ...
]
}四、chunkID
实际情况中分块的个数的顺序在多次编译之间大多都是固定的, 不太容易发生变化。
这里涉及的只是比较基础的模块拆分,还有一些其它情况没有考虑到,比如异步加载组件中包含公共模块,可以再次将公共模块进行抽离。形成异步公共 chunk 模块。有想深入学习的可以看这篇文章:Webpack 大法之 Code Splitting
webpack 做缓存的一些注意点
CSS 文件 hash 值失效的问题
不建议线上发布使用 DllPlugin 插件
CSS 文件 hash 值失效的问题:
ExtractTextPlugin 有个比较严重的问题,那就是它生成文件名所用的[chunkhash]是直接取自于引用该 css 代码段的 js chunk ;换句话说,如果我只是修改 css 代码段,而不动 js 代码,那么_后生成出来的 css 文件名依然没有变化。
所以我们需要将 ExtractTextPlugin 中的 chunkhash 改为 contenthash,顾名思义,contenthash 代表的是文本文件内容的 hash 值,也就是只有 style 文件的 hash 值。这样编译出来的 js 和 css 文件就有独立的 hash 值了。
module.exports={
plugins: [
// ...
new ExtractTextPlugin({
filename: `css
男人床上持久的方法?早泄吃什么药?延长性生活时间?
早泄了,想延时。建议使用 帝博上园红胶嚢 治疗早泄很有效,得到了患者很好的口碑。延长性生活时间40分钟以上,能快速解决勃起障碍、早泄、房事后身体疲倦等问题。中药的,经__部门检测下,对人体没有副作用。
怎么从seo角度看网站各个模块的布局呢?
1、明确发展目标
不管什么样类型的网站建设都是需要一定目的性的,在前期进行竞争对手的分析,用户的定位,包括网站发展方向的确定等等都是很重要的环节,所以首先就需要确定网站的发展目标和方向,这样后期可以将网站围绕核心主题来拓展,这样有针对性的进行完善才是网站持久稳定发展的根本。
2、网站目录清晰规范
针对于网站目录的优化也是非常重要的一个环节,我们常说的页面静态化可以促进搜索引擎对其抓取,提升网站收录等,但是要从seo的角度来看的话,那么网站在建设初期就要重视站内的目录结构,保证网站目录结构的规范_,这样才能_限度的为搜索引擎蜘蛛提供较好的抓取环境,以此来提升网站整体的优化效果。
3、网站内部链接建设
新站刚上线时期,就可以规划网站内链的建设了,包括网站结构等等,可以从网站各页面来建设内部链接,构建合理的站内结构,我们需要将内链系统建设的“四通八达”,使蜘蛛在站内抓取时可以跳到任何一个页面,这样来增加网站收录,尤其是针对新站,一个合理的内链结构可以很大程度的减少网站页面的收录时长。
4、网站404
说到404想必大家都知道,这也是我们_常见的一种页面出错代码,在新站上线时期需要制作相应的404页面,将站内不存在或者出错的页面指向404,这也在搜索引擎方面所呈现的也就是网站的404页面,对其可以_的挽回网站一定的损失,所以关于网站的404也是在网站建设初期所要考虑到的一个重要环节!
5、网站地图
关于网站地图相信大家都不会陌生,_的目的就是将站内主要页面呈现给搜索引擎,让搜索引擎可以通过地图来了解网站的一些具体架构,网站地图也有几种形式,不管哪一种使用在站内都可以的,它能很好地给蜘蛛提供一个_全面的网站“导向图”。
6、页面打开速度
关于页面打开速度也是直接关系到网站跳出率的,如果站内部署较多的和flash文件,那么会在一定程度上的拖延页面的加载时长,从而影响到用户体验,如果页面迟迟打不开,那么用户自然不会一直干耗着,导致用户直接关闭页面,出现站内跳出率过高的现象发生,所以在网站建设初期一定要顾及到网站性能方面的优化,包括整站的压缩,文件的前期处理等,都是可以很好地在一定程度上提升网站页面加载速度的,目前我们_常见的几种有分布式页面处理,页面缓存技术,cdn加速等等这些都可以很好地解决页面加载速度过慢的问题。
网站优化一般需要多少钱啊
如果只优化单个关键字,一般3000到8000,效果比较不稳定。
如果是整站优化,除了优化关键字,还帮你改网站,这种方式效果比较持久,费用5万到10万,主要看网站大小。
男人如何摆脱“快抢手”?更持久怎么锻炼?
生活中“快抢手”通常都被用来形容男人早泄的情况,而早泄很显然是一种非常严重的男科病症。如果是疾病因素导致,那么根治之后性能力自然恢复,如果是技巧、性心理问题则经过学习、调节即可。那么男人如何摆脱“快抢手”?更持久怎么锻炼?
1、如何更持久
_:同房要迂回渐进
在战场上,我们经常能够看到的就是一些智者使用的"迂回战术"。在同房中,我们一样可以采用这种招术。
一晚两次或在短时间内同房两次,是延长同房时间的好办法,但这必须要有好的身体和好的技巧。可以一次_后,当晚再度同房;先手*_,不应期过后再同房;一次_后,在几分钟内再次乘_仍在兴奋时同房,都能达到延长时间的作用。
第二:变换你们的同房姿势
发现美的眼睛之所以能够发现美丽的存在,这是因为它相对你来说首先是新鲜的,之后才是你的美好。这其中,我们看到了改变的特性,新鲜的同房姿势正是这种改变的具体实施方法。
侧卧式、女上式、坐式都可以延长同房时间,原因是男方用力少,肌肉松弛,使男性可以控制自己的__,从而延长同房时间。此外,戴避孕套也可延长同房时间。
第三:延时神器持久装避孕套
作为男人,我们本因该让自己的同房变得越来越_才对,但是一些情况让我们令女人失望了。所以,如果你一向持久力不足,如果你想要让同房变得_,那就用这款持久装避孕套吧!这款_获得_药监局批准的苯佐卡因延时避孕套,一定不会让失望,一定会让你持久连连。
此外,套上这款避孕套,还可以更有效的避孕,同时也可以有效的较少磨擦对生殖器的刺激,延长你的持续时间。
男人性生活更持久的锻炼方法
控制_对男性来说,是延长同房时间的一个重要因素。那么,如何才能让_“随心所欲”?美国_男性网站“问他”给出了_好的答案:利用凯格尔训练锻炼盆底肌肉群。过去,人们常说凯格尔训练对提高女性可爱受有诸多好处,其实,盆底肌肉强壮与否,对男性也至关重要。这一肌肉群能控制_流动、勃起硬度及_时的喷发力。
男性在进行凯格尔训练前,应该先明确自己的盆底肌肉在什么位置。_简单的办法就是在上厕所时憋尿,感觉下身正在发力的肌肉群的位置,并牢牢记住那种紧绷的感受。但是,切忌紧绷腹、臀及腿部的肌肉,这样会让凯格尔训练失去意义。
男性凯格尔训练分为四部分。_节包括三组练习,首先,迅速收缩、放松盆底肌肉,每次持续10秒,连续做3组,每组间隔10秒。然后,继续重复一缩一放的动作,但每次持续5秒,每组间隔5秒。_后,紧缩盆底肌肉,维持30秒,做3组,每组间隔30秒。这一套练习应坚持一周,每天都练。
在第二节训练中,主要是训练盆底肌肉的灵敏性。首先,收缩盆底肌肉,坚持5秒,然后放松,一共做10组。然后,尽可能快地收放,每组10次,做3组。再次,不规则地收紧并放松,每次数10下,做3组。_后,紧收肌肉,尽可能久地坚持,以2分钟为上限。这一节训练也应坚持一周。如果觉得已经控制自如了,则可以做下一节训练。
到了第三节,首先是重复收放盆底肌肉,共30组,慢慢增加到100组。然后,尽可能久地收紧,做30组,每组间隔30秒。
第四节是巩固练习。首先,收紧盆底肌肉,至少坚持两分钟,然后放松,组数不限,但_好是尽可能久地练习。
凯格尔训练不受地点、时间限制,站卧姿都可以,且动作非常简单、容易掌握。男性练习一个月后,即有明显效果。
2、女人专属动作
女人喜欢能够让她们的身体感受惊喜的男人。一个好的爱人能够发现并满足伴侣的性要求,同时在她面前保留一些神秘感。一个伟大的爱人则能够为整个过程增添新意——采用专属于自己的动作。
采用这类“_动作”的时候,肯定是_刺激的时候——与你的女人做那个只属于你们的快乐动作。每个男人都应该有一个这样的动作。它一定是__并且经过周密考虑的,不能像照着菜谱做菜那样笨拙可笑。为什么男人需要有_动作呢?这并不仅仅是为了向女人提供向她_亲密女友吹嘘的资本:
巧妙运用_动作的关键在于“少而精”。如果你每次都用这个动作,她就不会再对此感觉新鲜,自然也就不再因此产生兴奋感。_动作也成了例行公事。让你的伴侣相信,你只在对她的行房技巧感到特别兴奋愉悦时才使用这个动作。这样,她就会总在琢磨今天你是否将有此表示。
为了说得更清楚,向你泄露我众多_动作中的一个。这个动作旨在为“老掉牙”的传教士姿势增添一些风趣。在采用这个姿势行房之前,我在她的臀下放了一个枕头。枕头将她的身体垫起,形成的角度正好可以使她对每一次动作的感觉加深一百万倍。不仅如此,她达到_的速度也因此加快了很多。
在她达到_以后,我将她的身体横过来,让她的头垂在床沿外。我抬高身体,在她的正上方慢慢向下插入,不断变换深度和速度,然后突然停止,再一点点深入达几分钟之久。这个小动作让我的伴侣达到了从未有过的_。
男人的_动作让她“天崩地裂”
放枕头时,应该让她自己调整到舒服为止。接着,按照一般男上女下的传教士姿势做就可以了。将她的身体横过来时,出于安全考虑,应该确保她背部的大部分仍在床上。控制好你的动作,你一定不希望让她的头撞到地上。在控制力量和节奏的同时,注视着她的眼睛。动作应该很慢,可以不时停顿几秒钟。
插入的角度很重要。如果角度合适,不仅可以刺激到她的女性私处,还能够不断碰触她的G点。因为,G点就位于女性私处前壁。借助物品(如枕头)抬高她的骨盆可以使你更容易碰触到她的G点。这样也提高了女性私处的位置,使丁丁体更容易碰到它。当你让她的头向下垂时,血液涌向头部,她会觉得喘不上气。这种头部充血的感觉与身体的愉悦混合在一起,能够提高一些女人_的强度。
已经失去新鲜感的事物也肯定不会有什么乐趣,因此你必须保持一些神秘感,让她猜测你将怎样做。永远以同样的节奏做同样的动作,她_终会完全麻木。变换节奏和适当的停顿都会带来意想不到的好效果。如果她产生的快乐感觉比你想象得还要多,不要奇怪。
好了,今天关于太持久网站就到这里了。希望大家对太持久网站有更深入的了解,同时也希望这个话题太持久网站的解答可以帮助到大家。