web性能优化

web网络层、前端、后端、数据库性能优化

web性能优化

  • vue webpack性能优化(一) 准备分析工作

    web性能优化


    一.了解vue-cli项目的配置

    1.查看vue-cli版本是在package.json中查看

    2.查看webpack版本是在node_modules/webpack/package.json中查看



    二.查看编译耗时

    2.1  手动统计耗时

    vue编译命令npm run build,其实际使用的命令是vue-cli-service build,路径是node_modules\@vue\cli-service\lib\commands\build\index.js

    原108行加入命令:

    const beginTime = Date.now()


    原209~210行之间加入代码:

    const endTime = Date.now()
    info(`编译耗时:${chalk.cyan((endTime - beginTime) / 1000)}(s)`)


    npm run build即可看出编译总耗时



    2.2  使用第三方工具(推荐)

    speed-measure-webpack-plugin每一项耗时都有精确统计,搭配使用webpack-bundle-analyzer打包后的各个模块文件大小,直观明了,根据具体项目再去进行优化。











    风口下的猪2023-04-06发表在【web性能优化

    阅读更多
  • 时间复杂度和时间规模函数(执行次数)

    web性能优化

    时间复杂度是判断代码执行性能的一个重要指标

    场景1:T(n) = 3n,执行次数是线性的。

    void eat1(int n){
        for(int i=0; i<n; i++){;
            System.out.println("等待一天");
            System.out.println("等待一天");
            System.out.println("吃一寸面包");
        }
    }


    场景2:T(n) = 5logn,执行次数是对数的。

    void eat2(int n){
       for(int i=1; i<n; i*=2){
           System.out.println("等待一天");
           System.out.println("等待一天");
           System.out.println("等待一天");
           System.out.println("等待一天");
           System.out.println("吃一半面包");
       }
    }


    场景3:T(n) = 2,执行次数是常量的。

    void eat3(int n){
       System.out.println("等待一天");
       System.out.println("吃一个鸡腿");
    }


    场景4:T(n) = 0.5n^2 + 0.5n,执行次数是一个多项式。

    void eat4(int n){
       for(int i=0; i<n; i++){
           for(int j=0; j<i; j++){
               System.out.println("等待一天");
           }
           System.out.println("吃一寸面包");
       }
    }


    渐进时间复杂度

     有了基本操作执行次数的函数 T(n),是否就可以分析和比较一段代码的运行时间了呢?还是有一定的困难。

    比如算法A的相对时间是T(n)= 100n,算法B的相对时间是T(n)= 5n^2,这两个到底谁的运行时间更长一些?这就要看n的取值了。

    所以,这时候有了渐进时间复杂度(asymptotic time complexity)的概念,官方的定义如下:

    若存在函数 f(n),使得当n趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。

    记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

    渐进时间复杂度用大写O来表示,所以也被称为大O表示法。


    如何推导出时间复杂度呢?有如下几个原则:

    1. 如果运行时间是常数量级,用常数1表示;

    2. 只保留时间函数中的最高阶项;

    3. 如果最高阶项存在,则省去最高阶项前面的系数。


    让我们回头看看刚才的四个场景。

    场景1:

    T(n) = 3n 

    最高阶项为3n,省去系数3,转化的时间复杂度为:

    T(n) =  O(n)


    场景2:

    T(n) = 5logn 

    最高阶项为5logn,省去系数5,转化的时间复杂度为:

    T(n) =  O(logn)


    场景3:

    T(n) = 2

    只有常数量级,转化的时间复杂度为:

    T(n) =  O(1)


    场景4:

    T(n) = 0.5n^2 + 0.5n

    最高阶项为0.5n^2,省去系数0.5,转化的时间复杂度为:

    T(n) =  O(n^2)


    这四种时间复杂度究竟谁用时更长,谁节省时间呢?稍微思考一下就可以得出结论:

    O(1)< O(logn)< O(n)< O(n^2)




    风口下的猪2022-03-05发表在【web性能优化

    阅读更多
  • 如果是MySQL引起的CPU消耗过大,你会如何优化?

    web性能优化

    风口下的猪2020-07-15发表在【web性能优化

    阅读更多
  • 创建多少个线程合适?

    web性能优化

    风口下的猪2020-07-15发表在【web性能优化

    阅读更多
  • 前端渲染与后端渲染的区别

    web性能优化

    前端渲染:

    指的是后端返回JSON数据,前端利用预先写的html模板,循环读取JSON数据,拼接字符串(es6的模板字符串特性大大减少了拼接字符串的的成本),并插入页面。

     #  好处:网络传输数据量小。不占用服务端运算资源(解析模板),模板在前端(很有可能仅部分在前端),改结构变交互都前端自己来了,改完自己调就行。

     #  坏处:前端耗时较多,对前端工作人员水平要求相对较高。前端代码较多,因为部分以前在后台处理的交互逻辑交给了前端处理。占用少部分客户端运算资源用于解析模板。


    后端渲染:

    前端请求,后端用后台模板引擎直接生成html,前端接受到数据之后,直接插入页面。

     #  好处:前端耗时少,即减少了首屏时间,模板统一在后端。前端(相对)省事,不占用客户端运算资源(解析模板)

     #  坏处:占用服务器资源。


    前端渲染与后端渲染对比:

    (一)后端渲染:

     #  页面呈现速度:快,受限于用户的带宽

     #  流量消耗:少一点点(可以省去前端框架部分的代码)

     #  可维护性:差(前后端东西放一起,掐架多年,早就在闹分手啦)

     #  seo友好度:好

     #  编码效率:低(这个跟不同的团队不同,可能不对)

    (二)前端渲染:

     #  页面呈现速度:主要受限于带宽和客户端机器的好坏,优化的好,可以逐步动态展开内容,感觉上会更快一点。

     #  流量消耗:多一点点(一个前端框架大概50KB)当然,有的用后端渲染的项目前端部分也有在用框架。

     #  可维护性:好,前后端分离,各施其职,代码一目明了。

     #  SEO友好度:差,大量使用ajax,多数浏览器不能抓取ajax数据。

     #  编码效率:高,前后端各自只做自己擅长的东西,后端最后只输出接口,不用管页面呈现,只要前后端人员能力不错,效率不会低。


    风口下的猪2020-03-05发表在【web性能优化

    阅读更多
  • 软件开发
  • 素质要求
  • 计算机基础
  • 架构
  • 安全
  • 性能
  • 运维
  • 尾页
  • 数据库
  • 开发终端
  • 语言基础
  • 项目管理
  • 产品设计
  • 系统
  • 工作规范
  • 计算机网络
  • 前端技术栈
  • 数据结构
  • 计算机组成原理
  • 后端技术栈
  • 性能优化
  • 安全设计
  • 常见模块
  • 计算机操作系统
  • 服务器
  • python
  • MySQL
  • thinkphp
  • PHP
  • Java
  • JavaScript
  • Windows
  • Linux
  • 特效
  • indexedDB
  • vue
  • 淘宝联盟
  • Ionic
  • Angular
  • 微信小程序
  • 支付宝小程序
  • uni-app
  • css/sass/less
  • 支付
  • socket
  • 爬虫
  • web性能优化
  • 消息推送
  • CVM
  • sqlite
  • Redis
  • 前端基础
  • 基础
  • element
  • Nginx
  • yii2
  • /ponder/index.php/index/catelist/catelist/cateid/10.html

    标签云

    站点信息

    • 文章统计:528篇
    • 移动端访问:扫码进入SQ3R