찾다
웹 프론트엔드JS 튜토리얼JavaScript 로딩 및 실행 효율성을 향상시키는 방법

머리말

현재 JavaScript 코드가 내장되어 있든 외부 링크 파일에 있든 관계없이 페이지 다운로드 및 렌더링은 중지하고 스크립트 실행이 완료될 때까지 기다려야 합니다. JavaScript 실행 프로세스가 길어질수록 브라우저가 사용자 입력에 응답하기 위해 기다리는 시간도 길어집니다. 스크립트를 다운로드하고 실행할 때 브라우저가 차단되는 이유는 스크립트가 페이지의 네임스페이스나 JavaScript를 변경하여 후속 페이지의 내용에 영향을 미칠 수 있기 때문입니다.

일반적인 예는 페이지에서 document.write()를 사용하는 것입니다.

JavaScript 코드 삽입 예

<html>
<head>
 <title>Source Example</title>
</head>
<body>
 <p>
 <script type="text/javascript">
 document.write("Today is " + (new Date()).toDateString());
 </script>
 </p>
</body>
</html>

브라우저에서 <script> 태그를 발견하면 현재 html 페이지에서는 JavaScript가 메시지를 보낼지 여부를 알 수 없습니다. < p> 태그는 콘텐츠를 추가하거나 다른 요소를 소개하거나 태그를 제거합니다. 따라서 브라우저는 이때 페이지 처리를 중지하고 JavaScript 코드를 먼저 실행한 다음 계속해서 페이지를 구문 분석하고 렌더링합니다. src 속성을 사용하여 JavaScript를 로드할 때도 동일한 상황이 발생합니다. 브라우저는 먼저 외부 링크 파일의 코드를 다운로드한 다음 이를 구문 분석하고 실행해야 합니다. 이 과정에서 페이지 렌더링 및 사용자 상호 작용이 완전히 차단됩니다. <br/></script>

스크립트 위치

HTML 4 사양에서는 <script> 태그를 HTML 문서의 <head> 여러 번 발생하는 것이 허용됩니다. 웹 개발자는 일반적으로 <head>에서 외부 링크의 JavaScript를 로드한 다음 <link> 태그를 사용하여 외부 링크의 CSS 파일이나 기타 페이지 정보를 로드하는 데 익숙합니다. <br/></script>

비효율적인 스크립트 위치의 예

<html>
<head>
 <title>Source Example</title>
 <script type="text/javascript" src="script1.js"></script>
 <script type="text/javascript" src="script2.js"></script>
 <script type="text/javascript" src="script3.js"></script>
 <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
 <p>Hello world!</p>
</body>
</html>

그러나 이러한 일반적인 접근 방식에는 심각한 성능 문제가 숨겨져 있습니다. 목록 2의 예에서 브라우저가 <script> 태그(4행)를 구문 분석할 때 브라우저는 그 뒤의 콘텐츠 구문 분석을 중지하고 먼저 스크립트 파일을 다운로드한 후 그 안에 있는 코드를 실행합니다. .css 스타일 파일과 <body> 태그를 로드할 수 없습니다. <body> 따라서 JavaScript 코드가 완전히 실행될 때까지 페이지는 비어 있습니다. <br/></script>

스크립트는 페이지의 다른 리소스 다운로드를 차단하므로 모든 <script> 태그를 가능한 한 <body> 태그 하단에 배치하는 것이 좋습니다. 전체 페이지 다운로드에 영향을 미칩니다. <br/></script>

권장 코드 배치 예

<html>
<head>
 <title>Source Example</title>
 <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
 <p>Hello world!</p>
  
 <!-- Example of efficient script positioning -->
 <script type="text/javascript" src="script1.js"></script>
 <script type="text/javascript" src="script2.js"></script>
 <script type="text/javascript" src="script3.js"></script>
</body>
</html>

이 코드는 HTML 문서에서 <script> 태그의 권장 배치를 보여줍니다. 스크립트 다운로드가 다른 스크립트를 차단하더라도 페이지 내용의 대부분은 이미 다운로드되어 사용자에게 표시되므로 페이지 다운로드가 너무 느려지는 것처럼 보이지 않습니다. 이것이 JavaScript 최적화의 첫 번째 규칙입니다. 스크립트를 맨 아래에 두십시오. <br/></script>

스크립트 구성

각 <script> 태그는 처음 다운로드될 때 페이지 렌더링을 차단하므로 페이지당 <script> 태그 수를 줄이는 데 도움이 됩니다. 이 상황을 개선하는 내용이 포함되어 있습니다. 이는 외부 링크 스크립트뿐만 아니라 내장된 스크립트의 수에도 적용됩니다. HTML 페이지를 구문 분석하는 동안 브라우저가 <script> 태그를 발견할 때마다 스크립트 실행으로 인해 특정 지연이 발생합니다. 따라서 지연 시간을 최소화하면 페이지의 전반적인 성능이 크게 향상됩니다. <br/></script>

이 문제는 외부 링크 JavaScript 파일을 처리할 때 약간 다릅니다. HTTP 요청과 관련된 추가 성능 오버헤드를 고려하면 단일 100Kb 파일을 다운로드하는 것이 5개의 20Kb 파일을 다운로드하는 것보다 빠릅니다. 즉, 페이지의 외부 스크립트 수를 줄이면 성능이 향상됩니다.

대개 대규모 웹사이트나 애플리케이션은 여러 JavaScript 파일에 의존합니다. 여러 파일을 하나로 병합하여 하나의 <script> 태그만 참조하면 되므로 성능 소모가 줄어듭니다. 파일 병합은 오프라인 패키징 도구나 일부 실시간 온라인 서비스를 통해 수행할 수 있습니다. <br/></script>

외부 스타일 시트를 참조하는 뒤에 인라인 스크립트를 배치하면 스타일 시트가 다운로드될 때까지 페이지가 차단된다는 점을 특별히 알려드립니다. 이는 인라인 스크립트가 실행될 때 가장 정확한 스타일 정보를 얻을 수 있도록 하기 위해 수행됩니다. 따라서 태그 바로 뒤에 인라인 스크립트를 배치하지 않는 것이 좋습니다.

비차단 스크립트

JavaScript 파일 크기를 줄이고 HTTP 요청 수를 제한하는 것이 기능이 풍부한 웹 앱이나 대규모 웹사이트에서 항상 가능한 것은 아닙니다. 웹 애플리케이션의 기능이 풍부할수록 더 많은 JavaScript 코드가 필요하며, 큰 단일 JavaScript 파일을 다운로드하면 단 하나의 HTTP 요청만 생성되지만 오랫동안 브라우저가 잠길 수 있습니다. 이를 방지하려면 브라우저를 차단하지 않는 방식으로 JavaScript 파일을 페이지에 점진적으로 로드하는 특정 기술이 필요합니다.

비차단 스크립트의 비결은 페이지 로드가 완료될 때까지 JavaScript 코드를 로드하지 않는다는 것입니다. 이는 창 개체의 onload 이벤트가 트리거된 후에 스크립트가 다운로드된다는 의미입니다. 이 효과를 얻는 방법에는 여러 가지가 있습니다.

지연 로딩 스크립트

HTML 4 为<script>标签定义了一个扩展属性:defer。Defer 属性指明本元素所含的脚本不会修改 DOM,因此代码能安全地延迟执行。defer 属性只被 IE 4 和 Firefox 3.5 更高版本的浏览器所支持,所以它不是一个理想的跨浏览器解决方案。在其他浏览器中,defer 属性会被直接忽略,因此<script>标签会以默认的方式处理,也就是说会造成阻塞。然而,如果您的目标浏览器支持的话,这仍然是个有用的解决方案。<br/></script>

defer 属性使用方法示例

<script type="text/javascript" src="script1.js" defer></script>

   

带有 defer 属性的<script>标签可以放置在文档的任何位置。对应的 JavaScript 文件将在页面解析到<script>标签时开始下载,但不会执行,直到 DOM 加载完成,即onload事件触发前才会被执行。当一个带有 defer 属性的 JavaScript 文件下载时,它不会阻塞浏览器的其他进程,因此这类文件可以与其他资源文件一起并行下载。<br/></script>

任何带有 defer 属性的<script>元素在 DOM 完成加载之前都不会被执行,无论内嵌或者是外链脚本都是如此。清单 5 的例子展示了defer属性如何影响脚本行为:<br/></script>

defer 属性对脚本行为的影响

<html>
<head>
 <title>Script Defer Example</title>
</head>
<body>
 <script type="text/javascript" defer>
 alert("defer");
 </script>
 <script type="text/javascript">
 alert("script");
 </script>
 <script type="text/javascript">
 window.onload = function(){
 alert("load");
 };
 </script>
</body>
</html>

   

这段代码在页面处理过程中弹出三次对话框。不支持 defer 属性的浏览器的弹出顺序是:“defer”、“script”、“load”。而在支持 defer 属性的浏览器上,弹出的顺序则是:“script”、“defer”、“load”。请注意,带有 defer 属性的<script>元素不是跟在第二个后面执行,而是在 onload 事件被触发前被调用。<br/></script>

如果您的目标浏览器只包括 Internet Explorer 和 Firefox 3.5,那么 defer 脚本确实有用。如果您需要支持跨领域的多种浏览器,那么还有更一致的实现方式。

HTML 5 为<script>标签定义了一个新的扩展属性:async。它的作用和 defer 一样,能够异步地加载和执行脚本,不因为加载脚本而阻塞页面的加载。但是有一点需要注意,在有 async 的情况下,JavaScript 脚本一旦下载好了就会执行,所以很有可能不是按照原本的顺序来执行的。如果 JavaScript 脚本前后有依赖性,使用 async 就很有可能出现错误。<br/></script>

动态脚本元素

文档对象模型(DOM)允许您使用 JavaScript 动态创建 HTML 的几乎全部文档内容。<script>元素与页面其他元素一样,可以非常容易地通过标准 DOM 函数创建:<br/></script>

通过标准 DOM 函数创建<script>元素</script>

var script = document.createElement ("script");
 script.type = "text/javascript";
 script.src = "script1.js";
 document.getElementsByTagName("head")[0].appendChild(script);

新的<script>元素加载 script1.js 源文件。此文件当元素添加到页面之后立刻开始下载。此技术的重点在于:无论在何处启动下载,文件的下载和运行都不会阻塞其他页面处理过程。您甚至可以将这些代码放在<head>部分而不会对其余部分的页面代码造成影响(除了用于下载文件的 HTTP 连接)。<br/></script>

当文件使用动态脚本节点下载时,返回的代码通常立即执行(除了 Firefox 和 Opera,他们将等待此前的所有动态脚本节点执行完毕)。当脚本是“自运行”类型时,这一机制运行正常,但是如果脚本只包含供页面其他脚本调用调用的接口,则会带来问题。这种情况下,您需要跟踪脚本下载完成并是否准备妥善。可以使用动态 <script> 节点发出事件得到相关信息。<br/></script>

Firefox、Opera, Chorme 和 Safari 3+会在<script>节点接收完成之后发出一个 onload 事件。您可以监听这一事件,以得到脚本准备好的通知:<br/></script>

通过监听 onload 事件加载 JavaScript 脚本

var script = document.createElement ("script")
script.type = "text/javascript";
  
//Firefox, Opera, Chrome, Safari 3+
script.onload = function(){
 alert("Script loaded!");
};
  
script.src = "script1.js";
document.getElementsByTagName("head")[0].appendChild(script);

Internet Explorer 支持另一种实现方式,它发出一个 readystatechange 事件。<script>元素有一个 readyState 属性,它的值随着下载外部文件的过程而改变。readyState 有五种取值:<br/></script>

微软文档上说,在<script>元素的生命周期中,readyState 的这些取值不一定全部出现,但并没有指出哪些取值总会被用到。实践中,我们最感兴趣的是“loaded”和“complete”状态。Internet Explorer 对这两个 readyState 值所表示的最终状态并不一致,有时<script>元素会得到“loader”却从不出现“complete”,但另外一些情况下出现“complete”而用不到“loaded”。最安全的办法就是在 readystatechange 事件中检查这两种状态,并且当其中一种状态出现时,删除 readystatechange 事件句柄(保证事件不会被处理两次):<br/></script>

通过检查 readyState 状态加载 JavaScript 脚本

var script = document.createElement("script")
script.type = "text/javascript";
  
//Internet Explorer
script.onreadystatechange = function(){
 if (script.readyState == "loaded" || script.readyState == "complete"){
 script.onreadystatechange = null;
 alert("Script loaded.");
 }
};
  
script.src = "script1.js";
document.getElementsByTagName("head")[0].appendChild(script);

   

大多数情况下,您希望调用一个函数就可以实现 JavaScript 文件的动态加载。下面的函数封装了标准实现和 IE 实现所需的功能:

通过函数进行封装

function loadScript(url, callback){
 var script = document.createElement ("script")
 script.type = "text/javascript";
 if (script.readyState){ //IE
 script.onreadystatechange = function(){
 if (script.readyState == "loaded" || script.readyState == "complete"){
 script.onreadystatechange = null;
 callback();
 }
 };
 } else { //Others
 script.onload = function(){
 callback();
 };
 }
 script.src = url;
 document.getElementsByTagName("head")[0].appendChild(script);
}

  

此函数接收两个参数:JavaScript 文件的 URL,和一个当 JavaScript 接收完成时触发的回调函数。属性检查用于决定监视哪种事件。最后一步,设置 src 属性,并将<script>元素添加至页面。此 loadScript() 函数使用方法如下:<br/></script>

loadScript()函数使用方法

loadScript("script1.js", function(){
 alert("File is loaded!");
});

您可以在页面中动态加载很多 JavaScript 文件,但要注意,浏览器不保证文件加载的顺序。所有主流浏览器之中,只有 Firefox 和 Opera 保证脚本按照您指定的顺序执行。其他浏览器将按照服务器返回它们的次序下载并运行不同的代码文件。您可以将下载操作串联在一起以保证他们的次序,如下:

通过 loadScript()函数加载多个 JavaScript 脚本

loadScript("script1.js", function(){
 loadScript("script2.js", function(){
 loadScript("script3.js", function(){
 alert("All files are loaded!");
 });
 });
});

此代码等待 script1.js 可用之后才开始加载 script2.js,等 script2.js 可用之后才开始加载 script3.js。虽然此方法可行,但如果要下载和执行的文件很多,还是有些麻烦。如果多个文件的次序十分重要,更好的办法是将这些文件按照正确的次序连接成一个文件。独立文件可以一次性下载所有代码(由于这是异步进行的,使用一个大文件并没有什么损失)。

动态脚本加载是非阻塞 JavaScript 下载中最常用的模式,因为它可以跨浏览器,而且简单易用。

使用 XMLHttpRequest(XHR)对象

此技术首先创建一个 XHR 对象,然后下载 JavaScript 文件,接着用一个动态 <script> 元素将 JavaScript 代码注入页面。清单 12 是一个简单的例子:<br/></script>

通过 XHR 对象加载 JavaScript 脚本

var xhr = new XMLHttpRequest();
xhr.open("get", "script1.js", true);
xhr.onreadystatechange = function(){
 if (xhr.readyState == 4){
 if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
 var script = document.createElement ("script");
 script.type = "text/javascript";
 script.text = xhr.responseText;
 document.body.appendChild(script);
 }
 }
};
xhr.send(null);

   

此代码向服务器发送一个获取 script1.js 文件的 GET 请求。onreadystatechange 事件处理函数检查 readyState 是不是 4,然后检查 HTTP 状态码是不是有效(2XX 表示有效的回应,304 表示一个缓存响应)。如果收到了一个有效的响应,那么就创建一个新的<script>元素,将它的文本属性设置为从服务器接收到的 responseText 字符串。这样做实际上会创建一个带有内联代码的<script>元素。一旦新<script>元素被添加到文档,代码将被执行,并准备使用。<br/></script>

这种方法的主要优点是,您可以下载不立即执行的 JavaScript 代码。由于代码返回在<script>标签之外(换句话说不受<script>标签约束),它下载后不会自动执行,这使得您可以推迟执行,直到一切都准备好了。另一个优点是,同样的代码在所有现代浏览器中都不会引发异常。<br/></script>

此方法最主要的限制是:JavaScript 文件必须与页面放置在同一个域内,不能从 CDN 下载(CDN 指"内容投递网络(Content Delivery Network)",所以大型网页通常不采用 XHR 脚本注入技术。

总结

减少 JavaScript 对性能的影响有以下几种方法:

通过以上策略,可以在很大程度上提高那些需要使用大量 JavaScript 的 Web 网站和应用的实际性能。

补充js加载函数:

function loadJs(url, callback, charset) {
 var head = document.getElementsByTagName("head")[0];
 var script = document.createElement("script");
 if ( !!charset) script.charset = "utf-8";
 script.src = url;
 script.onload = script.onreadystatechange = function() {
 var f = script.readyState;
 if (f && f != "loaded" && f != "complete") return;
 script.onload = script.onreadystatechange = null;
 head.removeChild(script) if (callback) {
 callback() || callback
 };
 };
 head.appendChild(script);
}
// js同步加载
function getScripts(i, linkArray, fn) {
 env || getEnv();
 var script = document.createElement(&#39;script&#39;);
 script.type = &#39;text/javascript&#39;;
 script.src = linkArray[i];
 var head = document.head || document.getElementsByTagName(&#39;head&#39;)[0];
 head.appendChild(script);
  
 if (env.ie && &#39;onreadystatechange&#39; in script && !(&#39;draggable&#39; in script)){ //ie浏览器使用以下方式加载
 script.onreadystatechange = function () {
 if (/loaded|complete/.test(script.readyState)) {
 script.onreadystatechange = null;
 if(i === linkArray.length-1) {
 if (fn) {
  fn();
 }
 } else {
 getScripts(++i, linkArray, fn);
 }
 }
 };
 }else{
 script.onload = function() {
 if(i === linkArray.length-1) {
 if (fn) {
  fn();
 }
 } else {
 getScripts(++i, linkArray, fn);
 }
 };
 }
}
// js存在依赖关系 依次加载
getScripts(0, [
 &#39;http://caibaojian.com/demo/base.js&#39;,
 &#39;http://caibaojian.com/demo/reset.js&#39;], function() {
 alert(&#39;callback&#39;);
});

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

更多JavaScript提高加载和执行效率的方法相关文章请关注PHP中文网!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python vs. JavaScript : 어떤 언어를 배워야합니까?Python vs. JavaScript : 어떤 언어를 배워야합니까?May 03, 2025 am 12:10 AM

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크 : 현대적인 웹 개발 파워JavaScript 프레임 워크 : 현대적인 웹 개발 파워May 02, 2025 am 12:04 AM

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

JavaScript, C 및 브라우저의 관계JavaScript, C 및 브라우저의 관계May 01, 2025 am 12:06 AM

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 TypeScript가있는 스트림입니다Node.js는 TypeScript가있는 스트림입니다Apr 30, 2025 am 08:22 AM

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

Python vs. JavaScript : 성능 및 효율성 고려 사항Python vs. JavaScript : 성능 및 효율성 고려 사항Apr 30, 2025 am 12:08 AM

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript의 기원 : 구현 언어 탐색JavaScript의 기원 : 구현 언어 탐색Apr 29, 2025 am 12:51 AM

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

무대 뒤에서 : 어떤 언어의 힘이 자바 스크립트입니까?무대 뒤에서 : 어떤 언어의 힘이 자바 스크립트입니까?Apr 28, 2025 am 12:01 AM

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

파이썬과 자바 스크립트의 미래 : 트렌드와 예측파이썬과 자바 스크립트의 미래 : 트렌드와 예측Apr 27, 2025 am 12:21 AM

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 ​​통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기