頁(yè)面性能優(yōu)化辦法有哪些?

互聯(lián)網(wǎng)有一項(xiàng)著名的8秒原則抖甘。用戶在訪問(wèn)Web網(wǎng)頁(yè)時(shí)热鞍,如果時(shí)間超過(guò)8秒就會(huì)感到不耐煩,如果加載需要太長(zhǎng)時(shí)間衔彻,他們就會(huì)放棄訪問(wèn)薇宠。大部分用戶希望網(wǎng)頁(yè)能在2秒之內(nèi)就完成加載。事實(shí)上艰额,加載時(shí)間每多1秒澄港,你就會(huì)流失7%的用戶。8秒并不是準(zhǔn)確的8秒鐘柄沮,只是向網(wǎng)站開(kāi)發(fā)者表明了加載時(shí)間的重要性回梧。那我們?nèi)绾蝺?yōu)化頁(yè)面性能,提高頁(yè)面加載速度呢祖搓?這是本文主要要探討的問(wèn)題狱意,然而性能優(yōu)化是個(gè)綜合性問(wèn)題,沒(méi)有標(biāo)準(zhǔn)答案拯欧,想要面面俱到羅列出來(lái)详囤,并非易事。本文只關(guān)注一些核心要點(diǎn)镐作,以下是我總結(jié)性能優(yōu)化常見(jiàn)的辦法:

一藏姐、資源壓縮與合并

主要包括這些方面:html壓縮隆箩、css 壓縮、js的壓縮和混亂和文件合并羔杨。 資源壓縮可以從文件中去掉多余的字符捌臊,比如回車(chē)、空格问畅。你在編輯器中寫(xiě)代碼的時(shí)候娃属,會(huì)使用縮進(jìn)和注釋?zhuān)@些方法無(wú)疑會(huì)讓你的代碼簡(jiǎn)潔而且易讀,但它們也會(huì)在文檔中添加多余的字節(jié)护姆。

1.html壓縮

html代碼壓縮就是壓縮這些在文本文件中有意義矾端,但是在HTML中不顯示的字符,包括空格卵皂,制表符秩铆,換行符等,還有一些其他意義的字符灯变,如HTML注釋也可以被壓縮殴玛。

如何進(jìn)行html壓縮:

  1. 使用在線網(wǎng)站進(jìn)行壓縮(開(kāi)發(fā)過(guò)程中一般不用)

  2. nodejs 提供了html-minifier工具

  3. 后端模板引擎渲染壓縮

2.css代碼壓縮:

css代碼壓縮簡(jiǎn)單來(lái)說(shuō)就是無(wú)效代碼刪除和css語(yǔ)義合并

如何進(jìn)行css壓縮:

  1. 使用在線網(wǎng)站進(jìn)行壓縮(開(kāi)發(fā)過(guò)程中一般不用)

  2. 使用html-minifier工具

  3. 使用clean-css對(duì)css壓縮

image

3.js的壓縮和混亂

js的壓縮和混亂主要包括以下這幾部分:

  1. 無(wú)效字符的刪除

  2. 剔除注釋

  3. 代碼語(yǔ)義的縮減和優(yōu)化

  4. 代碼保護(hù)(代碼邏輯變得混亂,降低代碼的可讀性添祸,這點(diǎn)很重要)

如何進(jìn)行js的壓縮和混亂

  1. 使用在線網(wǎng)站進(jìn)行壓縮(開(kāi)發(fā)過(guò)程中一般不用)

  2. 使用html-minifier工具

  3. 使用uglifyjs2對(duì)js進(jìn)行壓縮

其實(shí)css壓縮與js的壓縮和混亂比html壓縮收益要大得多滚粟,同時(shí)css代碼和js代碼比html代碼多得多,通過(guò)css壓縮和js壓縮帶來(lái)流量的減少刃泌,會(huì)非常明顯凡壤。所以對(duì)大公司來(lái)說(shuō),html壓縮可有可無(wú)耙替,但css壓縮與js的壓縮和混亂必須要有亚侠!

4.文件合并

image

從上圖可以看出不合并請(qǐng)求有以下缺點(diǎn):

  • 文件與文件之間有插入的上行請(qǐng)求,增加了N-1個(gè)網(wǎng)絡(luò)延遲

  • 受丟包問(wèn)題影響更嚴(yán)重

  • keep-alive方式可能會(huì)出現(xiàn)狀況俗扇,經(jīng)過(guò)代理服務(wù)器時(shí)可能會(huì)被斷開(kāi)硝烂,也就是說(shuō)不能一直保持keep-alive的狀態(tài)

壓縮合并css和js可以減少網(wǎng)站http請(qǐng)求的次數(shù),但合并文件可能會(huì)帶來(lái)問(wèn)題:首屏渲染和緩存失效問(wèn)題铜幽。那該如何處理這問(wèn)題呢滞谢?----公共庫(kù)合并和不同頁(yè)面的合并。

如何進(jìn)行文件合并

  1. 使用在線網(wǎng)站進(jìn)行文件合并

  2. 使用nodejs實(shí)現(xiàn)文件合并(gulp除抛、fis3)

二爹凹、非核心代碼異步加載異步加載的方式

1、異步加載的方式

異步加載的三種方式——async和defer镶殷、動(dòng)態(tài)腳本創(chuàng)建

① async方式

  • async屬性是HTML5新增屬性,需要Chrome微酬、FireFox绘趋、IE9+瀏覽器支持

  • async屬性規(guī)定一旦腳本可用颤陶,則會(huì)異步執(zhí)行

  • async屬性?xún)H適用于外部腳本

  • 如果是多個(gè)腳本,該方法不能保證腳本按順序執(zhí)行

<pre class="" style="margin: 0px; padding: 8px 0px 6px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-style: normal; font-variant: normal; font-weight: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; letter-spacing: 0.544px; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); text-align: start; font-size: 10px; line-height: 12px; overflow-wrap: break-word !important; font-family: consolas, menlo, courier, monospace, 'Microsoft Yahei' !important; border: 1px solid rgb(226, 226, 226) !important; background: rgb(241, 239, 238);">

  1. <script type="text/javascript" src="xxx.js" async="async"></script>

</pre>

② defer方式

  • 兼容所有瀏覽器

  • defer屬性規(guī)定是否對(duì)腳本執(zhí)行進(jìn)行延遲陷遮,直到頁(yè)面加載為止

  • 如果是多個(gè)腳本滓走,該方法可以確保所有設(shè)置了defer屬性的腳本按順序執(zhí)行

  • 如果腳本不會(huì)改變文檔的內(nèi)容,可將defer屬性加入到script標(biāo)簽中帽馋,以便加快處理文檔的速度

③動(dòng)態(tài)創(chuàng)建script標(biāo)簽在還沒(méi)定義defer和async前搅方,異步加載的方式是動(dòng)態(tài)創(chuàng)建script,通過(guò)window.onload方法確保頁(yè)面加載完畢再將script標(biāo)簽插入到DOM中,具體代碼如下:

<pre class="" style="margin: 0px; padding: 8px 0px 6px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-style: normal; font-variant: normal; font-weight: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; letter-spacing: 0.544px; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); text-align: start; font-size: 10px; line-height: 12px; overflow-wrap: break-word !important; font-family: consolas, menlo, courier, monospace, 'Microsoft Yahei' !important; border: 1px solid rgb(226, 226, 226) !important; background: rgb(241, 239, 238);">

  1. function addScriptTag(src){

  2. var script = document.createElement('script');

  3. script.setAttribute("type","text/javascript");

  4. script.src = src;

  5. document.body.appendChild(script);

  6. }

  7. window.onload = function(){

  8. addScriptTag("js/index.js");

  9. }

</pre>

2绽族、異步加載的區(qū)別

1)defer是在HTML解析完之后才會(huì)執(zhí)行姨涡,如果是多個(gè),按照加載的順序依次執(zhí)行

2)async是在加載完之后立即執(zhí)行吧慢,如果是多個(gè)涛漂,執(zhí)行順序和加載順序無(wú)關(guān)

image

其中藍(lán)色線代表網(wǎng)絡(luò)讀取,紅色線代表執(zhí)行時(shí)間检诗,這倆都是針對(duì)腳本的匈仗;綠色線代表 HTML 解析。

三逢慌、利用瀏覽器緩存

對(duì)于web應(yīng)用來(lái)說(shuō)悠轩,緩存是提升頁(yè)面性能同時(shí)減少服務(wù)器壓力的利器。

瀏覽器緩存類(lèi)型

1.強(qiáng)緩存:不會(huì)向服務(wù)器發(fā)送請(qǐng)求攻泼,直接從緩存中讀取資源火架,在chrome控制臺(tái)的network選項(xiàng)中可以看到該請(qǐng)求返回200的狀態(tài)碼,并且size顯示from disk cache或from memory cache坠韩;

相關(guān)的header:

Expires :response header里的過(guò)期時(shí)間距潘,瀏覽器再次加載資源時(shí),如果在這個(gè)過(guò)期時(shí)間內(nèi)只搁,則命中強(qiáng)緩存音比。它的值為一個(gè)絕對(duì)時(shí)間的GMT格式的時(shí)間字符串, 比如Expires:Thu,21 Jan 2018 23:39:02 GMT

Cache-Control :這是一個(gè)相對(duì)時(shí)間氢惋,在配置緩存的時(shí)候洞翩,以秒為單位,用數(shù)值表示焰望。當(dāng)值設(shè)為max-age=300時(shí)骚亿,則代表在這個(gè)請(qǐng)求正確返回時(shí)間(瀏覽器也會(huì)記錄下來(lái))的5分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存熊赖。比如Cache-Control:max-age=300来屠,

簡(jiǎn)單概括:其實(shí)這兩者差別不大,區(qū)別就在于 Expires 是http1.0的產(chǎn)物,Cache-Control是http1.1的產(chǎn)物俱笛,兩者同時(shí)存在的話捆姜,Cache-Control優(yōu)先級(jí)高于Expires;在某些不支持HTTP1.1的環(huán)境下迎膜,Expires就會(huì)發(fā)揮用處泥技。所以Expires其實(shí)是過(guò)時(shí)的產(chǎn)物,現(xiàn)階段它的存在只是一種兼容性的寫(xiě)法磕仅。強(qiáng)緩存判斷是否緩存的依據(jù)來(lái)自于是否超出某個(gè)時(shí)間或者某個(gè)時(shí)間段珊豹,而不關(guān)心服務(wù)器端文件是否已經(jīng)更新,這可能會(huì)導(dǎo)致加載文件不是服務(wù)器端最新的內(nèi)容榕订,那我們?nèi)绾潍@知服務(wù)器端內(nèi)容較客戶端是否已經(jīng)發(fā)生了更新呢店茶?此時(shí)我們需要協(xié)商緩存策略。

2.協(xié)商緩存:向服務(wù)器發(fā)送請(qǐng)求卸亮,服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求的request header的一些參數(shù)來(lái)判斷是否命中協(xié)商緩存忽妒,如果命中,則返回304狀態(tài)碼并帶上新的response header通知瀏覽器從緩存中讀取資源兼贸;另外協(xié)商緩存需要與cache-control共同使用段直。

相關(guān)的header:

①Last-Modified和If-Modified-Since:當(dāng)?shù)谝淮握?qǐng)求資源時(shí),服務(wù)器將資源傳遞給客戶端時(shí)溶诞,會(huì)將資源最后更改的時(shí)間以“Last-Modified: GMT”的形式加在實(shí)體首部上一起返回給客戶端鸯檬。

<pre class="" style="margin: 0px; padding: 8px 0px 6px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-style: normal; font-variant: normal; font-weight: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; letter-spacing: 0.544px; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); text-align: start; font-size: 10px; line-height: 12px; overflow-wrap: break-word !important; font-family: consolas, menlo, courier, monospace, 'Microsoft Yahei' !important; border: 1px solid rgb(226, 226, 226) !important; background: rgb(241, 239, 238);">

  1. Last-Modified: Fri, 22 Jul 2016 01:47:00 GMT

</pre>

客戶端會(huì)為資源標(biāo)記上該信息,下次再次請(qǐng)求時(shí)螺垢,會(huì)把該信息附帶在請(qǐng)求報(bào)文中一并帶給服務(wù)器去做檢查喧务,若傳遞的時(shí)間值與服務(wù)器上該資源最終修改時(shí)間是一致的,則說(shuō)明該資源沒(méi)有被修改過(guò)枉圃,直接返回304狀態(tài)碼功茴,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量 孽亲。如果兩個(gè)時(shí)間不一致坎穿,則服務(wù)器會(huì)發(fā)回該資源并返回200狀態(tài)碼,和第一次請(qǐng)求時(shí)類(lèi)似返劲。這樣保證不向客戶端重復(fù)發(fā)出資源玲昧,也保證當(dāng)服務(wù)器有變化時(shí),客戶端能夠得到最新的資源篮绿。一個(gè)304響應(yīng)比一個(gè)靜態(tài)資源通常小得多孵延,這樣就節(jié)省了網(wǎng)絡(luò)帶寬。

image

但last-modified 存在一些缺點(diǎn):

Ⅰ.某些服務(wù)端不能獲取精確的修改時(shí)間

Ⅱ.文件修改時(shí)間改了亲配,但文件內(nèi)容卻沒(méi)有變

既然根據(jù)文件修改時(shí)間來(lái)決定是否緩存尚有不足尘应,能否可以直接根據(jù)文件內(nèi)容是否修改來(lái)決定緩存策略惶凝?----ETag和If-None-Match

②ETag和If-None-Match:Etag是上一次加載資源時(shí),服務(wù)器返回的response header菩收,是對(duì)該資源的一種唯一標(biāo)識(shí)梨睁,只要資源有變化,Etag就會(huì)重新生成娜饵。瀏覽器在下一次加載資源向服務(wù)器發(fā)送請(qǐng)求時(shí),會(huì)將上一次返回的Etag值放到request header里的If-None-Match里官辈,服務(wù)器只需要比較客戶端傳來(lái)的If-None-Match跟自己服務(wù)器上該資源的ETag是否一致箱舞,就能很好地判斷資源相對(duì)客戶端而言是否被修改過(guò)了。如果服務(wù)器發(fā)現(xiàn)ETag匹配不上拳亿,那么直接以常規(guī)GET 200回包形式將新的資源(當(dāng)然也包括了新的ETag)發(fā)給客戶端晴股;如果ETag是一致的,則直接返回304知會(huì)客戶端直接使用本地緩存即可肺魁。

image

兩者之間對(duì)比首先在精確度上电湘,Etag要優(yōu)于Last-Modified。Last-Modified的時(shí)間單位是秒鹅经,如果某個(gè)文件在1秒內(nèi)改變了多次寂呛,那么他們的Last-Modified其實(shí)并沒(méi)有體現(xiàn)出來(lái)修改,但是Etag每次都會(huì)改變確保了精度瘾晃;如果是負(fù)載均衡的服務(wù)器贷痪,各個(gè)服務(wù)器生成的Last-Modified也有可能不一致。第二在性能上蹦误,Etag要遜于Last-Modified劫拢,畢竟Last-Modified只需要記錄時(shí)間,而Etag需要服務(wù)器通過(guò)算法來(lái)計(jì)算出一個(gè)hash值强胰。第三在優(yōu)先級(jí)上舱沧,服務(wù)器校驗(yàn)優(yōu)先考慮Etag

緩存的機(jī)制

強(qiáng)制緩存優(yōu)先于協(xié)商緩存進(jìn)行,若強(qiáng)制緩存(Expires和Cache-Control)生效則直接使用緩存偶洋,若不生效則進(jìn)行協(xié)商緩存(Last-Modified / If-Modified-Since和Etag / If-None-Match)熟吏,協(xié)商緩存由服務(wù)器決定是否使用緩存,若協(xié)商緩存失效涡真,那么代表該請(qǐng)求的緩存失效分俯,重新獲取請(qǐng)求結(jié)果,再存入瀏覽器緩存中哆料;生效則返回304缸剪,繼續(xù)使用緩存。主要過(guò)程如下:

image

用戶行為對(duì)瀏覽器緩存的影響

1.地址欄訪問(wèn)东亦,鏈接跳轉(zhuǎn)是正常用戶行為杏节,將會(huì)觸發(fā)瀏覽器緩存機(jī)制唬渗;

2.F5刷新,瀏覽器會(huì)設(shè)置max-age=0奋渔,跳過(guò)強(qiáng)緩存判斷镊逝,會(huì)進(jìn)行協(xié)商緩存判斷;

3.ctrl+F5刷新嫉鲸,跳過(guò)強(qiáng)緩存和協(xié)商緩存撑蒜,直接從服務(wù)器拉取資源。

如果想了解更多緩存機(jī)制玄渗,請(qǐng)猛戳 深入理解瀏覽器的緩存機(jī)制

四座菠、使用CDN

大型Web應(yīng)用對(duì)速度的追求并沒(méi)有止步于僅僅利用瀏覽器緩存,因?yàn)闉g覽器緩存始終只是為了提升二次訪問(wèn)的速度藤树,對(duì)于首次訪問(wèn)的加速浴滴,我們需要從網(wǎng)絡(luò)層面進(jìn)行優(yōu)化,最常見(jiàn)的手段就是CDN(Content Delivery Network岁钓,內(nèi)容分發(fā)網(wǎng)絡(luò))加速升略。通過(guò)將靜態(tài)資源(例如javascript,css屡限,圖片等等)緩存到離用戶很近的相同網(wǎng)絡(luò)運(yùn)營(yíng)商的CDN節(jié)點(diǎn)上品嚣,不但能提升用戶的訪問(wèn)速度,還能節(jié)省服務(wù)器的帶寬消耗囚霸,降低負(fù)載腰根。

image

CDN是怎么做到加速的呢?

其實(shí)這是CDN服務(wù)商在全國(guó)各個(gè)省份部署計(jì)算節(jié)點(diǎn)拓型,CDN加速將網(wǎng)站的內(nèi)容緩存在網(wǎng)絡(luò)邊緣,不同地區(qū)的用戶就會(huì)訪問(wèn)到離自己最近的相同網(wǎng)絡(luò)線路上的CDN節(jié)點(diǎn)额嘿,當(dāng)請(qǐng)求達(dá)到CDN節(jié)點(diǎn)后,節(jié)點(diǎn)會(huì)判斷自己的內(nèi)容緩存是否有效劣挫,如果有效册养,則立即響應(yīng)緩存內(nèi)容給用戶,從而加快響應(yīng)速度压固。如果CDN節(jié)點(diǎn)的緩存失效球拦,它會(huì)根據(jù)服務(wù)配置去我們的內(nèi)容源服務(wù)器獲取最新的資源響應(yīng)給用戶,并將內(nèi)容緩存下來(lái)以便響應(yīng)給后續(xù)訪問(wèn)的用戶帐我。因此坎炼,一個(gè)地區(qū)內(nèi)只要有一個(gè)用戶先加載資源,在CDN中建立了緩存拦键,該地區(qū)的其他后續(xù)用戶都能因此而受益谣光。

五、預(yù)解析DNS

資源預(yù)加載是另一個(gè)性能優(yōu)化技術(shù)芬为,我們可以使用該技術(shù)來(lái)預(yù)先告知瀏覽器某些資源可能在將來(lái)會(huì)被使用到萄金。通過(guò) DNS 預(yù)解析來(lái)告訴瀏覽器未來(lái)我們可能從某個(gè)特定的 URL 獲取資源蟀悦,當(dāng)瀏覽器真正使用到該域中的某個(gè)資源時(shí)就可以盡快地完成 DNS 解析。例如氧敢,我們將來(lái)可從 example.com 獲取圖片或音頻資源日戈,那么可以在文檔頂部的 標(biāo)簽中加入以下內(nèi)容:

<pre class="" style="margin: 0px; padding: 8px 0px 6px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-style: normal; font-variant: normal; font-weight: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; letter-spacing: 0.544px; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); text-align: start; font-size: 10px; line-height: 12px; overflow-wrap: break-word !important; font-family: consolas, menlo, courier, monospace, 'Microsoft Yahei' !important; border: 1px solid rgb(226, 226, 226) !important; background: rgb(241, 239, 238);">

  1. <link rel="dns-prefetch" >

</pre>

當(dāng)我們從該 URL 請(qǐng)求一個(gè)資源時(shí),就不再需要等待 DNS 的解析過(guò)程孙乖。該技術(shù)對(duì)使用第三方資源特別有用浙炼。通過(guò)簡(jiǎn)單的一行代碼就可以告知那些兼容的瀏覽器進(jìn)行 DNS 預(yù)解析,這意味著當(dāng)瀏覽器真正請(qǐng)求該域中的某個(gè)資源時(shí)唯袄,DNS 的解析就已經(jīng)完成了,從而節(jié)省了寶貴的時(shí)間鼓拧。 另外需要注意的是,瀏覽器會(huì)對(duì)a標(biāo)簽的href自動(dòng)啟用DNS Prefetching越妈,所以a標(biāo)簽里包含的域名不需要在head中手動(dòng)設(shè)置link。但是在HTTPS下不起作用钮糖,需要meta來(lái)強(qiáng)制開(kāi)啟功能梅掠。這個(gè)限制的原因是防止竊聽(tīng)者根據(jù)DNS Prefetching推斷顯示在HTTPS頁(yè)面中超鏈接的主機(jī)名。下面這句話作用是強(qiáng)制打開(kāi)a標(biāo)簽域名解析

<pre class="" style="margin: 0px; padding: 8px 0px 6px; max-width: 100%; box-sizing: border-box; word-wrap: break-word !important; font-style: normal; font-variant: normal; font-weight: normal; orphans: auto; text-indent: 0px; text-transform: none; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; letter-spacing: 0.544px; border-radius: 0px; overflow-y: auto; color: rgb(80, 97, 109); text-align: start; font-size: 10px; line-height: 12px; overflow-wrap: break-word !important; font-family: consolas, menlo, courier, monospace, 'Microsoft Yahei' !important; border: 1px solid rgb(226, 226, 226) !important; background: rgb(241, 239, 238);">

  1. <meta http-equiv="x-dns-prefetch-control" content="on">

</pre>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末店归,一起剝皮案震驚了整個(gè)濱河市阎抒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌消痛,老刑警劉巖且叁,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秩伞,居然都是意外死亡逞带,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)纱新,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)展氓,“玉大人,你說(shuō)我怎么就攤上這事脸爱∮龉” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵簿废,是天一觀的道長(zhǎng)空入。 經(jīng)常有香客問(wèn)我,道長(zhǎng)族檬,這世上最難降的妖魔是什么歪赢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮导梆,結(jié)果婚禮上轨淌,老公的妹妹穿的比我還像新娘迂烁。我一直安慰自己,他們只是感情好递鹉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布盟步。 她就那樣靜靜地躺著,像睡著了一般躏结。 火紅的嫁衣襯著肌膚如雪却盘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天媳拴,我揣著相機(jī)與錄音黄橘,去河邊找鬼。 笑死屈溉,一個(gè)胖子當(dāng)著我的面吹牛塞关,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播子巾,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帆赢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了线梗?” 一聲冷哼從身側(cè)響起椰于,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仪搔,沒(méi)想到半個(gè)月后瘾婿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烤咧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年偏陪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片髓削。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竹挡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出立膛,到底是詐尸還是另有隱情揪罕,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布宝泵,位于F島的核電站好啰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏儿奶。R本人自食惡果不足惜框往,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闯捎。 院中可真熱鬧椰弊,春花似錦许溅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至清焕,卻和暖如春并蝗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秸妥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工滚停, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥惧。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓键畴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親突雪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镰吵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 又是新的一天
    JianShuRR閱讀 292評(píng)論 0 0
  • 大數(shù)據(jù)時(shí)代這本書(shū)不能說(shuō)他廢話多,也不能說(shuō)她扯張虎皮做大旗挂签,那本書(shū)所做的是對(duì)大數(shù)據(jù)發(fā)展的闡述、現(xiàn)今大數(shù)據(jù)使用的舉...
    文瀾仙域閱讀 192評(píng)論 0 1
  • 孩子的爸在杭州打工盼产,常年不在家饵婆,女兒在本省上大學(xué),常態(tài)是一個(gè)女人帶著兩個(gè)兒子戏售,孩子小學(xué)在讀侨核,額!為什么竟然有倆兒子...
    甜甜芽閱讀 260評(píng)論 1 3