Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久综合九色婷婷97,午夜精品久久久久久久99热浪潮,91国内精品久久久久免费影院

          整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          web前端必學功法之一:留言板

          web前端必學功法之一:留言板

          # web前端必學功法之一:留言板

          案例效果:

          ![在這里插入圖片描述](https://img-blog.csdnimg.cn/81d380bed5294f54bdc41d63ec79214d.gif#pic_center)

          ```html

          css部分

          <style>

          .container{

          width: 600px;

          }

          .mes-board{

          margin: 25px 0;

          padding: 10px;

          background-color: gray;

          }

          .mes-board li{

          padding: 0.7em;

          list-style: none;

          }

          .mes-board li + li {

          border-top: 1px dashed #ffffff;

          }

          .mes-board h4{

          display: inline;

          margin-right: 10px;

          font-weight: 400px;

          color: #000000;

          }

          .mes-board small{

          color: #999999;

          float: right;

          }

          .mes-board div{

          padding: 0.4em 0;

          text-align: justify;

          font-size: 12px;

          margin-top: 10px;

          }

          </style>

          html部分:

          <div class="container">

          <!--發(fā)送留言-->

          <div class="form-group">

          <label for="userName">用戶姓名:</label>

          <input type="text" class="form-control" id="userName">

          </div>

          <div class="form-group">

          <label for="userName">留言內(nèi)容:</label>

          <textarea class="form-control" rows="3" id="content"></textarea>

          <button class="btn btn-default" id="sendBtn">提交</button>

          <span id="msg" style="color: red;"></span>


          <!--留言列表-->

          <div id="msgBoard" class="mes-board">

          <li>

          <h4>admin</h4>

          <small>2021-04-22 15:34:45</small>

          <div>

          EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEOOOOOO

          PPPPPPPPPPPPPPPPPPPPPPPPPPPPPEEEEEEEEEEEEEEEEEEEEEEEEEEE

          </div>

          </li>

          <li>

          <h4>admin</h4>

          <small>2021-04-22 15:34:45</small>

          <div>

          EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEOOOOOO

          PPPPPPPPPPPPPPPPPPPPPPPPPPPPPEEEEEEEEEEEEEEEEEEEEEEEEEEE

          </div>

          </li>

          </div>

          </div>

          </div>

          ```

          ```javascript

          <!--

          留言板

          實現(xiàn)思路:

          1.獲取用戶姓名與留言內(nèi)容

          2.判斷值是否為空,如果為空,則提示信息

          3.綁定提交按鈕的點擊事件

          4.獲取姓名,留言內(nèi)容以及當前系統(tǒng)時間,拼接成指定的html標簽

          5.將標簽追加到留言表中

          -->

          <script>

          // 發(fā)送留言

          $("#sendBtn").click(function(){

          //獲取用戶姓名

          var userName=$("#userName").val();

          //判斷非空

          if(userName==null || userName.trim()==""){

          $("#msg").html("用戶姓名不能為空!");

          return;

          }

          //獲取留言內(nèi)容

          var content=$("#content").val();

          //判斷非空

          if(content.trim()==""){

          $("#msg").html("請輸入留言內(nèi)容!");

          return;

          }

          //留言數(shù)據(jù)

          var msg="<li><h4>"+userName+"</h4><small>"+formatDate()+"</small>";

          msg +="<div>"+content+"</div></li>";

          //將留言內(nèi)容追加到留言板中

          $("#msgBoard").prepend(msg);


          //清空內(nèi)容與提示信息

          $("#userName").val("");

          $("#content").val("");

          $("msg").val("");


          });


          //格式化時間

          function formatDate(){

          //獲取系統(tǒng)當前時間

          var date=new Date();

          //獲取年月日時分秒

          var str=date.getFullYear()+"-"+(parseInt(date.getMonth())+1)+"-"+date.getDate();

          str +" "+ date.getHours +":"+ date.getMinutes()+":"+date.getSeconds();

          return str;

          }

          </script>

          文共1482字,預計學習時長6分鐘


          圖源:papan01


          2020最熱門的Javascript框架新鮮出爐啦。為什么要使用流行框架?其優(yōu)點在于運行快效率高,方便省事易上手。


          這六個JS框架,真的值得你好好學習。


          一、Vue.js


          圖源:modernweb


          Vue.Js是開源框架,它以一些主要的JS框架為基礎,比如Angular和React。Vue.Js具備一系列有用的特性,多年來,Vue一直為許多單頁Web應用(SPA)和跨平臺應用提供簡單有效的解決方案。


          使用Vue.js構建的頂級網(wǎng)站:


          · Gitlab


          訪客人數(shù):2211萬


          Gitlab是一個基于web的源代碼版本控制庫。它有多個會員選項,個人/組織可以根據(jù)自己的需求進行選擇。該應用是在前端使用Vue開發(fā)的。


          圖源:unsplash


          · Behance


          訪客人數(shù):4929萬人


          Behance是平面設計師向世界展示其才華的而廣泛使用的網(wǎng)站之一。這里使用的Vue.JS是一種前端編程語言。


          二、Next.Js


          Next.Js是用開源框架編寫的JavaScript,主要用于開發(fā)高度可定制的基于web的應用程序。其創(chuàng)建者將其宣傳為一個零配置、單命令的React應用工具鏈。


          圖源:soshace


          Next.js的特性:


          1.Next.Js讓用戶可以用JavaScript 和 React.Js來開發(fā)應用程序。用 Next.Js來創(chuàng)建應用程序非常簡單。

          2.可以進行更小規(guī)模構建、更快的開發(fā)編譯,還有許多其他改進。

          3.自動代碼拆分、基于文件系統(tǒng)的路徑選擇、熱代碼重新加載和通用呈現(xiàn)——頁面只呈現(xiàn)它們需要的庫和JavaScript,僅此而已。


          該應用程序不是生成一個包含所有應用程序代碼的單一JavaScript文件,而是由Next.js在幾個不同的資源中自動分解。


          三、Riot.Js


          Riot.Js專注于為用戶提供最有效和最簡單的架構。Riot.Js的特性包括以下幾點:


          圖源:jscrambler


          1.Riot.Js使用戶能夠在頁面和web應用程序中應用自定義的HTML標簽,還可以重用這些標簽。

          2.該架構高度關注微功能,使用戶可以在同一時間單獨處理不同的應用程序。

          3.這個框架類似于polymer和react.js。然而,與這兩個框架相比,它更有組織性和緊湊性。


          四、Aurelia


          Aurelia堪稱現(xiàn)代最干凈的框架之一,符合理想的web標準。Aurelia因其能創(chuàng)建強大而完美的網(wǎng)站而被認為是下一代框架。


          圖源:github


          Aurelia的最佳特性包括:


          1.Aurelia能與任何對象進行強有力的反應性結(jié)合。通過使用自適應技術,Aurelia選擇了最有效的方法來觀察模型中的每個屬性,并自動將用戶界面和狀態(tài)同步到最佳性能。

          2.該框架是高度可擴展的。使用這個框架,可以輕松地添加或刪除其他工具(JQuery、React)、JS庫。

          3.Aurelia是開源框架。這意味著開發(fā)者將從Aurelia社區(qū)獲得大量的幫助。

          4.Aurelia是完全獨立的框架,具有許多有用的內(nèi)置工具,如端到端功能。


          五、WebRx


          WebRx 是基于瀏覽器的模型-視圖-視圖-模型構建的JavaScript框架。它將編程的響應性和功能性結(jié)合在一起,為用戶提供了一個漂亮的用戶界面環(huán)境。


          WebRx


          WebRx的最佳性能:


          1.該框架提供了演示性的雙向數(shù)據(jù)綁定,可自動更新基本數(shù)據(jù)存儲。

          2.WebRx 提供了一種有效的收集處理方法,包括過濾投影、分頁和許多其他功能。

          3.該框架提供了由不同消息總線提供的強大的組件間通信。這樣,用戶就更容易在一個或幾個應用程序之間建立通信了。


          六、Angular


          Angular是一個成熟的框架,但并不像React那樣靈活。該框架內(nèi)置了一切,但許多開發(fā)人員不喜歡這一點。

          圖源:medium


          開發(fā)人員喜歡為了解決問題而探索各種工具和庫。但是Angular堅持己見,并沒有為開發(fā)人員提供其他框架那種靈活性。


          這是一個強大的JavaScript框架,可以無縫地組織項目。一旦開始使用,它那令人難以置信的速度和多功能性真讓人著迷。


          選擇一個滿足你的需求和興趣的框架,然后開始練習吧!


          留言點贊關注

          我們一起分享AI學習與發(fā)展的干貨

          如轉(zhuǎn)載,請后臺留言,遵守轉(zhuǎn)載規(guī)范

          個網(wǎng)站, 可大可小, 大到整個阿里巴巴, 小到你自己的博客, 留言板. 雖然所采用的技術不一樣, 規(guī)模不一樣, 但是都由一些執(zhí)行相同作用的組件所構成的, 當然根據(jù)規(guī)模的不同, 要實現(xiàn)的功能的不同, 有一些組件并不一定是必須, 但是當一個項目從小到大的演變過程中, 需要加入的組件都是大致功能類似的. 下面我們就從最簡單的Web項目開始, 到隨著功能, 規(guī)模的遞增, 看看有那些組件需要加入, 和各自的作用.

          1. 種子規(guī)模

          這個規(guī)模的項目最好的實例就是個人博客, 留言板, 公司介紹網(wǎng)站等, 基本結(jié)構如下


          種子規(guī)模項目結(jié)構

          這是最簡單的模式, 基本上可以概括為 請求-響應 模式. 主要的組件是由Web框架 和 數(shù)據(jù)庫兩個部分組成, Web框架負責為開發(fā)者提供基礎的應用程序結(jié)構和功能: 1. 接收HTTP請求 2.渲染返回的HTML頁面, 數(shù)據(jù)庫則負責持久化數(shù)據(jù): 比如留言的內(nèi)容.

          隨著使用人數(shù)的上升, 性能很快入不敷出, 你開始覺得訪問的時候速度不如原來快了. 但是你在用top命令查看系統(tǒng)開銷的時候會發(fā)現(xiàn), 其實系統(tǒng)的CPU占用并不是很高. 原來這個時候大部分的時候CPU都在等帶數(shù)據(jù)庫查詢的結(jié)果, 而數(shù)據(jù)庫查詢結(jié)果很多時候是重復的, 比如當沒有人留言的時候, 返回的最新留言列表. 為了避免無謂的IO開銷, 我們需要用一個比數(shù)據(jù)庫快N倍的存儲設備來緩存查詢的結(jié)果, 這樣當我們發(fā)現(xiàn)查詢結(jié)果不會有變化的時候, 就能通過更快的存儲設備拿到結(jié)果, 比如內(nèi)存就是用戶級應用程序能訪問的最快, 而且現(xiàn)在看來容量也夠大(將來會越來越大)的存儲設備了. 這個時候我們需要引入一個新的組件: 內(nèi)存緩存

          2. 發(fā)芽規(guī)模(開始擴展了)

          引入緩存后, 項目的基本結(jié)構如下圖所示:


          帶緩存的項目結(jié)構


          目前最常用的內(nèi)存緩存基本上就MemoryCache和Redis兩個了, MemoryCache就是個單存的內(nèi)存緩存, 而Redis不光快, 還是個啥都能干的萬金油, 你可以將其視作為一個在線內(nèi)存數(shù)據(jù)結(jié)構服務, 除了KV之外還提供了SET, List, Hash等多種數(shù)據(jù)結(jié)構, 功能太強我們后面還會提到詳細說.

          緩存大體上有兩種使用的方式, 一種是輸出緩存, 另一種是數(shù)據(jù)緩存.

          輸出緩存是作用在Web框架輸出端, 基本的作用過程是這樣子的.


          輸出緩存執(zhí)行邏輯



          當讀取的頻率大于寫入或者更新的時候, 輸出緩存能夠很大程度上的提升性能, 因為大部分原本需要通過數(shù)據(jù)庫去獲取的數(shù)據(jù)直接通過內(nèi)存獲得了, 而內(nèi)存的速度是數(shù)據(jù)庫的N倍, 所以系統(tǒng)的容量能夠成倍的增長.

          但是, 如果輸出的內(nèi)容需要在數(shù)據(jù)的基礎上做一些處理, 比如返回了留言列表, 但是要根據(jù)和當前日期的比對顯示留言的時間, 最近的幾條顯示諸如: 剛剛, 1分鐘前, 半小時前... 等. 隨著時間的變動, 返回的留言沒變, 但是留言時間的顯示需要變化, 那么這個時候輸出緩存就無能為力了, 我們需要數(shù)據(jù)緩存來滿足需求.

          數(shù)據(jù)緩存的執(zhí)行邏輯如下圖所示:


          數(shù)據(jù)緩存執(zhí)行邏輯



          但是這兩種緩存模式都是在項目中根據(jù)需要來使用, 大多數(shù)時候一個項目中兩種模式都會存在.在實際的項目中緩存并非只有自建一種選擇, 還有客戶端緩存和CDN之類的緩存形式, 我們在緩存的部分專門展開來詳細介紹.

          隨著規(guī)模的增長, 功能的增加, 有的時候我們需要在項目中增加一些很耗時的操作, 比如上傳了視頻后需要壓縮視頻等操作, 會產(chǎn)生大量的IO等待, 又比如一些匯總查詢, 都是很耗時的操作, 這個時候我們就需要將這些操作放到別的進程去執(zhí)行, 那么就又需要加入兩個新的組件: 消息總線和任務服務.

          3.小苗規(guī)模

          這個階段呢, 有一些需求會需要訪問慢IO, 或者產(chǎn)生高CPU運算的任務, 會嚴重影響系統(tǒng)的吞吐量. 這個時候我們需要充分的運用多核CPU的優(yōu)勢, 將耗時的工作交給別的CPU去搞定, 所以需要一個進程管理器來管理一組進程來專門接收-執(zhí)行這些任務, 而為了通知這些進程來獲取要執(zhí)行任務的數(shù)據(jù), 需要消息總線來負責在Web應用和進程管理器之間來傳遞消息.

          加上這兩個組件后, 項目的結(jié)構變成了這樣子:



          在這個階段, 我們已經(jīng)可以精細的將不同開銷的任務解藕開, 將高開銷, 高耗時的邏輯從Web的主進程中剝離出來, 從而滿足進一步擴大系統(tǒng)吞吐量的目的.

          而消息服務的引入進一步擴展了系統(tǒng)的彈性, 我們可以將不同的功能分解成獨立的服務, 各自通過消息服務整合起來, 從而實現(xiàn)了整個系統(tǒng)的微服務化.

          在這個結(jié)構下, 一個開銷很大的請求的執(zhí)行過程如下:


          由任務服務處理的請求執(zhí)行過程



          在這個階段, 各個模塊已經(jīng)實現(xiàn)了基本上的解藕, 無論是功能或者容量上的擴展都比較方便了, 所以接下來的目標就是針對一個特殊的需求添加必要的組件了

          4. 小樹規(guī)模(生長枝條)

          演變到這個階段, 系統(tǒng)的大體模型已經(jīng)固定下來了, 生下來的是根據(jù)不同的需要添加一些特殊的組件了.結(jié)構如下:



          4.1 全文檢索

          在傳統(tǒng)的關系型數(shù)據(jù)庫中, 類似 Like '% 張三 %' 這類的查詢都是會丟失索引, 所以類似這樣的查詢只有通過全文檢索引擎來搜索才能有足夠的效率, 在互聯(lián)網(wǎng)領域用得最多的MySQL在全文檢索方面的功能太過于孱弱, 所以現(xiàn)在而今眼目下業(yè)內(nèi)大多用Solr, Elasticsearch等全文檢索引擎來提供全文檢索服務. 如果你是PostgreSQL黨的話就會省心很多, 數(shù)據(jù)庫自帶的Gist, Gin, Brin這些類型的索引都能提供很好的全文檢索能力.

          4.2 日志系統(tǒng)(收集+存儲+檢索)

          當整個系統(tǒng)都微服務化后, 服務進程數(shù)量很多, 且會分布在不同的主機上, 這個時候再將日志寫到本地磁盤上, 采集整理日志會非常的痛苦, 所以需要統(tǒng)一的日志系統(tǒng)來處理系統(tǒng)日志.

          一般的日志系統(tǒng)都是由 前端采集器 - 采集對列 - 寫入器 三個部分構成, 數(shù)據(jù)存儲基本上都由全文檢索引擎來搞定了, 這樣方便了后續(xù)對日志的處理.

          4.3 LBS索引

          在傳統(tǒng)的關系型數(shù)據(jù)庫中沒有Gist索引, 所以沒有辦法對經(jīng)緯度等數(shù)據(jù)進行索引, 所以需要單獨的LBS索引服務. 當然對于PostgreSQL來說并沒有這個必要.

          4.4 OLAP數(shù)據(jù)倉庫(數(shù)據(jù)分析)

          我們常用的MySQL, PostgreSQL都是OLTP型的關系型數(shù)據(jù)庫, 也就是針對聯(lián)機事務處理優(yōu)化模式工作的數(shù)據(jù)庫, 俗話說就是針對 增刪改查等操作專門優(yōu)化, 跑起來傻快傻快的, 但是對于要做匯總查詢之類的就速度上不行了. 如果要對數(shù)據(jù)進行專門的挖掘鉆取的話, 需要把數(shù)據(jù)存入專門對數(shù)據(jù)分析優(yōu)化的OLAP類型的數(shù)據(jù)倉庫中. 術業(yè)有專攻, 這個領域不是強項所以簡略帶過, 后面有機會再詳細說

          以上所有的服務我們在后面都有相應的主題來詳細描述, 這里就簡略帶過了.

          5. 大樹規(guī)模(群集化, 超大規(guī)模)

          在這個階段, 結(jié)構得到了充分的展開, 每一個組件充分的解藕, 就能夠根據(jù)具體的系統(tǒng)負載來針對特定的瓶頸來優(yōu)化, 擴容, 升級. 這個時候并沒有一個固定的模式了, 不同的業(yè)務需求, 不同的數(shù)據(jù)類型都會造成在這個階段的需求是不一樣的, 結(jié)構也是不一樣的, 所以我們會單獨拿一個主題來詳細說明.

          下一節(jié)主題: Web框架如何快速入門

          to be continue...


          主站蜘蛛池模板: 天天看高清无码一区二区三区| 亚洲一区二区免费视频| 精品一区二区三区无码免费直播| 亚洲无圣光一区二区 | 国产精品一区二区三区高清在线| 亚洲av乱码一区二区三区按摩| 在线电影一区二区三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品一区二区三区在线视频| 久久精品一区二区免费看| 一区二区三区无码被窝影院| 色一情一乱一伦一区二区三区日本| 国产一区二区三精品久久久无广告| 久久精品一区二区| 韩国资源视频一区二区三区| 国产伦精品一区二区免费 | 日本免费一区尤物| 亚洲啪啪综合AV一区| 99热门精品一区二区三区无码| 国产一区高清视频| 人妻激情偷乱视频一区二区三区| 少妇一晚三次一区二区三区| 亚洲男人的天堂一区二区| 男女久久久国产一区二区三区| 国产精品熟女视频一区二区| 亚洲毛片αv无线播放一区 | 一区在线免费观看| 麻豆一区二区99久久久久| 一区二区三区杨幂在线观看| 在线中文字幕一区| 国产成人片视频一区二区| 国产精品一区二区久久精品涩爱| 一区二区三区高清视频在线观看| 69久久精品无码一区二区| 中文字幕一区二区免费| 国产伦精品一区二区| 99在线精品一区二区三区| 日本免费电影一区二区| 美女视频免费看一区二区| 一区二区亚洲精品精华液| 色婷婷一区二区三区四区成人网 |