整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML+PHP超大視頻上傳實例

          TML+PHP超大視頻上傳實例,PHP批量上傳大文件技巧,PHP批量上傳大文件,PHP實現批量上傳圖片的技巧,PHP結合WEB UPLOADER插件實現分段,PHP結合WEB UPLOADER插件實現切片上傳,PHP結合WEB UPLOADER插件實現斷點續傳,PHP結合WEB UPLOADER插件實現大文件上傳,PHP結合UPLOADER插件實現分片上傳文件,PHP結合百度UPLOADER插件實現分片上傳文件,PHP結合WEB UPLOADER插件實現分片上傳文件,前端HTML5,JS,JQ,VUE2,VUE3,React,

          前端的話都有可能用到,VUE2,VUE3,HTML5,也不一定是VUE, 公司內部有自己的產品,有些產品是之前開發的,沒有用VUE,而是用的普通的HTML模板,用的也還好。

          后端PHP5,PHP6,PHP7,PHP8,ThinkPHP,

          客戶是武漢這邊的一家企業。

          webuploader的組件公司研發部的同事也調研過,研究過他的實現,實際上他就是對Flash和HTML5進行了一個封裝,本質還是調的HTML5的API,兼容性不是特別好。可擴展性也比較差,可維護性就更不用說了,之前公司項目遇到過坑,到現在連webuploader開發人員都聯系不上。想找他們尋求一點技術支持的幫助,真的是想都不要想。公司這一塊也愿意付費,就是付費尋求的技術支持,也不行。這一點真的讓哥幾個給整郁悶了。領導也不太滿意,所以還是找有技術支持的產品。研發部的同事稱這些項目是免費坑人項目。

          服務器支持Linux,Windows,macOS,CentOS,中標麒麟,銀河麒麟,統信,龍芯,華為鯤鵬,

          數據庫支持MySQL,達夢數據庫,人大金倉

          需要提供前端源碼,后端源碼,控件源碼

          需要提供7*24小時技術支持,長期技術支持,長期維護服務

          需要提供手機,QQ,微信,企業微信,電子郵箱等聯系方式

          需要支持包含IE在內的全部瀏覽器

          終端需要支持Windows,macOS,Linux,信創國產化環境,中標麒麟,銀河麒麟,統信UOS,龍芯,華為

          功能需要支持10G,50G,100G大文件上傳和斷點續傳,刷新續傳,重啟續傳

          支持超大文件分片,分段,分塊,分割上傳下載,斷點續傳

          支持文件夾上傳,下載斷點續傳,支持文件夾層級結構,層級結構信息保存到數據庫,下載的時候同樣保留層級結構

          支持加密上傳,下載加密,端到端加密,國密SM4加密算法,數據加密傳輸,傳輸過程中要保證數據是加密的。

          版本:6.5.40

          代碼:https://gitee.com/xproer/up6-php/tree/6.5.40/

          安裝環境

          PHP:7.2.14

          調整塊大小

          NOSQL

          NOSQL不需要任何配置,可以直接訪問測試

          SQL

          創建數據庫

          您可以直接復制腳本進行創建

          配置數據庫連接

          6.安裝依賴

          訪問頁面進行測試

          數據表中的數據

          相關參考:

          文件保存位置

          php5教程,

          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
          控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc

          景介紹:當我們在從事大項目或團隊開發工作時,我們經常會發現我們寫的代碼,凌亂、難以閱讀并且難以擴展。尤其是當一段時候后我們回頭再看自己的代碼,必須回想起當初自己寫的時候的思路才能看懂。

          因此,人們嘗試在代碼風格上保持統一,然而,最大的困難是:修改一個較小的問題,都可能創建更多丑陋的 hack,也可能 CSS 的小改變會影響 JavaScript 的功能。但是這些問題能在我們的項目開始的時候精心規劃,就能很大程度上避免這些問題。今天就來討論一下如何寫一份不錯的CSS代碼

          一個好的css代碼是什么樣的呢

          • 保持樣式表可維護
          • 保持代碼可讀性
          • 保持樣式表的可擴展性

          要保持良好的CSS代碼,首先需要訂立一致的CSS團隊規范,這就必須從CSS架構講起。

          CSS架構

          目前CSS主要有以下五種設計架構

          1. OOCSS

          面向對象的CSS,

          • 結構和主題分離 - 減少對 HTML 結構的依賴
          • 主題和主題分離 - 增加樣式的復用性

          在OOCSS的基礎上,出現了另一種設計模式

          2. BEM

          也可以被當成一種命名規范,本質上使頁面結構清晰

          塊(Block)、元素(Element__)、修飾符(Modifier--)

          有以下幾個規則

          • Block元素應該以元素本身的屬性為主
          • Element則以元素位置和形狀為主
          • Modifier則修飾當前的狀態和主題
          • Element一定是在Block之中,而不能獨立于Block之外
          • Modifier則更多的表示當前組件的形狀和狀態

          可以明顯發現

          • 結構清晰
          • 定位迅速
          • 功能明確

          在面對組件化的場景時,Block 代表邏輯上和功能上獨立的頁面組件。Element封裝了行為(JavaScript)、模板、樣式(CSS)和其他實現技術。

          舉個例子

          <header class="header">
              <img class="logo">
              <form class="search-form">
                  <input class="input">
                  <button class="button"></button>
              </form>
              <ul class="lang-switcher">
                  <li class="lang-switcher__item">
                      <a class="lang-switcher__link" href="url">en</a>
                  </li>
                  <li class="lang-switcher__item">
                      <a class="lang-switcher__link--active" href="url">ru</a>
                  </li>
              </ul>
          </header>
          • block-name__element-name--modifier-name--modifier-value

          在React當中,也采用了這樣的命名方式

          BEMnaming工具[1],提供BEM命名的檢測

          然而在面對大型的項目時CSS的凌亂也很難讓開發者愿意在茫茫多的代碼中尋找可復用的代碼

          3. SMACSS

          (What’s Smacss)[https://smacss.com/]

          設計的主要規范有三點:

          • Categorizing CSS Rules(為css分類)
          • Naming Rules(命名規范)
          • Minimizing the Depth of Applicability(最小化適配深度)

          為了實現清晰的CSS結構,將CSS分為

          • Base - 全局樣式,如global-reset、normalize.css
          • Layout - 頁面布局,如grid
          • Module - 組件布局
          • State - 元素狀態,如visible、hidden
          • Theme or Skin - 更多是具體主題的配置樣式
          • JavaScript 勾子 (JavaScript hooks)

          其中尤其建議JavaScript解除和樣式的耦合

          <button class="btn btn--buy js-buy-now"></button>

          命名規范上出現了一些差異

          .layout-header
          .is-hidden
          .theme-nav

          最小化適配深度,減少html和css的耦合度,避免html的變動增加對css的影響

          .sidebar ul h3 {}
          
          
          .side {}

          4. ITCSS

          對CSS進行了更加詳細的分層

          如果從功能的角度上看呢,是將Base分成了Settings、Tools、Generic和Base,而Objects、Components和Trumps則分別對應Layout、Module、(State、Theme),而這樣設計的好處在于可以將代碼的復用性進一步提升

          5. ACSS

          一個樣式屬性一個類,其中的典型代表就是TailwindCSS[2],缺點則是破壞了語義化

          .block{ display: block; }
          .hidden { display: none; }
          .p-2 { padding: 0.75rem; }
          .flex { display: flex; }
          .text-base { font-size: 1rem; }
          .bg-green-200 { background-color: #123456 }
          
          
          <div className="m-2 p-2 text-2xl text-gray-500">I am Ok</div>

          而上述的架構思想,更多則是需要團隊成員的一致性認同,才能實現在代碼風格上的統一。

          除了這些開發自律性上的代碼規范外,還有什么其他的方式來提升CSS質量呢?

          CSS預處理器

          在預處理器中,同樣提供了眾多的方法來簡化與控制CSS代碼,以stylus為例

          1. 變量

          font-size = 14px
          
          
           body
             font font-size Arial, sans-serif
             
          pad(types = padding, n = 5px)
              if padding in types
                padding n
              if margin in types
                margin n
          
          
          body
              pad()
          body
              pad(margin)
          body
              pad(padding margin, 10px)
              
          // Yields:
          body {
              padding: 5px;
          }
          body {
              margin: 5px;
          }
          body {
              padding: 10px;
              margin: 10px;
          }

          2. 函數

           add(a, b = a)
             a + b
          
          
           add(10, 5)
           // => 15
           
            get(hash, key)
              return pair[1] if pair[0] == key for pair in hash
              
            hash = (one 1) (two 2) (three 3)
            
            get(hash, two)
            // => 2
          
          
            get(hash, three)
            // => 3
          
          
            get(hash, something)
            // => null

          3. 內建函數

          // 提取顏色分量
          red(#c00)
          // => 204
          
          
          red(#000, 255)
          // => #f00

          4. 插值

          // 屬性插值
          vendor(prop, args)
              -webkit-{prop} args
              -moz-{prop} args
              {prop} args
          
          
          border-radius()
              vendor('border-radius', arguments)
          
          
          box-shadow()
              vendor('box-shadow', arguments)
          
          
          button
              border-radius 1px 2px / 3px 4px
          
          
              
          // Yields:    
          
          
          button {
              -webkit-border-radius: 1px 2px / 3px 4px;
              -moz-border-radius: 1px 2px / 3px 4px;
              border-radius: 1px 2px / 3px 4px;
            }
            
          // 選擇器插值  
          table
            for row in 1 2 3 4 5
              tr:nth-child({row})
                height: 10px * row
                
                
          // Yields:  
            
          table tr:nth-child(1) {
            height: 10px;
          }
          table tr:nth-child(2) {
            height: 20px;
          }
          table tr:nth-child(3) {
            height: 30px;
          }
          table tr:nth-child(4) {
            height: 40px;
          }
          table tr:nth-child(5) {
            height: 50px;
          }    
          
          
          mySelectors = '#foo,#bar,.baz'
          
          
          {mySelectors}
            background: #000
            
            
          Yields:
          
          
          #foo,
          #bar,
          .baz {
            background: #000;
          }  
          
          
          // 對象插值
          foo = {
            width: 10px,
            height: 20px,
            '&:hover': {
              padding: 0
          
          
            }
          }
          
          
          .bar
            {foo}
          
          
          
          
          Yields:
          
          
          // => .bar {
          //      width: 10px;
          //      height: 20px;
          //    }
          //    .bar:hover {
          //      padding: 0;
          //    }

          5. @EXTEND

             form
               input[type=text]
                 padding: 5px
                 border: 1px solid #eee
                 color: #ddd
          
          
             textarea
               @extends form input[type=text]
               padding: 10px
               
               
              //Yielding:
              
              form input[type=text],
              textarea {
                padding: 5px;
                border: 1px solid #eee;
                color: #ddd;
              }
              textarea {
                padding: 10px;
              }

          對于維護一份高質量的CSS代碼,注釋和間隔必不可少

          以下是一種比較建議的注釋和間隔方式,可以自行取用。

          /*------------------------------------*\
            #A-SECTION
          *------------------------------------*/
          
          
          .selector { }
          
          
          
          
          /*------------------------------------*\
            #ANOTHER-SECTION
          *------------------------------------*/
          
          
          /**
           * Comment
           */
          
          
          .another-selector { }

          除了縮進,我們還可以通過在規則集之間自由而明智地使用空格來提供大量信息。我們用:

          • 密切相關的規則集之間的一 (1) 條空行。
          • 松散相關的規則集之間的兩 (2) 條空行。
          • 全新部分之間的五 (5) 行空行。
          // good case
          /*------------------------------------*\
            #FOO
          *------------------------------------*/
          
          
          .foo { }
          
          
            .foo__bar { }
          
          
          
          
          .foo--baz { }
          
          
          // bad case
          .foo { }
            .foo__bar { }
          .foo--baz { }

          同理,在html結構中,也可以使用同樣的規則。

          除了以上這些,還有眾多的規范和優化可以繼續探索,如選擇器性能,CSS嵌套,有興趣的讀者可以繼續探索

          你會認為 CSS規范是一個有點宏大和不必要的概念:為什么這么簡單、這么直接的東西需要像架構一樣被設計成非常復雜的東西?!

          正是因為CSS 的簡單性、松散性和不守規矩的性質意味著在任何合理規模上管理(閱讀、馴服)它的最佳方式是通過嚴格和特定的架構。堅實的架構可以幫助我們控制我們的特殊性,強制執行命名約定,管理我們的源代碼順序,創建一個健全的開發環境,并且通常使我們的 CSS 項目管理更加一致和舒適。

          總的來說,可以依照一下幾個規則訂立團隊/個人代碼規范,保證代碼的一致性

          建議的幾個原則

          單一職責原則: 每個 CSS 實現都必須有一個單一的責任。

          Correct:
              .button {
                  font-family: Arial, sans-serif;
                  border: 1px solid black;
                  background: #fff;
              }
              .header__button {
                  margin: 30px;
                  position: relative;
              }
              
          Incorrect:
              .header__button {
                  font-family: Arial, sans-serif;
                  position: relative;
                  border: 1px solid black;
                  margin: 30px;
              }

          開閉原則: 元素應該通過修飾符擴展,而不是直接在原有基礎上修改。

          Original:
              <button class="button">...</button>
              .button {
                  font-family: Arial, sans-serif;
                  text-align: center;
                  font-size: 11px;
                  line-height: 20px;
              }
              
          Extend
              <button class="button button_size_s">...</button>
              .button {
                  font-family: Arial, sans-serif;
                  text-align: center;
                  font-size: 11px;
                  line-height: 20px;
              }
              .button_size_s {
                  font-size: 13px;
                  line-height: 24px;
              }

          DRY原則:將有意義的重復規范化和抽象化

          巧用mixin和extend
          @mixin my-web-font() {
            font-family: "My Web Font", sans-serif;
            font-weight: bold;
          }
          
          
          .btn {
            display: inline-block;
            padding: 1em 2em;
            @include my-web-font();
          }
          
          
          .foo {
            color: red;
          }
          .bar {
            @extend .foo;
          }

          組合優于繼承和關注點分離

          // 將寫js的方式同樣適用在css上
          <div class="layout">
          
          
            <div class="layout__item  two-thirds">
              <section class="content">
                ...
              </section>
            </div>
          
          
            <div class="layout__item  one-third">
              <section class="sub-content">
                ...
              </section>
            </div>
          
          
          </div>

          參考文獻

          BEM簡介[3]

          OOCSS介紹[4]

          探索 SMACSS:可擴展的模塊化 CSS 框架[5]

          編寫高效的 CSS 選擇器[6]

          CSS的單一原則[7]

          思考CSS架構[8]

          參考資料

          [1]BEMnaming工具: https://github.com/bem/bem-sdk#naming

          [2]TailwindCSS: https://www.tailwindcss.cn/

          [3]BEM簡介: https://en.bem.info/methodology/quick-start/

          [4]OOCSS介紹: http://oocss.org/

          [5]探索 SMACSS:可擴展的模塊化 CSS 框架: https://zhuanlan.zhihu.com/p/44851489

          [6]編寫高效的 CSS 選擇器: https://csswizardry.com/2011/09/writing-efficient-css-selectors/

          [7]CSS的單一原則: https://csswizardry.com/2012/04/the-single-responsibility-principle-applied-to-css/

          [8]思考CSS架構: https://zhuanlan.zhihu.com/p/32952130

          板基于 vue-cli4 和 Vant-ui 搭建,進行大型 H5 項目開發最佳實踐方案,讓我們來一探究竟

          項目結構

          本項目已經為你生成了一個完整的開發框架,下面是整個項目的目錄結構。

          ├── .github                    # git log
          ├── plop-templates             # 基本模板
          ├── public                     # 靜態資源
          │   │── favicon.ico            # favicon圖標
          │   └── index.html             # html模板
          ├── src                        # 源代碼
          │   ├── assets                 # 靜態資源
          │   ├── components             # 全局公用組件
          │   ├── constants              # 常量
          │   ├── core                   # 分層
          │   ├── enum                   # 枚舉
          │   ├── filters                # 全局 filter
          │   ├── icons                  # 項目所有 svg icons
          │   ├── lang                   # 國際化 language
          │   ├── layout                 # 全局 layout
          │   ├── router                 # 路由
          │   ├── store                  # 全局 store 管理
          │   ├── styles                 # 全局樣式
          │   ├── utils                  # 全局公用方法
          │   ├── pages                  # pages 所有頁面
          │   ├── pwa                    # 漸進式Web應用
          │   ├── App.vue                # 入口頁面
          │   ├── main.js                # 入口文件 加載組件 初始化等
          │   └── permission.js          # 權限管理
          ├── tests                      # 測試
          ├── .editorconfig              # 代碼風格
          ├── .env.xxx                   # 環境變量配置
          ├── .eslintrc.js               # eslint 配置項
          ├── .sentryclirc.js            # 前端異常日志監控配置
          ├── .babel.config              # babel 配置
          ├── plopfile.js                # 基本模板配置
          ├── vue.config.js              # vue-cli 配置
          ├── postcss.config.js          # postcss 配置
          └── package.json               # package.json
          ...
          

          安裝

          # 克隆項目
          git clone https://github.com/push-over/vue-h5-template.git
          
          # 進入項目目錄
          cd vue-h5-template
          
          # 安裝依賴
          npm install
          
          # 建議不要用 cnpm 安裝 會有各種詭異的bug 可以通過如下操作解決 npm 下載速度慢的問題
          npm install --registry=https://registry.npm.taobao.org
          
          # 本地開發 啟動項目
          npm start
          

          TIP

          強烈建議不要用直接使用 cnpm 安裝,會有各種詭異的 bug,可以通過重新指定 registry 來解決 npm 安裝速度慢的問題。若還是不行,可使用 yarn 替代 npm。

          Windows 用戶若安裝不成功,很大概率是node-sass安裝失敗,解決方案。

          另外因為 node-sass 是依賴 python環境的,如果你之前沒有安裝和配置過的話,需要自行查看一下相關安裝教程。

          啟動完成后會自動打開瀏覽器訪問 [http://localhost:9000, 你看到下面的頁面就代表操作成功了。

          接下來你可以修改代碼進行業務開發了,本項目內建了典型業務模板、模擬數據、狀態管理、國際化、全局路由等等各種實用的功能來輔助開發

          常用命令

          # 項目打包
          npm run build:xxx
          
          # 自動創建
          npm run new
          
          # 規范Git提交
          npm run git-cz
          
          # 生成CHANGELOG
          npm run genlog
          

          分層架構

          目前前端的一個開發趨勢是以搭建單頁應用 (SPA) 為主的。當應用體系比較大,或者你的應用業務邏輯足夠復雜的時候,會遇到各種各樣的問題,我們隨便提兩點:

          • 產品需要多人協作時,每個人的代碼風格和對業務的理解不同,導致業務邏輯分布雜亂無章
          • 對產品的理解停留在頁面驅動層面,導致實現的技術模型與實際業務模型出入較大,當業務需求變動時,技術模型很容易被摧毀

          主站蜘蛛池模板: 精品国产区一区二区三区在线观看| 国产日韩精品视频一区二区三区 | 少妇精品久久久一区二区三区| 无码一区二区三区| 精品性影院一区二区三区内射| 亚洲一区电影在线观看| 亚洲第一区精品观看| 国产一区二区三区91| 蜜桃视频一区二区三区在线观看| 在线播放精品一区二区啪视频| 中文字幕一区二区在线播放| 日本不卡一区二区三区视频| 国产精品一区不卡| 亚洲国产成人久久综合一区| 国产一区二区精品久久凹凸 | 中文人妻av高清一区二区| 亚洲av乱码中文一区二区三区 | 91视频一区二区三区| 中文字幕在线观看一区二区 | 亚洲综合在线成人一区| 中文字幕精品无码一区二区三区 | 亚洲一区精品伊人久久伊人| 麻豆一区二区免费播放网站| 精品无码国产一区二区三区AV| 国产精品男男视频一区二区三区| 亚洲日韩一区精品射精| 国产激情一区二区三区小说| 人妻av无码一区二区三区| 无码免费一区二区三区免费播放| 精品一区二区三区免费视频| 视频一区二区中文字幕| 无码精品人妻一区二区三区免费| 国产一区风间由美在线观看| 无码人妻精品一区二区三区9厂 | 精品乱子伦一区二区三区高清免费播放 | 中文字幕无码一区二区免费| 国产一区二区三区免费视频| asmr国产一区在线| 亚洲AV午夜福利精品一区二区| 久久国产精品一区免费下载| 国产日本亚洲一区二区三区|