- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
The linear growth you see here comes for the fact that we loop over all files in memory to check if any of the dependencies has changed. You could without too much effort get rid of that by rewriting the code from a pull to a push model, where we only loop over the modified files and check their dependants. But with compile times below 100 ms for our largest project, there hasn’t been much incentive for that. 启动 关闭 启动和关闭编译器过程需要花费数秒的时间 解决方法:重新使用这一流程! 作为伺服器运行 通过TCP/IP端口接收编译器请求 启动Exe文件 扫描资源 依赖关系 重新编译 关闭 编译伺服器 result = success result = failure error = Animation ”run” used by state ”run_state” not found source = project dest = project_win32 platform = win32 扫描资源 缓慢:检查每个项目文件的修改时间(mtime) 脆弱:取决于日期 如果一个备份副本受到了恢复,我们可以有mtime(file) mtime(dest) 在编写的dest很糟糕时就会崩溃 信任很重要:我们从未想要强制进行一次完全编译 启动Exe文件 扫描资源 依赖关系 重新编译 关闭 foreach (file in source) dest = destination_file(file) if mtime(file) mtime(dest) compile(file) 想法:明确的编译列表 工具发送一个它想要重新编译的文件列表 工具持续跟踪那些应改变的文件 纹理编辑器知道所有用户改变过的纹理 快速 脆弱:在工具之外不起作用 svn/git/hg更新 在Photoshop里编辑纹理 在文本编辑器里编辑Lua文件 启动Exe文件 扫描资源 依赖关系 重新编译 关闭 解决方法:目录观察程序 在伺服器启动时进行一次完整的扫描 在最初的扫描之后,使用目录观察程序检测变化 ReadDirectoryChangesW(...) 命令 不需要进一步的扫描 使用数据库来避免脆弱性 从上一次成功的编译里储存修改时间(mtime)到数据库里 如果扫描时修改时间或者文件大小改变了 – 重新编译 如果目录观测程序通知我们有改变发生 – 重新编译 启动Exe文件 扫描资源 依赖关系 重新编译 关闭 目录观察程序争用条件 我们不知道收到时间会有多长 1. 文件改变了 require ”stuff” function f() print(”f”) end 2. 用户按下编译按钮 C source = project dest = project_win32 platform = win32 3. 请求到达编译伺服器 4. 伺服器获知改变的文件 争用条件技巧 使用临时文件作为“栅栏” 1. 文件改变了 require ”stuff” function f() print(”f”) end 2. 用户按下编译按钮 C 3. 请求到达编译伺服器。伺服器创建一个临时文件 4. 伺服器获知改变的文件 5. 伺服器获知新的临时文件 source = project dest = project_win32 platform = win32 依赖关系 因为我们没有破坏进程,我们可以把依赖关系数据库保存在内存里 只需要在伺服器启动时从磁盘读取 我们可以保存数据库到磁盘作为背景进程 当我们要求进行一次重新编译时,我们不需要等待保存数据库 当编译器处于空闲状态时,数据库就会在稍后进行保存 启动Exe文件 扫描资源 依赖关系 重新编译 关闭 最后的进程 磁盘访问只会在处理请求是下列项时发生: 编译修改过的文件 创建目录观察程序“栅栏”文件 否则一切都发生在内存当中 启动Exe文件 启动观察程序 启动伺服器 查找修改 依赖关系 读取数据库 扫描资源 分析清秋 编译 发送回复 保存数据库 关闭 结果 项目 规模 零编译 最小变化 《汉密尔顿》(Hamilton) 7 600个文件 17 毫秒 20毫秒 《玫瑰战争》 (Wa
文档评论(0)