GVKun编程网logo

PHP中你可能忽略的性能优化利器:生成器(php 性能优化)

16

最近很多小伙伴都在问PHP中你可能忽略的性能优化利器:生成器和php性能优化这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android你可能忽略的提高敲代码效率的方式、gola

最近很多小伙伴都在问PHP中你可能忽略的性能优化利器:生成器php 性能优化这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android 你可能忽略的提高敲代码效率的方式、golang框架的代码生成器:性能优化、Intellij IDEA开发中你可能忽略使用的那些快捷键、js 性能优化利器:prepack等相关知识,下面开始了哦!

本文目录一览:

PHP中你可能忽略的性能优化利器:生成器(php 性能优化)

PHP中你可能忽略的性能优化利器:生成器(php 性能优化)

前言

如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显。但是,生成器功能的确非常有用。

什么情况之下,会遇到PHP性能问题?

1:PHP语法使用不恰当。

2:使用PHP语言做了它不擅长的事情。

3:使用PHP语言连接的服务不给力。

4:PHP自身的短板(PHP自身做不了的事情)。

5:我们也不知道的问题?(去探索、分析找到解决办法,提升开发境界)。

优点

直接讲概念估计你听完还是一头雾水,所以我们先来说说优点,也许能勾起你的兴趣。那么生成器有哪些优点,如下:

  • 生成器会对PHP应用的性能有非常大的影响
  • PHP代码运行时节省大量的内存
  • 比较适合计算大量的数据

那么,这些神奇的功能究竟是如何做到的?我们先来举个例子。

概念引入

首先,放下生成器概念的包袱,来看一个简单的PHP函数:

function createRange($number){
 $data = [];
 for($i=0;$i<$number;$i++){
  $data[] = time();
 }
 return $data;
}

这是一个非常常见的PHP函数,我们在处理一些数组的时候经常会使用。这里的代码也非常简单:

  • 我们创建一个函数。
  • 函数内包含一个for循环,我们循环的把当前时间放到$data里面
  • for循环执行完毕,把$data返回出去。

下面没完,我们继续。我们再写一个函数,把这个函数的返回值循环打印出来:

$result = createRange(10); // 这里调用上面我们创建的函数
foreach($result as $value){
 sleep(1);//这里停顿1秒,我们后续有用
 echo $value.''<br />'';
}

我们在浏览器里面看一下运行结果:

这里非常完美,没有任何问题。(当然sleep(1)效果你们看不出来)

思考一个问题

我们注意到,在调用函数createRange的时候给$number的传值是10,一个很小的数字。假设,现在传递一个值10000000(1000万)。

那么,在函数createRange里面,for循环就需要执行1000万次。且有1000万个值被放到$data里面,而$data数组在是被放在内存内。所以,在调用函数时候会占用大量内存。

这里,生成器就可以大显身手了。

创建生成器

我们直接修改代码,你们注意观察:

function createRange($number){
 for($i=0;$i<$number;$i++){
  yield time();
 }
}

看下这段和刚刚很像的代码,我们删除了数组$data,而且也没有返回任何内容,而是在time()之前使用了一个关键字yield

使用生成器

我们再运行一下第二段代码:

$result = createRange(10); // 这里调用上面我们创建的函数
foreach($result as $value){
    sleep(1);
    echo $value.''<br />'';
}


我们奇迹般的发现了,输出的值和第一次没有使用生成器的不一样。这里的值(时间戳)中间间隔了1秒。

这里的间隔一秒其实就是sleep(1)造成的后果。但是为什么第一次没有间隔?那是因为:

  • 未使用生成器时:createRange函数内的for循环结果被很快放到$data中,并且立即返回。所以,foreach循环的是一个固定的数组。
  • 使用生成器时:createRange的值不是一次性快速生成,而是依赖于foreach循环。foreach循环一次,for执行一次。

到这里,你应该对生成器有点儿头绪。

深入理解生成器

代码剖析

下面我们来对于刚刚的代码进行剖析。

function createRange($number){
 for($i=0;$i<$number;$i++){
  yield time();
 }
}
$result = createRange(10); // 这里调用上面我们创建的函数
foreach($result as $value){
 sleep(1);
 echo $value.''<br />'';
}

我们来还原一下代码执行过程。

  • 首先调用createRange函数,传入参数10,但是for值执行了一次然后停止了,并且告诉foreach第一次循环可以用的值。
  • foreach开始对$result循环,进来首先sleep(1),然后开始使用for给的一个值执行输出。
  • foreach准备第二次循环,开始第二次循环之前,它向for循环又请求了一次。
  • for循环于是又执行了一次,将生成的时间戳告诉foreach.
  • foreach拿到第二个值,并且输出。由于foreach中sleep(1),所以,for循环延迟了1秒生成当前时间

所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息。

无论开始传入的$number有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值。

概念理解

到这里,你应该已经大概理解什么是生成器了。下面我们来说下生成器原理。

首先明确一个概念:生成器yield关键字不是返回值,他的专业术语叫产出值,只是生成一个值

那么代码中foreach循环的是什么?其实是PHP在使用生成器的时候,会返回一个Generator类的对象。foreach可以对该对象进行迭代,每一次迭代,PHP会通过Generator实例计算出下一次需要迭代的值。这样foreach就知道下一次需要迭代的值了。

而且,在运行中for循环执行后,会立即停止。等待foreach下次循环时候再次和for索要下次的值的时候,for循环才会再执行一次,然后立即再次停止。直到不满足条件不执行结束。

实际开发应用

很多PHP开发者不了解生成器,其实主要是不了解应用领域。那么,生成器在实际开发中有哪些应用?

读取超大文件

PHP开发很多时候都要读取大文件,比如csv文件、text文件,或者一些日志文件。这些文件如果很大,比如5个G。这时,直接一次性把所有的内容读取到内存中计算不太现实。

这里生成器就可以派上用场啦。简单看个例子:读取text文件

我们创建一个text文本文档,并在其中输入几行文字,示范读取。

<?php
header("content-type:text/html;charset=utf-8");
function readTxt()
{
 # code...
 $handle = fopen("./test.txt", ''rb'');

 while (feof($handle)===false) {
  # code...
  yield fgets($handle);
 }

 fclose($handle);
}

foreach (readTxt() as $key => $value) {
 # code...
 echo $value.''<br />'';
}


通过上图的输出结果我们可以看出代码完全正常。

但是,背后的代码执行规则却一点儿也不一样。使用生成器读取文件,第一次读取了第一行,第二次读取了第二行,以此类推,每次被加载到内存中的文字只有一行,大大的减小了内存的使用。

这样,即使读取上G的文本也不用担心,完全可以像读取很小文件一样编写代码。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

您可能感兴趣的文章:
  • php性能优化之不要在for循环中操作DB
  • php之性能优化案例
  • 浅谈PHP性能优化之php.ini配置
  • PHP+swoole+linux实现系统监控和性能优化操作示例
  • PHP性能优化大全(php.ini)
  • php性能优化进阶不要在for循环中DB操作

Android 你可能忽略的提高敲代码效率的方式

Android 你可能忽略的提高敲代码效率的方式

 

作为学习 kotlin 的一款 app,在撸代码的过程中学习 kotlin 的语法及特性。

 

Eyepetizer-in-Kotlin 适合初学者作为学习 kotlin 语言的一个项目,可以在做项目的同时体验到 kotlin 语言的优点。

 

https://github.com/LRH1993/Eyepetizer-in-Kotlin

 

本文作者

 

本文由大力 - 哥投稿。

大力 - 哥的博客地址:

http://blog.csdn.net/qq137722697

 

本篇将从 Live Templates 简介,常用 AS 自带模板,自定义模板三个方面开展介绍,并且只介绍 Live Templates 中 Java 代码方面的使用,其余感觉不是很常用,看完这篇之后你可以自己研究一下。

 

一个好的程序猿应该是花更多的时间在处理业务处理上,而不是重复敲相同的代码,一行代码节约 1s 也是节约。看完这篇之后你会觉得 AS 确实越来越强大了,简直是 Android 程序猿的福音呀,希望推出更多提高开发效率的工具或插件。废话不多说,直接进入主题。

 

1

什么是 Live Templates

 

没有统一的翻译,代码模板、热键模板、动态模板随便叫哪个都行

 

作用

  • 代码快速补全

  • 提高写代码的速度

 

位置

  • Settings->Editor->Live Templates

 

用法

  • 全关键字型:关键字–> 回车

  • 后缀关键型:使用对象。关键字–> 回车

 

简单使用

 

先来两个效果图,吊一下胃口,更加实用的还在后面

 

AS 自带模板

 

快速打印日志

logt –> 快速补全 TAG 
loge—> 快速补全 Log.e (TAG,”“);

 

 

自定义模板

 

输入 sin 回车即自动补全单例模式所需的代码

 

 

系统自带模板

 

系统自带模板从两个方面讲解,全关键字型和后缀关键型,由于篇幅的原因,这里只讲解常用的一些模板,未讲解到的可以到 Settings->Editor->Live Templates 中查看

 

2

全关键字型

 

先来说说什么是全关键字型,其实就是输入关键字–> 回车,

 

eg:输入 loge 回车即会自动打印出

 

Log.e(TAG, "onCreate: ", );

 

(1)findViewById

 

在此之前我们在 Activity 中找到一个 view 可能是这样写的:

 

 

有了 fbc 之后我们可以这样写:fbc 回车

 

 

(2)定义常量

 

以前你写整形常量是不是要一个单词的敲出: private static final int 。。。

还有更快的写法:const 回车

 

 

字符串常量也有:key 回车

 

 

其他常量,目前 as 只提供了整形和字符串类型常量的模板,学了后面的自定义之后你就可以定义其他类型的了,当然还有一种捷径:psf 回车即可快速补全

 

public static final

 

(3)for 循环

 

相信很多小伙伴也觉得每次都要写整个 for 循环好麻烦,as 提供了:fori 回车,看对比图

 

 

这里还有一个隐藏的模板,sout 回车 即可快速补全 System.out.printf (“”);

 

(4)if 判断

 

ifn 回车(推荐)

 

 

inn 回车

 

 

(5)隐藏 View

 

gone

 

 

(6)快速在子线程中切换到主线程

 

rouiT

 

 

(7)字符串格式化

 

Sfmt

 

 

(8)快速实现自定义 View 的三个构造方法

 

ViewConstructors

 

个人觉得这个是一个非常实用的模板了,比快捷键还方面,不行你自己试试

 

 

OK 全关键字型就只讲这些常用的了,不常用的可以去设置中查看。

 

3

后缀关键型

 

再来说说什么是后缀关键型,其实就是 “使用对象。关键字–> 回车”,继续往下看就知道是什么啦:

 

判断

  • .notnull

  • .null

 

 

局部变量

.var

 

 

全局变量

.field

 

这个也是一个非常实用的模板,在代码量非常多的类中就更加突出了,不用跑到来的最前面定义右跑回来初始化。

 

 

循环

  • .for 增强 for 循环

  • .fori 正序遍历

  • .forr 逆序遍历

 

 

还有针对下标的

 

 

return 返回

.return

 

 

类型转换

.cast

 

 

抛出异常

.try

 

 

字符串格式化

.format

 

 

分支

.switch

 

 

后缀型的也只讲这些常用的了,快进入激动的自定义模板。

 

4

自定义模块

 

我这里给出几个比较常用的自定义模板,如果你觉得有比较好的可以抽取出来的,欢迎留言。

 

(1)单例模式

 

还是一开始就给出的单例模式,再来看看效果图:

 

 

是不是很带感,来看看怎么设置(建议先新建一个 Template Group,便于管理):

 

 

然后点击 Edit variables

 

 

下面是单例模式的模板(根据个人写单例模式的习惯来)

 

 

来看看上面涉及到的知识:

 

 

更详细的 Expression 介绍:

https://www.jetbrains.com/help/idea/2016.1/live-template-variables.html

 

Skip if defined : 

如果选中,光标会直接跳到句末,不会停留在某个变量处。

 

(2)click

 

 

模板:

 

public void onClick(View view) {
    switch (view.getId()) {
        case R.id.$resId$:
            $content$
            break;
        default:
            break;
    }
}

 

(3)打印带定位功能的日志

 

新建 dl (名字自拟)为下面的模板

 

Log.e("$class$",
    "$method$($class$.java:$line$)"+$content$);

 

 

为什么打印下面的代码就可以定位到指定类所在的行数呢?

 

Log.e("MainActivity",
    "onCreate(MainActivity.java:13)我是日志内容");

 

告诉你一个小秘密,logcat 中只要打印的内容中带有”(类名.java: 行号)” 就可以自动变为可点击的链接,点击之后就可以跳转到改类指定的行数。

 

这样就实现了打印带定位功能的日志,但是这个是有一定的局限性的,比如打印语句之前很可能会增加代码,由于行数是固定死的,此时就会导致定位有一定的误差。怎么解决呢?这里推荐看一个日志打印的工具类,android studio 日志打印神器,日志代码跟踪器 ELog。

 

(4)Switch

 

快速搭建模式、防止漏掉 break 和 default

 

switch ($content$) {
    case $value$:
        $code$
        break;
    default:

        break;
}

 

 

(5)字符串非空判断

 

这也是一个非常实用的模板了

 

TextUtils.isEmpty($content$);

 

golang框架的代码生成器:性能优化

golang框架的代码生成器:性能优化

golang 代码生成器支持性能优化,其技术包括:模版缓存:避免重复解析开销代码重用:减少重复代码代码分析:优化生成的代码并发:提高生成速度

golang框架的代码生成器:性能优化

Golang 框架的代码生成器:性能优化

引言

代码生成器是一种强大的工具,用于自动生成代码以简化开发过程。在 Golang 中,有许多优秀的代码生成器可用,但大多数都缺乏性能优化功能。本文将介绍一种专注于性能优化的 Golang 代码生成器。

立即学习“go语言免费学习笔记(深入)”;

代码生成器

该代码生成器基于代码模版和反射机制。它允许用户定义自己的模版文件,其中包含用于生成代码的占位符。代码生成器通过解析和执行模板文件来生成代码。

为了优化性能,该代码生成器采用了以下技术:

  • 模版缓存:模版文件仅解析一次并存储在缓存中,以避免重复解析开销。
  • 代码重用:通用代码块(如数据结构和方法)在多个模版中重用,以减少生成重复代码。
  • 代码分析:代码生成器会分析生成的代码并应用优化,如内联函数和数据结构扁平化。
  • 并发:代码生成过程可以并行执行,以充分利用多核 CPU。

实战案例

考虑一个生成 REST API 控制器的代码生成器。控制器通常包含用于处理 HTTP 请求的方法。使用代码生成器,可以为不同的 HTTP 动词定义模版文件,并指定要包含的通用代码块。

// controller_template.tmpl

// Package defines the package for the generated controller.
package {{.Package}}

// {{.StructName}}Controller defines the controller for {{.Resource}} resources.
type {{.StructName}}Controller struct {
    // Embed the default controller implementation.
    Controller

    // Add custom methods here.
}
登录后复制
// main.go

package main

import (
    // Import the controller generator.
    "github.com/example/gocodegen"

    // Import the template files.
    "github.com/example/gocodegen/templates/controller"
)

func main() {
    // Generate controllers for different HTTP methods.
    codegen.Generate("PostController", "POST", controller.PostTemplate)
    codegen.Generate("GetController", "GET", controller.GetTemplate)
    // ...

    // Run the generated controllers.
    // ...
}
登录后复制

性能提升

经过优化后,代码生成器可以显着提高性能。在基准测试中,使用缓存和重用代码块将生成时间减少了 50% 以上。并发代码生成进一步提高了性能,在 4 核 CPU 上将生成时间减少了 30% 以上。

结论

本文介绍了一种专注于性能优化的 Golang 代码生成器。通过采用代码模版缓存、代码重用、代码分析和并发等技术,该代码生成器可以显著提高生成时间。

以上就是golang框架的代码生成器:性能优化的详细内容,更多请关注php中文网其它相关文章!

Intellij IDEA开发中你可能忽略使用的那些快捷键

Intellij IDEA开发中你可能忽略使用的那些快捷键

IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。

IntelliJ IDEA工具在有些方面比较优秀,IDEA提倡只能编程节省程序员工作量,有很多特色功能如编码辅助JavaScript自动补全功能、html页面编写代码功能,灵活排版功能等,相对于Eclipse的IDE工具实用很多。下面小编讲述一下IntelliJ IDEA在开发中常用快捷键和可能忽略使用的快捷键等等。

Intellij IDEA最常用快捷键

Ctrl+E,可以显示最近编辑的文件列表

Shift+Click可以关闭文件

Ctrl+[或]可以跳到大括号的开头结尾

Ctrl+Shift+Backspace可以跳转到上次编辑的地方

Ctrl+F12,可以显示当前文件的结构

Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择

Ctrl+N,可以快速打开类

Ctrl+Shift+N,可以快速打开文件

Alt+Q可以看到当前方法的声明

Ctrl+W可以选择单词继而语句继而行继而函数

Alt+F1可以将正在编辑的元素在各个面板中定位

Ctrl+P,可以显示参数信息

Ctrl+Shift+Insert可以选择剪贴板内容并插入

Alt+Insert可以生成构造器/Getter/Setter等

Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量

Ctrl+Alt+T可以把代码包在一块内,例如try/catch

Alt+Up and Alt+Down可在方法间快速移动


Intellij IDEA查询快捷键

CTRL+N   查找类 

CTRL+SHIFT+N  查找文件 

CTRL+SHIFT+ALT+N 查找类中的方法或变量 

CIRL+B   找变量的来源 

CTRL+ALT+B  找所有的子类 

CTRL+SHIFT+B  找变量的类 

CTRL+G   定位行 

CTRL+F   在当前窗口查找文本 

CTRL+SHIFT+F  在指定窗口查找文本 

CTRL+R   在 当前窗口替换文本 

CTRL+SHIFT+R  在指定窗口替换文本 

ALT+SHIFT+C  查找修改的文件 

CTRL+E   最近打开的文件 

F3   向下查找关键字出现位置 

SHIFT+F3  向上一个关键字出现位置 

F4   查找变量来源 

CTRL+ALT+F7  选中的字符查找工程出现的地方 

CTRL+SHIFT+O  弹出显示查找内容


Intellij IDEA自动代码

ALT+回车  导入包,自动修正 

CTRL+ALT+L  格式化代码 

CTRL+ALT+I  自动缩进 

CTRL+ALT+O  优化导入的类和包 

ALT+INSERT  生成代码(如GET,SET方法,构造函数等) 

CTRL+E 最近更改的代码 

CTRL+SHIFT+SPACE 自动补全代码 

CTRL+空格  代码提示 

CTRL+ALT+SPACE  类名或接口名提示 

CTRL+P   方法参数提示 

CTRL+J   自动代码 

CTRL+ALT+T  把选中的代码放在 TRY{} IF{} ELSE{} 里

Ctrl+Shift+T  创建单元测试


Intellij IDEA复制快捷方式

CTRL+D   复制行

CTRL+C   选中代码进行复制

CTRL+X   剪切,删除行


Intellij IDEA其他快捷方式

CIRL+U   大小写切换 

CTRL+Z   倒退 

CTRL+SHIFT+Z  向前 

CTRL+ALT+F12  资源管理器打开文件夹 

ALT+F1   查找文件所在目录位置 

SHIFT+ALT+INSERT 竖编辑模式 

CTRL+/   注释//   

CTRL+SHIFT+/  注释/*...*/ 

CTRL+W   选中代码,连续按会有切换效果 

CTRL+B   快速打开光标处的类或方法 

ALT+ ←/→  切换代码视图 

CTRL+ALT ←/→  返回上次编辑的位置 

ALT+ ↑/↓  在方法间快速移动定位 

SHIFT+F6  重构-重命名 

CTRL+H   显示类结构图 

CTRL+Q   显示注释文档 

ALT+1   快速打开或隐藏工程面板 

CTRL+SHIFT+UP/DOWN 代码向上/下移动。 

CTRL+UP/DOWN  光标跳转到第一行或最后一行下 

ESC   光标返回编辑框 

SHIFT+ESC  光标返回编辑框,关闭无用的窗口 

F1   帮助

CTRL+F4   强制关闭


Intellij IDEA不常用的快捷键

Alt+Enter    自动修复

Ctrl+Shift+Alt+N    可以快速打开符号

Ctrl+Shift+Space    在很多时候都能够给出Smart提示

Alt+F3    可以快速寻找

Ctrl+/和Ctrl+Shift+/    可以注释代码

Ctrl+Alt+B    可以跳转到抽象方法的实现

Ctrl+O    可以选择父类的方法进行重写

Ctrl+Q    可以看JavaDoc

Ctrl+Alt+Space    类名或接口名提示

Ctrl+J    自动代码

Ctrl+Shift+F7     可以高亮当前元素在当前文件中的使用

Ctrl+Alt+Up /Ctrl+Alt+Down     可以快速跳转搜索结果

Ctrl+Shift+J     可以整合两行

Alt+F8     计算变量值


快捷键参考资料:http://blog.yoodb.com/yoodb/article/detail/1326


因每个人可能使用电脑不同IntelliJ IDEA内存可以根据机器本身配置而优化,具体优化参数配置如图:

注:-Xms512m 设置初时的内存大小,提高Java程序的启动速度

-Xmx750m 设置最大内存数,提高该值,可以减少内存Garage收集的频率,提高程序性能

-Xverify:none 关闭Java字节码验证,从而加快了类装入的速度,并使得在仅为验证目的而启动的过程中无需装入类,缩短了启动时间

-XX:+UseParNewGC 使用并行收集算法

-server 控制内存garage方式,这样你无需在花一到两分钟等待内存garage的收集

-Dsun.awt.keepWorkingSetOnMinimize=true 可以让IDEA最小化到任务栏时依然保持以占有的内存,当你重新回到IDEA,能够被快速显示,而不是由灰白的界面逐渐显现整个界面,加快回复到原界面的速度。

推荐↓↓↓
 

优哉游哉

更多推荐《优哉游哉

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

本文分享自微信公众号 - Java精选(w_z90110)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

js 性能优化利器:prepack

js 性能优化利器:prepack

1. js 性能优化

js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已。

这就要提到 prepack 了,它的思路大致是这样:

把不依赖外部环境的逻辑提前进行运算,并把运算结果替换到相应的源码处,然后从源码中移除这段逻辑。

2. prepack

2.1 安装

2.2 编译(打印在命令行)

2.3 编译后输出文件

2.4 示例

源代码

编译后的代码

2.5 配合构建工具一起使用

  • prepack-webpack-plugin: A webpack plugin for Prepack
  • rollup-plugin-prepack: A Rollup plugin for Prepack
  • prepack-vscode: A Visual Studio code plugin for Prepack

2.6 问题

  • 目前最新版本是 0.2.51,还一直在开发中,很多功能都还没有实现,包括模块输入输出的优化

关于PHP中你可能忽略的性能优化利器:生成器php 性能优化的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android 你可能忽略的提高敲代码效率的方式、golang框架的代码生成器:性能优化、Intellij IDEA开发中你可能忽略使用的那些快捷键、js 性能优化利器:prepack的相关信息,请在本站寻找。

本文标签:

上一篇PHP实现约瑟夫环问题的方法分析(约瑟夫环 php)

下一篇PHP服务端环境搭建的图文教程(分享)(php服务器环境搭建过程)