Javascript Rails:导入CDN文件与使用引导资源

Javascript Rails:导入CDN文件与使用引导资源,javascript,ruby-on-rails,twitter-bootstrap,performance,Javascript,Ruby On Rails,Twitter Bootstrap,Performance,我是一名全新的开发人员(大约3-4周),我一直在使用rubymine构建我的RubyonRails应用程序。我为bootstrap-4安装了一个插件,它为我提供的用于引导页面的自动模板包括以下代码行: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-wid

我是一名全新的开发人员(大约3-4周),我一直在使用rubymine构建我的RubyonRails应用程序。我为bootstrap-4安装了一个插件,它为我提供的用于引导页面的自动模板包括以下代码行:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Title</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css"
        integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous">
</head>
<body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js"
        integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" crossorigin="anonymous"></script>
</body>
</html>

标题
我已经花了2个小时阅读了CDN文件和资产管道,但我仍然不明白这里的最佳实践是什么:我应该删除这些CDN文件并用资产管道中的gems和/或“require”行替换它们,还是应该将它们留在这里?我知道这可能取决于我的目标,但我的目标只是提供我的网站风格,而不会造成加载时间的大滞后。我的一个页面将有很多onclick功能和api调用,在以前版本的应用程序中,速度变慢了(不确定是不是因为javascript,但我的直觉告诉我,这可能与此有关)

总之,我想要简单,我想要理解我的代码,哈哈。我应该保留这些CDN代码行,还是应该用资产管道中的内容替换它们

干杯,迈克尔

CDN将您的内容同时放在多个地方,提供卓越的 覆盖到您的用户

你可以阅读更多关于他们的信息

在上述情况下,最好使用CDN(内容交付网络),因为这将缩短页面的加载时间。这只是第一次从最近的位置缓存链接、脚本标记中指定的js、css文件,从下一个请求开始,它们将从浏览器的缓存中加载

在第一次请求时,由于js/css将从最近的地理位置加载,加载时间将更短

示例:

假设您的应用程序托管在美国,并且有一个用户从印度访问它。 如果您使用CDN,它将尝试从最近的地理位置加载资产,如果您没有使用CDN,那么它将从我们处加载,因此加载时间更长

一般来说,如果满足以下条件,最好使用资产:

  • 它不是常见的css/js,或者是您自己的资产
  • 如果你觉得每天/每周/每月至少改变一次
无论何时进行资产预编译,rails都会向所有资产的名称附加一个哈希代码,这是rails维护资产版本的方式。默认情况下,资产将根据应用程序的缓存设置进行缓存,应用程序将使用缓存的版本,直到新版本的资产可用。唯一的问题是,它总是第一次从应用程序的托管位置加载,所以加载时间稍微长一些


但是您可以使用AWS S3,它允许您将资产存储在S3存储桶中,然后从S3存储桶创建您自己的CDN。您可以阅读有关使用资产同步gem将资产同步到S3的以及从S3 bucket创建AWS Cloudfront(CDN)的内容。

回答得真好!因此,基本上,考虑到我的目标不高,我肯定应该使用CDN。没有必要重新发明轮子,直到我获得更好的轮子制造能力。谢谢关于这一点,还有一个问题:使用CDN文件的SCS和SAS会发生什么情况?我刚刚发现另一个stackoverflow问题/答案说CDN只提供CSS-这是真的吗?@michaelsking1993是的,提供SCS是没有意义的,即使它是可能的,因为每次你从CDN加载它时,你都必须编译它并使用CSS,因为浏览器无法理解SCS或sass。在一些gems的帮助下,您可以在rails中使用SCS和less。Rails将为您编译和压缩它们,并将其作为css使用,从而提高您网站的性能。在asset_sync gem的帮助下,您可以在Cloudfront的帮助下从s3存储桶上传编译和压缩的资产。