当前位置: 首页 > news >正文

东莞网站设计费用网站打开的速度特别慢的原因

东莞网站设计费用,网站打开的速度特别慢的原因,海珠网站建设公司,公众号引流推广随着项目的扩大#xff0c;依靠人工codereview来保证项目的质量#xff0c;越来越不现实#xff0c;这时就有必要借助于一种自动化的代码审查工具#xff1a;程序静态分析。程序静态分析(Program Static Analysis)是指在不运行代码的方式下#xff0c;通过词法分析、语法分… 随着项目的扩大依靠人工codereview来保证项目的质量越来越不现实这时就有必要借助于一种自动化的代码审查工具程序静态分析。程序静态分析(Program Static Analysis)是指在不运行代码的方式下通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。(来自百度百科)词法分析语法分析等工作是由编译器进行的所以对iOS项目为了完成静态分析我们需要借助于编译器。对于OC语言的静态分析可以完全通过Clang对于Swift的静态分析除了Clange还需要借助于SourceKit。Swift语言对应的静态分析工具是SwiftLintOC语言对应的静态分析工具有Infer和OCLitn。以下会是对各个静态分析工具的安装和使用做一个介绍。SwiftLint 对于Swift项目的静态分析可以使用SwiftLint。SwiftLint 是一个用于强制检查 Swift 代码风格和规定的一个工具。它的实现是 Hook 了 Clang 和 SourceKit 从而能够使用 AST 来表示源代码文件的更多精确结果。Clange我们了解了那SourceKit是干什么用的SourceKit包含在Swift项目的主仓库它是一套工具集支持Swift的大多数源代码操作特性源代码解析、语法突出显示、排版、自动完成、跨语言头生成等工作。安装安装有两种方式任选其一方式一通过Homebrew$ brew install swiftlint这种是全局安装各个应用都可以使用。方式二通过CocoaPodspod SwiftLint, :configurations [Debug]这种方式相当于把SwiftLint作为一个三方库集成进了项目因为它只是调试工具所以我们应该将其指定为仅Debug环境下生效。集成进Xcode我们需要在项目中的Build Phases添加一个Run Script Phase。如果是通过homebrew安装的你的脚本应该是这样的。if which swiftlint /dev/null; then  swiftlintelse  echo warning: SwiftLint not installed, download from https://github.com/realm/SwiftLintfi如果是通过cocoapods安装的你的脚本应该是这样的${PODS_ROOT}/SwiftLint/swiftlint运行SwiftLint键入CMD B编译项目在编译完后会运行我们刚才加入的脚本之后我们就能看到项目中大片的警告信息。有时候build信息并不能填入项目代码中我们可以在编译的log日志里查看。定制SwiftLint规则太多了如果我们不想执行某一规则或者想要滤掉对Pods库的分析我们可以对SwfitLint进行配置。在项目根目录新建一个.swiftlint.yml文件然后填入如下内容disabled_rules: # rule identifiers to exclude from running  - colon  - trailing_whitespace  - vertical_whitespace  - function_body_lengthopt_in_rules: # some rules are only opt-in  - empty_count  # Find all the available rules by running:  # swiftlint rulesincluded: # paths to include during linting. --path is ignored if present.  - Sourceexcluded: # paths to ignore during linting. Takes precedence over included.  - Carthage  - Pods  - Source/ExcludedFolder  - Source/ExcludedFile.swift  - Source/*/ExcludedFile.swift # Exclude files with a wildcardanalyzer_rules: # Rules run by swiftlint analyze (experimental)  - explicit_self# configurable rules can be customized from this configuration file# binary rules can set their severity levelforce_cast: warning # implicitlyforce_try:  severity: warning # explicitly# rules that have both warning and error levels, can set just the warning level# implicitlyline_length: 110# they can set both implicitly with an arraytype_body_length:  - 300 # warning  - 400 # error# or they can set both explicitlyfile_length:  warning: 500  error: 1200# naming rules can set warnings/errors for min_length and max_length# additionally they can set excluded namestype_name:  min_length: 4 # only warning  max_length: # warning and error    warning: 40    error: 50  excluded: iPhone # excluded via string  allowed_symbols: [_] # these are allowed in type namesidentifier_name:  min_length: # only min_length    error: 4 # only error  excluded: # excluded via string array    - id    - URL    - GlobalAPIKeyreporter: xcode # reporter type (xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown)一条rules提示如下其对应的rules名就是function_body_length。! Function Body Length Violation: Function body should span 40 lines or less excluding comments and whitespace: currently spans 43 lines (function_body_length)disabled_rules下填入我们不想遵循的规则。excluded设置我们想跳过检查的目录Carthage、Pod、SubModule这些一般可以过滤掉。其他的一些像是文件长度(file_length)类型名长度(type_name)我们可以通过设置具体的数值来调节。另外SwiftLint也支持自定义规则我们可以根据自己的需求定义自己的rule。生成报告如果我们想将此次分析生成一份报告也是可以的(该命令是通过homebrew安装的swiftlint)# reporter type (xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown)$ swiftlint lint --reporter html  swiftlint.htmlxcodebuild xcodebuild是xcode内置的编译命令我们可以用它来编译打包我们的iOS项目接下来介绍的Infer和OCLint都是基于xcodebuild的编译产物进行分析的所以有必要简单介绍一下它。一般编译一个项目我们需要指定项目名configurationschemesdk等信息以下是几个简单的命令及说明。# 不带pod的项目target名为TargetName在Debug下指定模拟器sdk环境进行编译xcodebuild -target TargetName -configuration Debug -sdk iphonesimulator# 带pod的项目workspace名为TargetName.xcworkspace在Release下scheme为TargetName指定真机环境进行编译。不指定模拟器环境会验证证书xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeName Release# 清楚项目的编译产物xcodebuild -workspace WorkspaceName.xcworkspace -scheme SchemeName Release clean之后对xcodebuild命令的使用都需要将这些参数替换为自己项目的参数。Infer Infer是Facebook开发的针对C、OC、Java语言的静态分析工具它同时支持对iOS和Android应用的分析。对于Facebook内部的应用像是 Messenger、Instagram 和其他一些应用均是有它进行静态分析的。它主要检测隐含的问题主要包括以下几条资源泄露内存泄露变量和参数的非空检测循环引用过早的nil操作暂不支持自定义规则。安装及使用$ brew install infer运行infer$ cd projectDir# 跳过对Pods的分析$ infer run --skip-analysis-in-path Pods -- xcodebuild -workspace Project.xcworkspace -scheme Scheme -configuration Debug -sdk iphonesimulator我们会得到一个infer-out的文件夹里面是各种代码分析的文件有txtjson等文件格式当这样不方便查看我们可以将其转成html格式$ infer explore --html点击trace我们会看到该问题代码的上下文。因为Infer默认是增量编译只会分析变动的代码如果我们想整体编译的话需要clean一下项目$ xcodebuild -workspace Project.xcworkspace -scheme Scheme -configuration Debug -sdk iphonesimulator clean再次运行Infer去编译。$ infer run --skip-analysis-in-path Pods -- xcodebuild -workspace Project.xcworkspace -scheme Scheme -configuration Debug -sdk iphonesimulatorInfer的大致原理Infer的静态分析主要分两个阶段1、捕获阶段Infer 捕获编译命令将文件翻译成 Infer 内部的中间语言。这种翻译和编译类似Infer 从编译过程获取信息并进行翻译。这就是我们调用 Infer 时带上一个编译命令的原因了比如: infer -- clang -c file.c, infer -- javac File.java。结果就是文件照常编译同时被 Infer 翻译成中间语言留作第二阶段处理。特别注意的就是如果没有文件被编译那么也没有任何文件会被分析。Infer 把中间文件存储在结果文件夹中一般来说这个文件夹会在运行 infer 的目录下创建命名是 infer-out/。2、分析阶段在分析阶段Infer 分析 infer-out/ 下的所有文件。分析时会单独分析每个方法和函数。在分析一个函数的时候如果发现错误将会停止分析但这不影响其他函数的继续分析。所以你在检查问题的时候修复输出的错误之后需要继续运行 Infer 进行检查知道确认所有问题都已经修复。错误除了会显示在标准输出之外还会输出到文件 infer-out/bug.txt 中我们过滤这些问题仅显示最有可能存在的。在结果文件夹中(infer-out)同时还有一个 csv 文件 report.csv这里包含了所有 Infer 产生的信息包括错误警告和信息。OCLint OCLint是基于Clange Tooling编写的库它支持扩展检测的范围比Infer要大。不光是隐藏bug一些代码规范性的问题例如命名和函数复杂度也均在检测范围之内。安装OCLintOCLint一般通过Homebrew安装$ brew tap oclint/formulae   $ brew install oclint通过Hombrew安装的版本为0.13。$ oclint --versionLLVM (http://llvm.org/):  LLVM version 5.0.0svn-r313528  Optimized build.  Default target: x86_64-apple-darwin19.0.0  Host CPU: skylakeOCLint (http://oclint.org/):  OCLint version 0.13.  Built Sep 18 2017 (08:58:40).我分别用Xcode11在两个项目上运行过OCLint一个实例项目可以正常运行另一个复杂的项目却运行失败报如下错误1 error generated1 error generated...oclint: error: cannot open report output file ..../onlintReport.html我并不清楚原因如果你想试试0.13能否使用的话直接跳到安装xcpretty。如果你也遇到了这个问题可以回来安装oclint0.15版本。OCLint0.15我在oclint issuse #547这里找到了这个问题和对应的解决方案。我们需要更新oclint至0.15版本。brew上的最新版本是0.13github上的最新版本是0.15。我下载github上的release0.15版本但是这个包并不是编译过的不清楚是不是官方自己搞错了只能手动编译了。因为编译要下载llvm和clange这两个包较大所以我将编译过后的包直接传到了这里CodeChecker。如果不关心编译过程可以下载编译好的包跳到设置环境变量那一步。编译OCLint1、安装CMake和Ninja这两个编译工具$ brew install cmake ninja2、clone OCLint项目$ git clone https://github.com/oclint/oclint3、进入oclint-scripts目录执行make命令$ ./make成功之后会出现build文件夹里面有个oclint-release就是编译成功的oclint工具。设置oclint工具的环境变量设置环境变量的目的是为了我们能够快捷访问。然后我们需要配置PATH环境变量注意OCLint_PATH的路径为你存放oclint-release的路径。将其添加到.zshrc或者.bash_profile文件末尾:OCLint_PATH/Users/zhangferry/oclint/build/oclint-releaseexport PATH$OCLint_PATH/bin:$PATH执行source .zshrc刷新环境变量然后验证oclint是否安装成功$ oclint --versionOCLint (http://oclint.org/):OCLint version 0.15.Built May 19 2020 (11:48:49).出现这个介绍就说明我们已经完成了安装。安装xcprettyxcpretty是一个格式化xcodebuild输出内容的脚本工具oclint的解析依赖于它的输出。它的安装方式为$ gem install xcprettyOCLint的使用在使用OCLint之前还需要一些准备工作需要将编译项COMPILER_INDEX_STORE_ENABLE设置为NO。将 Project 和 Targets 中 Building Settings 下的 COMPILER_INDEX_STORE_ENABLE 设置为 NO在 podfile 中 target target do 前面添加下面的脚本将各个pod的编译配置也改为此选项post_install do |installer|  installer.pods_project.targets.each do |target|      target.build_configurations.each do |config|          config.build_settings[COMPILER_INDEX_STORE_ENABLE]  NO      end  endend使用方式1、进入项目根目录运行如下脚本$ xcodebuild -workspace ProjectName.xcworkspace -scheme ProjectScheme -configuration Debug -sdk iphonesimulator | xcpretty -r json-compilation-database -o compile_commands.json会将xcodebuild编译过程中的一些信息记录成一个文件compile_commands.json如果我们在项目根目录看到了该文件且里面是有内容的证明我们完成了第一步。2、我们将这个json文件转成方便查看的html过滤掉对Pods文件的分析为了防止行数上限我们加上行数的限制$ oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html -rc LONG_LINE9999 -max-priority-19999 -max-priority-29999 -max-priority-39999最终会产生一个oclintReport.html文件。OCLint支持自定义规则因为其本身规则已经很丰富了自定义规则的需求应该很小也就没有尝试。封装脚本OCLint跟Infer一样都是通过运行几个脚本语言进行执行的我们可以将这几个命令封装成一个脚本文件以OCLint为例Infer也类似#!/bin/bash# mark sure you had install the oclint and xcpretty# You need to replace these values with your own project configurationworkspace_nameWorkSpaceName.xcworkspacescheme_nameSchemeName# remove historyrm compile_commands.jsonrm oclint_result.xml# clean project# -sdk iphonesimulator means run simulatorxcodebuild -workspace $workspace_name -scheme $scheme_name -configuration Debug -sdk iphonesimulator clean || (echo command failed; exit 1);# export compile_commands.jsonxcodebuild -workspace $workspace_name -scheme $scheme_name -configuration Debug -sdk iphonesimulator \| xcpretty -r json-compilation-database -o compile_commands.json \|| (echo command failed; exit 1);# export report html# you can run oclint -help to see all USAGEoclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html \-disable-rule ShortVariableName \-rc LONG_LINE1000 \|| (echo command failed; exit 1);open -a /Applications/Safari.app oclintReport.htmloclint-json-compilation-database命令的几个参数说明-e需要忽略分析的文件这些文件的警告不会出现在报告中-rc需要覆盖的规则的阀值这里可以自定义项目的阀值默认阀值-enable-rule支持的规则默认是oclint提供的都支持可以组合-disable-rule来过滤掉一些规则规则列表-disable-rule需要忽略的规则根据项目需求设置在Xcode中使用OCLint因为OCLint提供了xcode格式的输出样式所以我们可以将它作为一个脚本放在Xcode中。1、在项目的 TARGETS 下面点击下方的 选择 cross-platform 下面的 Aggregate。输入名字这里命名为 OCLintnew_target2、选中该Target进入Build Phases添加Run Script写入下面脚本# Type a script or drag a script file from your workspace to insert its path.# 内置变量cd ${SRCROOT}xcodebuild clean xcodebuild | xcpretty -r json-compilation-databaseoclint-json-compilation-database -e Pods -- -report-type xcode可以看出该脚本跟上面的脚本一样只不过 将oclint-json-compilation-database命令的-report-type由html改为了xcode。而OCLint作为一个target本身就运行在特定的环境下所以xcodebuild可以省去配置参数。3、通过CMD B我们编译一下项目执行脚本任务会得到能够定位到代码的warning信息xcode_warning总结 以下是对这几种静态分析方案的对比我们可以根据需求选择适合自己的静态分析方案。SwiftLintInferOCLint支持语言SwiftC、C、OC、JavaC、C、OC易用性简单较简单较简单能否集成进Xcode可以不能集成进xcode可以自带规则丰富度较多包含代码规范相对较少主要检测潜在问题较多包含代码规范规则扩展性可以不可以可以参考 OCLint 实现 Code Review - 给你的代码提提质量Using OCLint in XcodeInfer 的工作机制LLVM Clang 入门
http://www.zqtcl.cn/news/76635/

相关文章:

  • 网站模板在线演示怎么做男女做羞羞的故事网站
  • 行业网站建设优化案例建设网站的企业有哪些
  • 网站方案策划怎么写湖南省建设人力资源网站
  • 惠东做网站报价wordpress主题 彩票
  • WordPress建站教程 网盘如何将网站变成免费
  • 珠海高端网站制作新网站上线
  • 找事做的网站网站建设设计问卷
  • 电商网站架构设计商城网站建设公司排行
  • 网站设计模板素材seo优化软件
  • 做网站虚拟主机推荐微网站开发语言
  • 一流的盘锦网站建设新网站怎么做
  • 推广企业网站域名wordpress迁移数据库
  • 做设计在哪个网站找图片怎么做好市场宣传和推广
  • 网站外包哪家公司好长沙做彩票网站公司
  • 网站建设增城官方微信开发
  • 静态网站的好处宣传推广方案怎么写模板
  • 网站模板asp手机如何制作网页链接
  • 网站开发 职位描述长安网站优化
  • 有哪些做公司网站残联网站建设概况
  • 威海住房建设部官方网站如何制作个人网页缴费
  • 2013影响网站百度搜索排名关键因素统计app编程软件有哪些
  • 无版权图片做网站外包小程序开发疑虑解答
  • 怎么是营销型网站建设app嵌入手机网站
  • 公司的网站难不难做如何获取热搜关键词
  • 网站留言系统 提交没反应鄂州网站建设推广报价
  • 烟台商城网站建设商丘网站建设流程
  • 哪些网站是用jsp做的前端工作好找吗
  • 个人网站的设计与开发网站更新怎么做
  • 模板网站的弊端优秀中文企业网站欣赏
  • 网站源码模块网站建设如何算成本