gpt4 book ai didi

javascript - 查找/替换任意 JS 属性以获得更好的压缩

转载 作者:行者123 更新时间:2023-11-29 09:55:36 26 4
gpt4 key购买 nike

如果我可以精细地缩小那些我知道是任意的但在标准设置下不会缩小的属性,我就可以有效地减少一些 JS 生产代码的大小。也就是说,当高级缩小设置问题太大时,以缩小的方式将它们替换为单个字符,如“a”。文本文件可以作为项目的一部分进行维护,其中包含已知可替换字符串的逗号分隔列表。

有没有人有可以实现此目的的 bat 或 shell 脚本,甚至是手动从 csv 中的每个文件?或者另一个实现同样目标的建议?我在 Windows 上,所以 sh 脚本需要在 Git bash 中工作,无论如何对我来说:)

除了查找/替换方面,还需要生成替换字符串,使其唯一但尽可能短。

最佳答案

这是为那些不想使用 JavaScript 的人准备的 C++ 版本。它仅使用标准 C++ 库。

#include <stdio.h>
#include <io.h>
#include <string.h>

#include <vector>
#include <string>

void Usage(const char* msg = NULL)
{
if (msg)
printf("%s\n", msg);
printf("Usage: coderep (prefix) (infile) (listfile) (outfile)\n");
}

char* OpenAndReadFile(const char* filename)
{
FILE* fp = fopen(filename, "rb");
if (!fp)
return NULL;
fseek(fp, 0, SEEK_END);
int size = (int)ftell(fp);
fseek(fp, 0, SEEK_SET);
char* buf = new char[size + 2];
fread(buf, 1, size, fp);
buf[size] = '\0';
fclose(fp);
return buf;
}

void ReplaceAll(std::string& str, const std::string& from, const std::string& to)
{
size_t start_pos = 0;
while ((start_pos = str.find(from, start_pos)) != std::string::npos)
{
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
}

char* rndCh = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int rndLen = 62;

// Generate random string from number
void genRand(int index, std::string* str)
{
std::vector<int> ni;
while (index > 0)
{
ni.push_back(index % 62);
index = index / 62;
}
if (!ni.size())
ni.push_back(0);

std::vector<int>::reverse_iterator ip;
for (ip = ni.rbegin(); ip != ni.rend(); ++ip)
(*str) += rndCh[*ip];
}

int main(int argc, char* argv[])
{
if (argc != 5)
{
Usage();
return 1;
}

// Read inputs and check parms
const char* prefix = argv[1];
char* code = OpenAndReadFile(argv[2]);
if (!code || !*code)
{
Usage("Failed reading code");
return 1;
}
char* list = OpenAndReadFile(argv[3]);
if (!list || !*list)
{
delete[] code;
Usage("Failed reading list");
return 1;
}
const char* outfile = argv[4];
if (!outfile || !*outfile)
{
Usage("Need output file");
return 1;
}

// Split list
std::string scode(code);
std::vector<std::string> vlist;
std::string acc;
const char* lp = list;
while (*lp)
{
if (*lp == L',')
{
vlist.push_back(acc);
acc.clear();
}
else
{
acc += *lp;
}
++lp;
}
if (acc.size() > 0)
vlist.push_back(acc);

// Do translation
int index = 0;
std::string rstr;
std::vector<std::string>::iterator ilist;
for (ilist = vlist.begin(); ilist != vlist.end(); ++ilist)
{
rstr = prefix;
genRand(index, &rstr);
++index;

ReplaceAll(scode, *ilist, rstr);
}

// Write results
FILE* outp = fopen(outfile, "wb");
if (!outp)
{
Usage("Error creating output file");
return 1;
}
fwrite(scode.c_str(), sizeof(char), scode.size(), outp);
fclose(outp);

return 0;
}

关于javascript - 查找/替换任意 JS 属性以获得更好的压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392899/

26 4 0
文章推荐: javascript - 为 iPad(触摸屏)提供 "onClick"并为桌面用户提供默认功能
文章推荐: javascript - SignalR:调用集线器方法时发生内部服务器错误
文章推荐: javascript - 在克隆节点中设置子
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com