成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

清理ios項(xiàng)目無(wú)用的圖片資源

Sike / 1619人閱讀

摘要:及時(shí)的清理掉不用的圖片資源很有必要,在項(xiàng)目中使用可以輕松的完成這個(gè)任務(wù),而在上沒(méi)有找到比較好的清理無(wú)用圖片的工具。參考網(wǎng)上的例子,寫(xiě)了一個(gè)清除項(xiàng)目中無(wú)用的圖片資源的腳本。

項(xiàng)目經(jīng)過(guò)需求的變更,產(chǎn)品迭代,再多次的改版之后,有些不再使用的圖片不一定能夠及時(shí)的清理掉,這些無(wú)用的圖片一方面讓項(xiàng)目圖片資源的結(jié)構(gòu)更加的復(fù)雜,另一方面會(huì)導(dǎo)致ipa包的體積變大。
及時(shí)的清理掉不用的圖片資源很有必要,在A(yíng)ndroid項(xiàng)目中使用Lint可以輕松的完成這個(gè)任務(wù),而在ios上沒(méi)有找到比較好的清理無(wú)用圖片的工具。
參考網(wǎng)上的例子,寫(xiě)了一個(gè)python清除ios項(xiàng)目中無(wú)用的圖片資源的腳本。首先介紹下ios中使用圖像資源的方式。

Images Assets

ios中使用 Images Assets管理圖片,項(xiàng)目的圖片資源一般都放在這Image Assets里面,圖片會(huì)放到*.imageset目錄里,對(duì)應(yīng)的有1x,2x3x的圖,還有一個(gè)Contents.json的描述文件。 清除圖片資源需要把*.imageset清除掉,包括圖片文件和json文件。 想要清除掉不用的圖片資源,就需要知道圖片資源怎么被引用的,再查找到未被引用的圖片資源就可以清除掉了。
ios代碼中調(diào)用圖片的方法一般是:

[UIImage imageNamed:@"image"]

xib中調(diào)用圖片的方法是用xml的方式描述,圖片資源作為image的名稱(chēng):

                 
 

因此清理的思路就是搜索項(xiàng)目中的圖片文件,如果找到對(duì)于的"name"xib或者ios代碼中存在,說(shuō)明該圖片被使用了,不然的話(huà)該圖片即可被清理掉。
先看看如何方便的搜索圖片文件有沒(méi)有被使用吧!

搜索文件

搜索文件的方式可以使用grep,ack都是不錯(cuò)的工具,但是有一種更快,更好的搜索文件內(nèi)容的方式:The Silver SearcherThe Silver Searcher使用起來(lái)更方便,更快,更簡(jiǎn)單,項(xiàng)目地址:https://github.com/ggreer/the_silver_searcher。 直接安裝The Silver Searcher的命令:

brew install the_silver_searcher

使用ag命令就可以進(jìn)行文本搜索:

ag "image" "./"

這個(gè)命令的意思是搜索到該目錄下以及其子目錄下的所有含有"image"的文件。
使用這個(gè)命令就需要在python中執(zhí)行bash命令。

bash命令

使用bash命令來(lái)進(jìn)行一些搜索文本,刪除文件的工作,在python中可以直接運(yùn)行bash命令。 在python中直接使用bash命令:

os.popen("echo $PATH")

在執(zhí)行bash命令的時(shí)候,可以通過(guò)os.popen("echo $PATH").read()執(zhí)行并讀取執(zhí)行的結(jié)果。 也可以直接執(zhí)行bash命令不用關(guān)系執(zhí)行的結(jié)果,例如:

os.system("rm -rf dir")

需要用到的bash命令有ag "image" "./"rm -rf "./",前者用來(lái)搜索文本有沒(méi)有被使用,后者用來(lái)刪除文件夾。
下面就看下完整的實(shí)現(xiàn)。

清除無(wú)用的imageset資源

完整的清理無(wú)用的圖片資源的代碼:

path = "ios"
images = glob.glob("ios/images.xcassets/*/*.imageset")
def find_un_used():
    img_names = [os.path.basename(pic)[:-9] for pic in images]
    unused_imgs = []
    for i in range(0, len(images)):
        pic_name = img_names[i]
        command = "ag "%s" %s" % (pic_name, path)
        result = os.popen(command).read()
        if result == "":
            unused_imgs.append(images[i])
            print "remove %s" % (images[i])
            os.system("rm -rf %s" % (images[i]))


    text_path = "unused.txt"
    tex = "
".join(sorted(unused_imgs))
    os.system("echo "%s" > %s" % (tex, text_path))
    print "unuse res:%d" % (len(unused_imgs))
    print "Done!"

這段代碼是從當(dāng)前文件夾里,遍歷所有的.imageset文件,找到圖片使用的圖片名稱(chēng),在文件夾中搜索該名稱(chēng)的文件有沒(méi)有被使用。如果沒(méi)有被使用的名稱(chēng)就可以清除掉該資源。
執(zhí)行這段之后發(fā)現(xiàn)有一些不應(yīng)該清除圖片資源也被清除了,這里有個(gè)例外的情況沒(méi)有考慮到。

ignores

有時(shí)候會(huì)給一些資源文件動(dòng)態(tài)的賦值,使用這樣的代碼:

for (int i = 1; i <= 10; ++i) {
    NSString *imageName = [NSString stringWithFormat:@"image_%d", i];
    UIImage *image = [UIImage imageNamed:imageName];
    ......
}

上面的代碼中查找 image1時(shí),發(fā)現(xiàn)這個(gè)圖片并沒(méi)有使用,該圖片資源就會(huì)被清除掉,但是該圖片在項(xiàng)目中是動(dòng)態(tài)賦值的并不應(yīng)該被清除。
我采用ignore的方式來(lái)解決這個(gè)問(wèn)題,也就是先提前準(zhǔn)備好一個(gè)ignore的列表,內(nèi)容采用正則表達(dá)式來(lái)定義,被匹配到的文件資源就不進(jìn)行清除處理,例如ignores為:

ignores = {r"image*d+"}

然后在定義一個(gè)檢查ignores的方法:

def is_ignore(str):
    for ignore in ignores:
        if re.match(ignore, str):
            return True
    return False

如果一個(gè)文件名在ignores中出現(xiàn)就會(huì)忽略該文件的清理檢查,這樣就不會(huì)清理掉一些動(dòng)態(tài)賦值的圖片資源了。
源碼地址:https://github.com/jjz/script/blob/master/un_used.py

請(qǐng)自行設(shè)置好目錄,執(zhí)行命令:

python un_used.py

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37849.html

相關(guān)文章

  • 我是如何優(yōu)化網(wǎng)站首頁(yè)性能

    摘要:分位值解釋分位值目前是我們看性能指標(biāo)的一個(gè)重要參考點(diǎn)。為什么是,因?yàn)楦M(jìn)高的優(yōu)化經(jīng)驗(yàn),分位值的數(shù)據(jù)取點(diǎn)最能放大問(wèn)題。分位值下,一個(gè)散文件可能就是的影響。 最近接到一個(gè)任務(wù),首頁(yè)性能優(yōu)化。 目標(biāo):95分位值下 看到頁(yè)面框架主體內(nèi)容6s(優(yōu)化前10s左右),優(yōu)化提升40% 看到操作詳細(xì)內(nèi)容9s(優(yōu)化前12s左右),優(yōu)化提升25%。 側(cè)面看出我們系統(tǒng)的龐大程度吧,這個(gè)不值得驕傲,項(xiàng)目...

    kun_jian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<