動態語言靜態化

一、什么是動態語言靜態化

將現有PHP等動態語言的邏輯代碼生成為靜態html文件,用戶訪問動態腳本重定向到靜態html的過程

注 : 對實時性要求不高的頁面才適合去做動態語言靜態化

?

二、為什么要靜態化

1. 動態腳本通常會做邏輯計算和數據查詢,訪問量越大,服務器壓力越大

2. 訪問量大時可能會造成CPU負載過高,數據庫服務器壓力過大

3. ?靜態化可以降低邏輯處理壓力,降低數據庫服務器查詢壓力

?

三、靜態化的實現方式

第一種:使用模板引擎

( 1 ) 可以使用smarty的緩存機制生成靜態html緩存文件

$smarty->cache_dir = $ROOT."/cache"; //緩存目錄
$smarty->caching = true;//是否開啟緩存
$smarty->cache_lifetime = '3600';//緩存時間

$smarty->display(string template [, string cache_id [,string compile_id]]);

備注:cache_id 緩存id; ?compile_id 編譯文件id

(2) ?清除smarty緩存

$smarty->clear_all_cache();//清除所有緩存
$smarty->clear_cache('file.html'); //清除指定的緩存
$smarty->clear_cache('article.html',$art_id); //清除該模板下的指定緩存號的緩存

?

第二種: 利用ob系列的函數做靜態化緩存 (推薦)

(1) 相關函數

ob_start();//打開輸出控制緩沖
ob_get_contents();//返回輸出緩沖區內容
ob_clean();//清空輸出緩沖區
ob_end_flush();//沖刷出(送出)輸出緩沖區內容并關閉緩沖

(2) 示例:

<?php
$cache_name = md5(__FILE__).'.html';//定義之后生成緩存文件的文件名$cache_lifetime = 3600;//定義過期時間為1小時//限制條件,條件符合,就加載緩存文件
if(filemtime(__FILE__) <= filemtime($cache_name) && file_exists($cache_name) && filectime($cache_name) + $cache_lifetime > time())
{include $cache_name;//如果在緩存之后沒有進行過修改,并且文件存在,并且沒有過期,我們就加載文件,并且下面內容不再訪問var_dump(filemtime());//測試時用的,看修改文件時,是否還能夠讀取緩存文件exit;
}ob_start(); //開啟緩存?>=========這部分是我們要緩存的內容========<?php$content = ob_get_contents(); //獲取緩存區的內容ob_end_flush();//關閉緩存區$handle = fopen($cache_name,'w');//將文件以寫的方式打開fwrite($handle,$content);//將我們獲取到的緩存內容$content寫入我們定義好的緩存文件fclose($handle); //關閉打開的文件資源?>

?

現在訪問瀏覽器

與此同時,還生成了一個緩存文件,內容和從php文件中獲取到的是一樣的

現在,我們沒有修改文件,再刷新瀏覽器,會出現我們在if語句中輸出的filemtime,這證明if滿足,已經在讀取緩存文件了

現在,我們再修改一下文件,在文字后面加了一個+,如果瀏覽器顯示這個+,并且不輸出文件的修改時間,就證明讀取的不是緩存文件

瀏覽器顯示:

瀏覽器顯示結果帶 + , 證明文件修改之后,就重新讀取文件,然后再刷新

結果證明: 因為文件沒有再被修改,所以又讀取緩存文件了

?

?

代碼源碼下載:?http://download.csdn.net/download/m_nanle_xiaobudiu/10242029

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282617.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282617.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282617.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF-06 樣式(Style)

在我們前面介紹資源的時候&#xff0c;我們提到了樣式表&#xff0c;如果你之前是做Web開發的&#xff0c;你會發現Style有點類似于Web中的CSS。控件級別樣式我們可以在控件級別定義自己的樣式&#xff0c;控件級別的樣式是優先級最高的<Window x:Class"Example_06.Sel…

構建Squid代理服務器-傳統代理、透明代理、反向代理

Squid是Linux系統中最常用的一款開源代理服務軟件&#xff0c;主要提供緩存加速和應用層過濾控制的功能&#xff0c;可以很好的實現HTTP、FTP、DNS查詢以及SSL等應用的緩存代理。 正向代理&#xff1a;根據實現的方式不同&#xff0c;代理服務可分為傳統代理和透明代理。 傳統代…

Struts2之初識

Struts2教程 第一章 初識Struts2 主頁&#xff1a;http://struts.apache.org/ 優勢&#xff1a;用戶請求&#xff0c;模塊處理&#xff0c;頁面展現。適用于企業級開發&#xff0c;便于維護。 配置&#xff1a;web.xml中添加的核心控制器 <filter> <filter-name>St…

數據庫緩存層

一 常見的緩存形式 : 1.文件緩存 (為了避免I/O開銷,盡量使用內存緩存) 2.內存緩存 二 為什么要使用緩存 緩存數據是為了讓客戶端很少甚至不訪問數據庫服務器進行的數據查詢,高并發下,能最大程度降低對數據庫服務器的訪問壓力 一般的數據請求: 用戶請求->數據查詢->…

python面試題~反射,元類,單例

1 什么是反射&#xff1f;以及應用場景&#xff1f; test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 復制代碼import test as ss ss.f1() ss.f2() print(ss.a) 復制代碼我們要導入另外一個模塊,可以使用import.現在有這樣的需求,我…

僅有50Mb大小的cli即可搞定大廠才能玩的CloudIDE丨SmartIDE

作者&#xff1a;徐磊&#xff0c;開源云原生SmartIDE創始人、LEANOSFT創始人/首席架構師/CEO&#xff0c;微軟最有價值專家MVP/微軟區域技術總監Regional Director&#xff0c;華為云最有價值專家。從事軟件工程咨詢服務超過15年時間&#xff0c;為超過200家不同類型的企業提供…

idea-spark-sbt 打包jar

1、打開idea下的terminal窗口 2、只打包部分項目 sbt insight-import/clean insight-import/assembly 這表示只打包主目錄下的insight-import項目 &#xff0c;先清理&#xff08;clean&#xff09;再打包&#xff08;assembly&#xff09;不能用package&#xff0c;這個不會打…

操作Checkbox標簽

在前端開發中&#xff0c;少不了對Checkbox的操作。 常用的的方法有2個&#xff1a;.is()和.prop()方法。前者是判斷 checkbox的狀態&#xff0c;選不是未選。而后者為checkbox設置一個值&#xff0c;可以設置checkbox是true還是false。寫個小例子&#xff0c;練習一下&#xf…

memcache在項目中的應用

一 安裝memcache 具體流程這篇文章有寫到: 點擊 鏈接 二 在項目中應用memcache 為了減輕數據庫的查詢壓力,所以我們把一些不經常變動的數據進行緩存,用戶查詢時,如果查詢的要求是一樣的,我們就memcache緩存中讀取數據并返回去,如果查詢要求變了,我們再到數據庫中查詢,并將查…

點擊回退按鈕刷新頁面

瀏覽器用戶返回上一步&#xff0c;自動刷新window.οnunlοadfunction(){} 這個最簡單粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

Dapr 證書過期了怎么辦? 別慌,有救!

一、背景Dapr 默認證書有效時間是1年&#xff0c;證書過期后就不能執行相關控制面和數據面的交互了&#xff0c;如下圖&#xff1a;二、查看證書有效時間通過dapr mtls expiry 看到期時間&#xff0c;具體參見命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

python數據類型之間的轉換

對python內置的數據類型進行轉換時&#xff0c;可以使用內置函數&#xff0c;常用的類型轉換函數如下 python常用類型轉換函數函數格式使用示例描述int(x [,base])int("8") 可以轉換的包括String類型和其他數字類型&#xff0c;但是會丟失精度 float(x) float…

js高級程序設計的筆記(一)

2019獨角獸企業重金招聘Python工程師標準>>> 1.js中的 null : 如果只意在保存對象的變量還沒有真正的保存對象之前&#xff0c;就需要先把該變量保存 null值&#xff0c; null代表空對象的指針 2.函數的參數對象 arguments的理解。 argument對象的length屬性 實例 f…

Redis在PHP項目中的應用

一 運行redis服務端 出現上圖的圖形,就說明redis服務端開啟成功,并且開啟了密碼功能(如果不加載配置文件,連接redis是不需要密碼的,這樣,會給我們的程序帶來很大隱患) 密碼的設置: 在redis配置文件中,搜索requirepass ,后面設置密碼 比如 : requirepass G506myredis 則表示此…

Linux關機、重啟命令

關機shutdown -h 0 #<O秒后關機shutdown -h now #<現在關機shutdown -h 10 #<10分鐘后關機shutdown -h 23:20 #<23&#xff1a;20分關機shutdown -c #<取消shutdown關機命令init 0 #<立馬關機&#xff08;切換運行級別為0&#xff0c;推薦使用&#xff09;ha…

Python 模塊之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)結果 abc…

md5和password_hash孰好孰壞

md5自不必說,想必所有phper都用過,但另一個加密函數不知道你見過沒有 他就是password_hash(); 加密方式更全面.使用起來也比md5salt這種方式要簡潔很多,最主要的是難破解,因為它每時每刻都在變動 它的使用方式大致是這樣 1. 用戶注冊時提交過來密碼,我們對用戶密碼進行加密…

Logstash 命令行參數

Logstash 提供了一個 shell 腳本叫 logstash 方便快速運行。它支持以下參數&#xff1a; -e意即執行。我們在 “Hello World” 的時候已經用過這個參數了。事實上你可以不寫任何具體配置&#xff0c;直接運行 bin/logstash -e ” 達到相同效果。這個參數的默認值是下面這樣&…

上汽拒絕HW符合商業邏輯

不久前&#xff0c;上汽董事長陳虹表示“與HW合作自動駕駛是不可接受的。這就好比一家公司為我們提供整體的解決方案&#xff0c;如此一來&#xff0c;它就成了靈魂&#xff0c;而上汽就成了軀體。對于這樣的結果&#xff0c;上汽是不能接受的&#xff0c;要把靈魂掌握在自己手…